算法导论程序6--随机算法(Python)
来源:互联网 发布:软件开发入门 编辑:程序博客网 时间:2024/06/07 16:27
随机排列数组:
一个通常的方法是为数组的每个元素A[i]赋一个随机的优先级P[i],然后依据优先级对数组A中的元素进行排序
Permute-by-sorting:
import randomdef 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
0 0
- 算法导论程序6--随机算法(Python)
- 算法导论程序8--堆(Python)
- 算法导论程序16--基数排序(Python)
- 算法导论程序21--链表(Python)
- 算法导论程序11--堆排序算法(Python)
- 算法导论之随机算法
- 算法导论程序1--插入排序(Python+Java)
- 算法导论程序2--归并排序(Python)
- 算法导论程序3--最大子数组问题(Python)
- 算法导论程序5--雇佣问题(Python)
- 算法导论程序7--在线雇佣问题(Python)
- 算法导论程序10--建堆(Python)
- 算法导论程序12--优先队列(Python)
- 算法导论程序13-快速排序的描述(Python)
- 算法导论程序15-计数排序(Python)
- 算法导论程序17-桶排序(Python)
- 算法导论程序18-最大值和最小值(Python)
- 算法导论程序20--栈和队列(Python)
- Spring AOP的底层实现原理
- 2017.5.9 寻找道路 思考记录
- 理解I/O Completion Port
- hdu6029 Graph Theory (2017女生赛)
- TimePickerDialog使用
- 算法导论程序6--随机算法(Python)
- 每天一个Linux命令:mkdir
- Oracle日期查询:季度、月份、星期等时间信息
- 从965到996,传统IT业到互联网
- STM32F10x的启动汇编分析
- JavaScript深入二
- 1.8地址总线
- 1.9数据总线
- xcode格式