标签: median

C++有效地计算运行中位数

那些读过我之前问题的人都知道我在理解和实现快速排序和快速选择方面的工作,以及其他一些基本算法.

Quickselect用于计算未排序列表中的第k个最小元素,此概念也可用于查找未排序列表中的中位数.

这一次,我需要帮助设计一种有效的技术来计算运行中位数,因为快速选择不是一个好的选择,因为它需要在每次列表更改时重新计算.因为quickselect必须每次都重新启动,所以它不能利用先前的计算,所以我正在寻找一种类似(可能)但在运行中位数方面更有效的不同算法.

c++ algorithm median

25
推荐指数
3
解决办法
3万
查看次数

将每个列表值映射到其对应的百分位数

我想创建一个函数,它将(有序)列表作为其参数,并输出一个包含每个元素的相应百分位数的列表.

例如,fn([1,2,3,4,17])退货[0.0, 0.25, 0.50, 0.75, 1.00].

任何人都可以请:

  1. 帮我纠正下面的代码?要么
  2. 提供比我的代码更好的替代方案,用于将列表中的值映射到相应的百分位数?

我目前的代码:

def median(mylist):
    length = len(mylist)
    if not length % 2:
        return (mylist[length / 2] + mylist[length / 2 - 1]) / 2.0
    return mylist[length / 2]

###############################################################################
# PERCENTILE FUNCTION
###############################################################################

def percentile(x):
    """
    Find the correspoding percentile of each value relative to a list of values.
    where x is the list of values
    Input list should already be sorted!
    """

    # sort the input list …
Run Code Online (Sandbox Code Playgroud)

python numpy scipy median percentile

23
推荐指数
4
解决办法
2万
查看次数

如何计算SQLite中的值的中位数?

我想计算数字行中的中值.我怎么能在SQLite 4中做到这一点?

sqlite median

22
推荐指数
2
解决办法
2万
查看次数

增量中值计算,最大内​​存效率

我有一个生成价值的过程,我观察到了.当进程终止时,我想计算这些值的中值.

如果我必须计算均值,我可以只存储总和和生成的数量,因此有O(1)内存要求.中位数怎么样?有没有办法节省存储所有值的明显O(n)?

编辑:对2种情况感兴趣:1)流长度已知,2)它不是.

algorithm median

21
推荐指数
2
解决办法
4784
查看次数

nth_element的算法

我最近发现在STL中存在一个名为nth_element的方法.引用描述:

