1.計算二項式係數(動態規劃)
# coding:utf-8
# computing c(n,k)
def binomial_coefficient(n,k):
if k == 0 or k == n:
result = 1
else:
result = binomial_coefficient(n-1,k-1)+binomial_coefficient(n-1,k)
return result
print binomial_coefficient(10,3)
2.floyd演算法
# coding:utf-8
# floyd
_ = float('inf')
a = [[0,_,3,_],[2,0,_,_],[_,7,0,1],[6,_,_,0]]
for k in range(4):
for i in range(4):
for j in range(4):
if a[i][j] > a[i][k] + a[k][j]:
a[i][j] = a[i][k] + a[k][j]
else:
pass
print a
3.揹包問題
# coding:utf-8
# knapsack_problem
w = [2,1,3,2]
v = [12,10,20,15]
matrix =
sub_lst =
for i_i in range(5):
for j_j in range(6):
sub_lst =
for i in range(1,5):
for j in range(1,6):
if j >= w[i-1]:
matrix[i][j] = max(matrix[i-1][j],v[i-1]+matrix[i-1][j-w[i-1]])
else:
matrix[i][j] = matrix[i-1][j]
print matrix
4.用於計算最小公約數的euclid演算法
# coding:utf-8
# euclid
def euclid(m,n):
while n != 0:
r = m % n
m = n
n = r
return m
print euclid(60,24)
5.求乙個一維陣列中大小最接近的兩個元素的差
# coding:utf-8
# mindistance
def mindistance(lst):
dmin = float('inf')
for i in range(len(lst)):
for j in range(len(lst)):
if i < j and abs(lst[i]-lst[j]) < dmin:
dmin = abs(lst[i] - lst[j])
else:
pass
return dmin
print mindistance([1,99,5,10,23,80])
6.計算乙個十進位制數轉換為二進位制數後的位數
# coding:utf-8
# calculate count of binary
# method1
def binary(n):
count = 1
while n > 1:
count += 1
n = n / 2
return count
print binary(4)
# method2
def binary2(n):
if n == 1:
return 1
else:
return binary2(n/2)+1
print binary2(4)
7. 選擇排序
# coding:utf-8
# selection_sort
def swap(a,b):
tmp = a
a = b
b = tmp
return a,b
def selection_sort(lst):
for i in range(len(lst)-1):
min = i
for j in range(1,len(lst)):
if lst[j] < lst[min]:
min = j
lst[i],lst[min] = swap(lst[i],lst[min])
return lst
print selection_sort([3,1,2])
8.氣泡排序
# coding:utf-8
# bubblesort
def swap(a,b):
tmp = a
a = b
b = tmp
return a,b
def bubble_sort(lst):
for i in range(len(lst)-1):
for j in range(len(lst)-1-i):
if lst[j+1] < lst[j]:
lst[j],lst[j+1] = swap(lst[j],lst[j+1])
return lst
print bubble_sort([3,1,2])
資料結構與演算法 一些常用的演算法技巧總結
陣列的下標是乙個隱含的很有用的陣列,特別是在統計一些數字,或者判斷一些整型數是否出現過的時候。例如,給你一串字母,讓你判斷這些字母出現的次數時,我們就可以把這些字母作為下標,在遍歷的時候,如果字母a遍歷到,則arr a 就可以加1了,即 arr a 通過這種巧用下標的方法,我們不需要逐個字母去判斷。...
一些資料結構
dir heapq about all builtins cached doc file loader name package spec heapify max heapreplace max siftdown siftdown max siftup siftup max heapify heap...
一些常用的資料結構維護手法
這篇會理論上講一講常用的資料結構維護手法。我是嘴巴選手我自豪!cdq分治 現在我們有一些修改,有一些詢問,修改之間獨立。我們考慮分治,對於左右兩半分別分治,然後對於左邊的修改計算對右邊詢問的貢獻。本身的複雜度是o nlogn 整體二分 現在我們有一些修改,有一些詢問。我們需要求出,在最少多少組修改之...