5つの一般的な古典的アルゴリズムのコードテンプレート
11760 ワード
アルゴリズムは、プログラマのコードの中で最も強力な試金石を体現することができますが、多くの初心者プログラムである猿の道の障害物です.しかし、プログラムの道が広がっていくためには、アルゴリズムという骨をかじることが、常に精進するための究極の近道です.この文はコードを使って5種類のよく使う経典アルゴリズムの核心の疑似コードのテンプレートを実現して、あなたと共に努力します.この文の5つの古典的アルゴリズムは、再帰的アルゴリズム、深さ優先アルゴリズム(DFS)、広さ優先アルゴリズム(BFS)、二分割ルックアップアルゴリズム、および動的プログラミングアルゴリズムである.
もちろん、以上の5つのアルゴリズムのコアコードは、コア思想の擬似コードだけです.具体的な問題は具体的に分析して、さらなるコードの最適化と処理をします.参考URL:https://github.com/geektime-geekbang/algorithm-1
**Talk is cheap, show you the code!**
1、再帰アルゴリズム(Recursion Algorithm)# ( )
def recursion(level,param1,param2):
# level
# recursion terminator
# MAX_LEVEL
if level > MAX_LEVEL:
print_result
return
# process in current level level
process(level,data)
# drill down
recursion(level+1,p1,p2)
# reverse the current level status if needed level
reverse_state(level)
2、深さ優先アルゴリズム(DFS)def DFS(node):
# visited
visited = {}
visited.add(node)
# 、
for next_node in node.children():
if next_node not in visited:
visited.add(next_node)
3、広さ優先アルゴリズム(BFS)def BFS(start,end):
# visited
visited = {}
visited.add(start)
# ,
queue = []
queue.append([start])
# 、
while queue:
node = queue.pop()
visited.add(node)
process(node)
nodes = generate_relate_nodes(node)
queue.push(node)
4、二分検索アルゴリズム(Binary Search)def binarySearch(nums, target):
if not nums:
return
n = len(nums)
left,right = 0,n-1
while left <= right:
mid = left+(right-left)>>1
if nums[mid] == target:
return mid
elif nums[mid] > target:
right = mid - 1
else:
left = mid + 1
return
5、ダイナミック企画(Dynamic Prograamming)def dynamicPro(nums):
#
if not nums or not nums[0]:
return
m,n = len(nums), len(nums[0])
dp = [[0 for _ in range(m)] for _ in range(n)]
#
dp[0][0], dp[0][1] = x,y
for i in range(m):
for j in range(n):
# max min
dp[i][j] = max/min(
dp[i-1][j-1],dp[i-1][j],dp[i][j-1])
return dp[m-1][n-1]
結び目もちろん、以上の5つのアルゴリズムのコアコードは、コア思想の擬似コードだけです.具体的な問題は具体的に分析して、さらなるコードの最適化と処理をします.参考URL:https://github.com/geektime-geekbang/algorithm-1