Skip to content

[512-Week 05]学习总结 #1341

@ZhaoJing99

Description

@ZhaoJing99

动态规划

递归代码模板

public void recur(int level, int param) {
// terminator
if (level > MAX_LEVEL) {
// process result
return;
}
// process current logic
process(level, param);
// drill down
recur( level: level + 1, newParam);
// restore current status
}

分治 Divide & Conquer

def divide_conquer(problem, param1, param2, ...):
recursion terminator
if problem is None:
print_result
return

prepare data
data = prepare_data(problem)
subproblems = split_problem(problem, data)

conquer subproblems
subresult1 = self.divide_conquer(subproblems[0], p1, ...)
subresult2 = self.divide_conquer(subproblems[1], p1, ...)
subresult3 = self.divide_conquer(subproblems[2], p1, ...)

process and generate the final result
result = process_result(subresult1, subresult2, subresult3, …)
revert the current level states

动态规划和递归或者分治没有根本上的区别(关键看有无最优的子结构)
共性:找到重复子问题
差异性:最优子结构,中途可以淘汰次优解

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions