Five commonly used algorithms: divide and conquer method, dynamic programming, backtracking method, branch and bound method, greedy algorithm

Table of contents

1. Divide and Conquer:

2. Dynamic programming:

3. Backtracking method:

4. Branch and boundary method:

5. Greedy Algorithm:


The five commonly used algorithms are divide and conquer method, dynamic programming, backtracking method, branch and bound method, and greedy algorithm.

1. Divide and Conquer:


The divide-and-conquer method is an algorithmic idea that decomposes a problem into smaller sub-problems and solves them separately.

def divide_and_conquer(problem):
    # 递归终止条件
    if problem is None:
        return
    elif problem is 最小规模问题:
        return 直接解决最小规模问题
    
    # 分解问题为更小规模子问题
    subproblems = split_problem(problem)
    subresult1 = divide_and_conquer(subproblems[0])
    subresult2 = divide_and_conquer(subproblems[1])
    # 合并子问题的结果
    result = merge_subresults(subresult1, subresult2)
    return result

2. Dynamic programming:


Dynamic programming is an algorithmic idea that solves complex problems by dividing the problem into sub-problems and recording the optimal solutions to the sub-problems.

def dynamic_programming(problem):
    # 创建一个数组或表格来记录子问题的最优解
    dp = [0] * (len(problem) + 1)
    
    # 逐步计算子问题的最优解
    for i in range(1, len(problem) + 1):
        dp[i] = max(dp[i-1] + problem[i-1], problem[i-1])
    
    # 返回最终问题的最优解
    return max(dp)

3. Backtracking method:


Backtracking is an algorithmic idea that solves a problem by trying different solutions and gradually building a solution to the problem.

def backtracking(result, path, choices):
    # 终止条件
    if 满足终止条件:
        result.append(path)
    
    # 尝试所有的选择
    for choice in choices:
        # 做出一个选择
        path.append(choice)
        # 递归,处理下一个选择
        backtracking(result, path, choices)
        # 撤销上一步的选择
        path.pop()

4. Branch and boundary method:


The branch-and-bound method is an algorithmic idea that solves problems by dividing the problem into sub-problems and using upper/lower bounds for pruning.

def branch_and_bound(problem):
    # 初始化队列或堆栈
    queue = []
    
    # 将问题的初始状态加入队列
    queue.append(problem)
    
    while queue:
        # 从队列中取出下一个状态
        state = queue.pop(0)
        
        # 计算当前状态的下一个可能状态
        next_state = get_next_state(state)
        
        # 判断是否满足终止条件
        if 满足终止条件:
            return 结果
        
        # 根据上界/下界进行剪枝
        if 是否需要剪枝:
            continue
        
        # 将下一个状态加入队列
        queue.append(next_state)

5. Greedy Algorithm:


The greedy algorithm is an algorithm idea that maintains the local optimal solution and hopes that the final solution will also be the global optimal.

def greedy_algorithm(problem):
    # 对问题进行排序
    sorted_problem = sort_problem(problem)
    
    # 初始化解
    solution = []
    
    # 选择局部最优解
    for item in sorted_problem:
        if 满足条件:
            solution.append(item)
    
    return solution

Guess you like

Origin blog.csdn.net/weixin_72059344/article/details/131903134