算法导论程序6--随机算法(Python)

随机排列数组:

一个通常的方法是为数组的每个元素A[i]赋一个随机的优先级P[i],然后依据优先级对数组A中的元素进行排序


Permute-by-sorting:

import random
def random_array(n):
    P = random.sample(range(n*10), n)
    return P
    
def permute_by_sorting(A):
    n = len(A)
    P = random_array(n)
    print(P)
    for j in range(n):
        key_p = P[j]
        key_a = A[j]
        i = j-1
        while i >= 0 and P[i] > key_p:
            P[i+1] = P[i]
            A[i+1] = A[i]
            i-=1
        P[i+1] = key_p
        A[i+1] = key_a
    return A

原理:给定列表长度n,生成n个不重复的在(0~10×n)之间的随机数,赋值给列表P。

 permute_by_sorting方法的原理和插入排序差不多。比如A=[11,4,3,7],P=[17,20,24,6]。P代表什么意思呢?



运行:

>>> A = permute_by_sorting([1,2,3,4])
[17, 20, 24, 6]#随机数组P
>>> A
[4, 1, 2, 3]
>>> 

另外一种方法:在进行第i此迭代是,元素A[i]是从元素A[i]到A[n]中随机选取的。第i次迭代之后,A[i]不再改变。

def randomize_in_place(A):
    n = len(A)
    for i in range(n):
        j = random.randint(i,n-1)
        key = A[i]
        A[i] = A[j]
        A[j] = key 
    return A


算法运行时间:O(n)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值