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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions