分享

python之常用算法

 佬总图书馆 2019-12-19


  • 岳小岳

    2018-11-16 


  1. 1.计算二项式系数(动态规划)
  2. # coding:utf-8
  3. # computing C(n,k)
  4. def Binomial_coefficient(n,k):
  5. if k == 0 or k == n:
  6. result = 1
  7. else:
  8. result = Binomial_coefficient(n-1,k-1)+Binomial_coefficient(n-1,k)
  9. return result
  10. print Binomial_coefficient(10,3)
  11. 2.Floyd算法
  12. # coding:utf-8
  13. # floyd
  14. _ = float('inf')
  15. a = [[0,_,3,_],[2,0,_,_],[_,7,0,1],[6,_,_,0]]
  16. for k in range(4):
  17. for i in range(4):
  18. for j in range(4):
  19. if a[i][j] > a[i][k] + a[k][j]:
  20. a[i][j] = a[i][k] + a[k][j]
  21. else:
  22. pass
  23. print a
  24. 3.背包问题
  25. # coding:utf-8
  26. # knapsack_problem
  27. w = [2,1,3,2]
  28. v = [12,10,20,15]
  29. matrix = []
  30. sub_lst = []
  31. for i_i in range(5):
  32. for j_j in range(6):
  33. sub_lst.append(0)
  34. matrix.append(sub_lst)
  35. sub_lst = []
  36. for i in range(1,5):
  37. for j in range(1,6):
  38. if j >= w[i-1]:
  39. matrix[i][j] = max(matrix[i-1][j],v[i-1]+matrix[i-1][j-w[i-1]])
  40. else:
  41. matrix[i][j] = matrix[i-1][j]
  42. print matrix
  43. 4.用于计算最小公约数的Euclid算法
  44. # coding:utf-8
  45. # Euclid
  46. def Euclid(m,n):
  47. while n != 0:
  48. r = m % n
  49. m = n
  50. n = r
  51. return m
  52. print Euclid(60,24)
  53. 5.求一个一维数组中大小最接近的两个元素的差
  54. # coding:utf-8
  55. # minDistance
  56. def minDistance(lst):
  57. dmin = float('inf')
  58. for i in range(len(lst)):
  59. for j in range(len(lst)):
  60. if i < j and abs(lst[i]-lst[j]) < dmin:
  61. dmin = abs(lst[i] - lst[j])
  62. else:
  63. pass
  64. return dmin
  65. print minDistance([1,99,5,10,23,80])
  66. 6.计算一个十进制数转换为二进制数后的位数
  67. # coding:utf-8
  68. # calculate count of binary
  69. # method1
  70. def Binary(n):
  71. count = 1
  72. while n > 1:
  73. count += 1
  74. n = n / 2
  75. return count
  76. print Binary(4)
  77. # method2
  78. def Binary2(n):
  79. if n == 1:
  80. return 1
  81. else:
  82. return Binary2(n/2)+1
  83. print Binary2(4)
  84. 7. 选择排序
  85. # coding:utf-8
  86. # selection_sort
  87. def swap(a,b):
  88. tmp = a
  89. a = b
  90. b = tmp
  91. return a,b
  92. def Selection_Sort(lst):
  93. for i in range(len(lst)-1):
  94. min = i
  95. for j in range(1,len(lst)):
  96. if lst[j] < lst[min]:
  97. min = j
  98. lst[i],lst[min] = swap(lst[i],lst[min])
  99. return lst
  100. print Selection_Sort([3,1,2])
  101. 8.冒泡排序
  102. # coding:utf-8
  103. # BubbleSort
  104. def swap(a,b):
  105. tmp = a
  106. a = b
  107. b = tmp
  108. return a,b
  109. def Bubble_sort(lst):
  110. for i in range(len(lst)-1):
  111. for j in range(len(lst)-1-i):
  112. if lst[j+1] < lst[j]:
  113. lst[j],lst[j+1] = swap(lst[j],lst[j+1])
  114. return lst
  115. print Bubble_sort([3,1,2])

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多