#!/usr/bin/python
#coding=utf-8
'''created on 2012-9-25
@author: linzuxin
'''status = {}
def factorial(n):
'''輸入乙個數字,求其階乘。status是乙個hash,用來儲存中間結果,避免重複計算
@param n: 要求的數字
@return: n的階乘
'''if n == 0 or n == 1:
status[0] = 1
status[1] = 1
return 1
elif status.has_key(n):
return status[n]
else:
status[n] = factorial(n - 1) * n
return status[n]
print factorial(100)
#!/usr/bin/python
#coding=utf-8
'''created on 2012-9-25
@author: linzuxin
'''status = {}
def fibonacci(n):
'''輸入乙個數字,求其斐波那契數。status是乙個hash,用來儲存中間結果,避免重複計算
@param n: 要求的數字
@return: n的斐波那契數
'''if n == 0 or n == 1:
status[0] = 1
status[1] = 1
return 1
elif status.has_key(n):
return status[n]
else:
status[n] = fibonacci(n - 2) + fibonacci(n - 1)
return status[n]
print fibonacci(100)
#!/usr/bin/python
#coding=utf-8
'''created on 2012-9-26
@author: linzuxin
'''def permutation(array, start, end):
'''輸入乙個陣列,然後輸出其全排列
@param array: 要求全排列的陣列
@param start: 陣列的開始下標
@param end: 陣列的結束下標
'''if start == end:
for i in array:
print i,
print
else:
for i in range(start, end + 1):
array[start], array[i] = array[i], array[start]
permutation(array, start + 1, end)
array[start], array[i] = array[i], array[start]
array = [1, 2, 3]
permutation(array, 0, len(array) - 1)
#!/usr/bin/python
#coding=utf-8
'''created on 2012-9-26
@author: linzuxin
'''status = {}
def divideint(n, m):
'''輸入乙個數字,求其整數劃分種類
@param n: 要求的數字
@param m: 劃分中最大的加數不大於m
@return: 劃分總數
'''try:
return status[(n, m)]
except keyerror:
if n == 1 or m == 1:
status[(n, m)] = 1
return status[(n, m)]
elif m > n:
status[(n, m)] = divideint(n, n)
return status[(n, m)]
elif m == n:
status[(n, m)] = 1 + divideint(n, n - 1)
return status[(n, m)]
else:
status[(n, m)] = divideint(n - m, m) + divideint(n, m - 1)
return status[(n, m)]
print divideint(500, 500)
#!/usr/bin/python
#coding=utf-8
'''created on 2012-9-26
@author: linzuxin
'''count = 0
def hanoi(n, start, end, middle):
'''輸入漢諾塔個數,求出其需要移動的次數
@param start: 開始漢諾塔的位置
@param end: 最終漢諾塔的位置
@param middle: 用來過渡的位置
'''global count
if n == 1:
print start, ' => ', end
count += 1
else:
hanoi(n - 1, start, middle, end)
print start, ' => ', end
count += 1
hanoi(n - 1, middle, end, start)
hanoi(2, 'a', 'b', 'c')
print count
Dinic演算法例子
寫法 1 用鄰接矩陣儲存各個流的起點終點 2 用bfs把圖分出層次 記錄到各個點需要流幾次 3 用dfs對圖找出增廣路進行流量擴充 注意反向流要記錄成容量為0的路徑,更新正向流時也要更新反向流 教材361頁 includeusing namespace std struct edge edge ed...
分治演算法 例子
分治策略 將問題分解成若干個小的子問題,每個子問題與大問題同型 所以裡面可以用遞迴 但規模更小 遞迴解決這些子問題 將子問題的解答合併,獲得大問題的解答 最大欄位和問題 include include include using namespace std int a 100 int maxsum ...
排序演算法例子
氣泡排序 include using namespace std 氣泡排序,時間複雜度o n 2 穩定,比較次數最少n 1,最多n n 1 2 void bubble sort int list,int num int main bubble sort2 arraylist,len for int ...