广度优先搜索

  1. def BFS(graph, start, end):
  2. visited = set()
  3. queue = []
  4. queue.append([start])
  5. while queue:
  6. node = queue.pop()
  7. visited.add(node)
  8. process(node)
  9. nodes = generate_related_nodes(node)
  10. queue.push(nodes)
  11. # other processing work
  12. ...

深度优先搜搜

  1. visited = set()
  2. def dfs(node, visited):
  3. if node in visited: # terminator
  4. # already visited
  5. return
  6. visited.add(node)
  7. # process current node here.
  8. ...
  9. for next_node in node.children():
  10. if next_node not in visited:
  11. dfs(next_node, visited)
  1. def DFS(self, tree):
  2. if tree.root is None:
  3. return []
  4. visited, stack = [], [tree.root]
  5. while stack:
  6. node = stack.pop()
  7. visited.add(node)
  8. process (node)
  9. nodes = generate_related_nodes(node)
  10. stack.push(nodes)
  11. # other processing work
  12. ...

贪心算法

贪心算法是一种在每一步选择中都选取当前状态下最好或最优的选择,从而希望导致结果是全局最优

  1. 贪心算法对每个子问题的解决方案都作出选择不能回退
  2. 动态规划会保存以前的运算结果,并根据以前的结果对当前进行选择,有回退功能

二分查找

二分查找的前提

  1. 目标函数单调性(单调递增或者递减)
  2. 存在上下界
  3. 能够通过索引访问
  1. left, right = 0, array.length - 1
  2. while (left <= right) {
  3. mid = (left + right) / 2
  4. if (array[mid] == target){
  5. # find the target!!
  6. break or return result
  7. } else if (array[mid] < target) {
  8. left = mid + 1
  9. } else {
  10. right = mid - 1
  11. }
  12. }