Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算随机算法中的比较次数以计算中位数_Python_Count_Comparison_Counter_Median - Fatal编程技术网

Python 如何计算随机算法中的比较次数以计算中位数

Python 如何计算随机算法中的比较次数以计算中位数,python,count,comparison,counter,median,Python,Count,Comparison,Counter,Median,我有这个实现来计算线性时间内数组的中值,但是我需要计算算法进行比较的次数,我已经尝试过了,但是我无法使它工作,关于如何使它工作,有什么想法吗 import sys import math import random DOMAIN = range(100000) # Domain: 0 - 100,000 NUM_ELEMENTS = 10000 # Number of elements: 10,000 def find_median_r

我有这个实现来计算线性时间内数组的中值,但是我需要计算算法进行比较的次数,我已经尝试过了,但是我无法使它工作,关于如何使它工作,有什么想法吗

import sys
import math
import random

DOMAIN          = range(100000)    # Domain: 0 - 100,000
NUM_ELEMENTS    = 10000             # Number of elements: 10,000 

def find_median_randomized(S):

    # S is a list, has at least 1 element
    assert (isinstance(S, list) and len(S) > 0)

    # Each element is an integer
    for num in S:
        assert isinstance(num, int)

    n = len(S)

    random.shuffle(S)

    number_of_samples = int(math.ceil(n ** (3.0 / 4.0)))
    R = random.sample(S, number_of_samples)

    R.sort()

    d_index = int(math.floor(((n ** (3.0 / 4.0)) / 2.0) - math.sqrt(n)))
    d = R[d_index]

    u_index = int(math.ceil(((n ** (3.0 / 4.0)) / 2.0) + math.sqrt(n)))
    u = R[u_index]

    c = [x for x in S if d <= x and x <= u]
    ld = len([x for x in S if x < d])
    lu = len([x for x in S if x > u])

    assert not (ld > (n / 2) or lu > (n / 2))

    assert len(c) <= 4.0 * (n ** (3.0 / 4.0))

    c.sort()

    median_index = int(math.floor(n / 2) - ld + 1)
    return c[median_index]

if __name__ == "__main__":

    random_input = random.sample(DOMAIN, NUM_ELEMENTS)
    print 'Median: %s ' % find_median_randomized(random_input)
导入系统 输入数学 随机输入 域=范围(100000)#域:0-100000 元素数=10000#元素数:10000 def查找中位数随机化: #S是一个列表,至少有1个元素 断言(isinstance(S,list)和len(S)>0) #每个元素都是一个整数 对于S中的num: 断言isinstance(num,int) n=长(S) 随机。洗牌(S) 样本数=int(math.ceil(n**(3.0/4.0))) R=随机样本(S,样本数量) R.sort() d_index=int(数学层((n**(3.0/4.0))/2.0)-math.sqrt(n))) d=R[d_指数] u_index=int(math.ceil((n**(3.0/4.0))/2.0)+math.sqrt(n))) u=R[u_指数] c=[x表示S中的x,如果d(n/2)或lu>(n/2))
断言len(c)为什么Python 2?让人们更难帮助你。为什么Python 2?让人们更难帮助你。