Nth_element类似于partial_sort,因为它部分地对一系列元素进行排序:它排列范围[first,last],使得迭代器nth指向的元素与该位置中的元素相同(如果整个范围[第一个,最后一个]已经排序.另外,[nth,last]范围内的元素都不小于[first,nth]范围内的任何元素.

它声称平均具有O(n)复杂性.算法如何工作?我找不到任何解释.

c++ algorithm median nth-element

19
推荐指数
1
解决办法
1万
查看次数

如何找到中位数

我有这样的数据.

Ram,500
Sam,400
Test,100
Ram,800
Sam,700
Test,300
Ram,900
Sam,800
Test,400
Run Code Online (Sandbox Code Playgroud)

从上述数据中精确"中位数"的最短方法是什么?我的结果应该是......

中位数= 1/2(n + 1),其中n是样本中数据值的数量.

Test 500
Sam 700
Ram 800
Run Code Online (Sandbox Code Playgroud)

python median

17
推荐指数
3
解决办法
9万
查看次数

计算中位数 - javascript

我一直试图计算中位数,但我仍然有一些数学问题,因为我无法得到正确的中值,无法找出原因.这是代码;

class StatsCollector {

    constructor() {
        this.inputNumber = 0;
        this.average = 0;

        this.timeout = 19000;

        this.frequencies = new Map();
        for (let i of Array(this.timeout).keys()) {
            this.frequencies.set(i, 0);
        }
    }

    pushValue(responseTimeMs) {
        let req = responseTimeMs;
        if (req > this.timeout) {
            req = this.timeout;
        }

        this.average = (this.average * this.inputNumber + req) / (this.inputNumber + 1);

        console.log(responseTimeMs / 1000)
        let groupIndex = Math.floor(responseTimeMs / 1000);
        this.frequencies.set(groupIndex, this.frequencies.get(groupIndex) + 1);

        this.inputNumber += 1;
    }

    getMedian() {
        let medianElement = 0; …
Run Code Online (Sandbox Code Playgroud)

javascript median

16
推荐指数
5
解决办法
2万
查看次数

计算中位数减少

有人可以举例说明地图中的中位数/分位数的计算吗?

我对Datafu中位数的理解是'n'映射器对数据进行排序并将数据发送到"1"reducer,它负责对n个映射器中的所有数据进行排序并找到中位数(中间值)我的理解是否正确?

如果是这样,这种方法是否适用于大量数据,因为我可以清楚地看到单个减速器正在努力完成最终任务.谢谢

statistics hadoop mapreduce apache-pig median

15
推荐指数
2
解决办法
1万
查看次数

最低编号 比较找到3个数字的中位数

我正在实施quicksort,我希望将枢轴设置为中位数或三个数字.三个数字是第一个元素,中间元素和最后一个元素.

我可以找到中位数少于没有.比较?

median(int a[], int p, int r)
{
    int m = (p+r)/2;
    if(a[p] < a[m])
    {
        if(a[p] >= a[r])
            return a[p];
        else if(a[m] < a[r])
            return a[m];
    }
    else
    {
        if(a[p] < a[r])
            return a[p];
        else if(a[m] >= a[r])
            return a[m];
    }
    return a[r];
}
Run Code Online (Sandbox Code Playgroud)

median

15
推荐指数
4
解决办法
2万
查看次数

最佳的9元素分类网络,可以减少到最佳的9中间网络?

我正在研究基于双输入最小/最大操作的九个元素的排序和中值选择网络.Knuth,TAOCP Vol.3,第2版.状态(第226页)九元素排序网络需要至少25次比较,这转换为相同数量的SWAP()基元或50分钟/最大值操作.显然,通过消除冗余操作,可以将分拣网络转换为中值选择网络.传统观点似乎是,这不会导致最佳的中值选择网络.虽然这似乎在经验上是正确的,但我在文献中找不到证据证明这一定是必然的.

LukáŝSekanina,"中位电路的进化设计空间探索".在:EvoWorkshops,2004年3月,第240-249页,给出了最佳九输入中值选择网络所需的最小/最大操作次数为30(表1).我通过John L. Smith给出的众所周知的中值选择网络"在XC4000E FPGA中实现中值滤波器"来验证这一点.XCELL杂志,Vol.23,1996,p.来自Chaitali Chakrabarti和Li-Yu Wang早期工作的"9"中间网络,"用于排序过滤器的基于网络的新型排序过滤器".IEEE超大规模集成系统交易,Vol.2,No.4(1994),pp.502-507,其中后者通过简单地消除冗余分量转换成前者.请参阅以下代码中的变体4和5.

通过消除冗余操作,检查公布的最佳九元排序网络是否适合转换为有效的中间选择网络,我设法找到的最佳版本来自John M. Gamble的在线生成器,它需要32分钟/最大操作,所以两个害羞的最佳操作计数.这在下面的代码中显示为变体1.其他最佳分拣网络分别减少到36分钟/最大操作(变体2)和38分钟/最大操作(变体3).

是否有任何已知的九元素分拣网络(即50个双输入最小/最大操作)通过单独消除冗余操作,减少到最佳九输入中值选择网络(具有30个双输入最小/最大操作) ?

下面的代码使用float数据作为测试用例,因为许多处理器为浮点数据提供最小/最大操作,但不提供整数数据,GPU是一个例外.由于特殊浮点操作数的问题(在我的实际用例中没有出现),最佳代码序列通常需要使用编译器提供的"快速数学"模式,例如在Godbolt测试平台中.

#include <cstdlib>
#include <cstdio>
#include <algorithm>

#define VARIANT     1
#define FULL_SORT   0

typedef float T;

#define MIN(a,b) std::min(a,b)
#define MAX(a,b) std::max(a,b)
#define SWAP(i,j) do { T s = MIN(a##i,a##j); T t = MAX(a##i,a##j); a##i = s; a##j = t; } while (0)
#define MIN3(x,y,z)  MIN(a##x,MIN(a##y,a##z))
#define MAX3(x,y,z)  MAX(a##x,MAX(a##y,a##z))
#define MED3(x,y,z) …
Run Code Online (Sandbox Code Playgroud)

algorithm median sorting-network

14
推荐指数
1
解决办法
860
查看次数