算法导论 中位数和顺序统计量(python)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法导论 中位数和顺序统计量(python)相关的知识,希望对你有一定的参考价值。

第i个顺序统计量:该集合中第i小的元素(建集合排序后第i位 当然算法可以不排序)

中位数:集合中的中点元素

下中位数技术分享

上中位数技术分享

9.1最大值和最小值

技术分享

单独的max或min每个都要扫一遍 n-1次比较

如果同时找max和min 要技术分享

技术分享:1.2个数相互比较 1次{每次选出2个 选n//2次}

2.大的和max比较

3.小的和min比较

找出序列为第i小的数Θ(n)

随机快速排序的运用:(可以回去看快排)

代码:

import random

def PARTTION(A,p,r):
    x = A[r]
    i = p -1
    for j in range(p,r):
        if A[j] <= x:
            i += 1
            A[j],A[i] = A[i],A[j]
    i += 1
    A[r],A[i] = A[i],A[r]
    print(x,A)
    return i

def RANDOMIZED_PARTITION(A,p,r):
    #主元随机化处理
    t = random.randint(p,r)
    A[t],A[r] = A[r],A[t]
    return PARTTION(A,p,r)



def RANDOMIZED_SELECT(A,p,r,i):
    #A 要查找的list
    #p 左边界
    #r 右边界
    #i 值[p,r]中第i位
    if p == r: #只有一位
        return A[p]

    q = RANDOMIZED_PARTITION(A,p,r) #快排关键代码 分成俩半
    k = q - p + 1
    if i == k:
        return A[q]
    elif i < k:
        return RANDOMIZED_SELECT(A,p,q-1,i)
    else:
        return RANDOMIZED_SELECT(A,q+1,r,i-k)


if __name__ == "__main__":
    A = [89, 100, 21, 5, 2, 8, 33, 27, 63]
    print(RANDOMIZED_SELECT(A,0,len(A)-1,2)) #查找第二位

‘‘‘
>>> 
=========== RESTART: F:/python/algorithms/9_3_randomized_select.py ===========
63 [21, 5, 2, 8, 33, 27, 63, 100, 89]
21 [5, 2, 8, 21, 33, 27, 63, 100, 89]
5 [2, 5, 8, 21, 33, 27, 63, 100, 89]
5

win7+python3.5.1
>>> 
‘‘‘

以上是关于算法导论 中位数和顺序统计量(python)的主要内容,如果未能解决你的问题,请参考以下文章

算法导论

中位数和顺序统计量

读书笔记 -- 算法导论(第二部分 排序和顺序统计学)

中位数和顺序统计量

中位数和顺序统计量

《算法导论》学习摘要chapter-6——堆排序