diff --git a/08_greedy_algorithms/python/01_set_covering.py b/08_greedy_algorithms/python/01_set_covering.py index 1c77d41..d2fa08a 100644 --- a/08_greedy_algorithms/python/01_set_covering.py +++ b/08_greedy_algorithms/python/01_set_covering.py @@ -10,16 +10,23 @@ stations["kfive"] = set(["ca", "az"]) final_stations = set() -while states_needed: - best_station = None - states_covered = set() - for station, states_for_station in stations.items(): - covered = states_needed & states_for_station - if len(covered) > len(states_covered): - best_station = station - states_covered = covered +def my_set_covering(states_needed, stations): + final_stations = set() + #while states_needed is not None: 这个不对,Set()而不是None + while states_needed: + best_station = None + states_covered = set() + for station, states_for_station in stations.items(): + covered = states_needed & states_for_station + if len(covered) > len(states_covered) and station not in final_stations: + best_station = station + states_covered = covered + if best_station is not None: + states_needed -= states_covered + final_stations.add(best_station) + stations.pop(best_station) + else: + return None + return final_stations - states_needed -= states_covered - final_stations.add(best_station) - -print(final_stations) +print(my_set_covering(states_needed, stations)) diff --git a/09_dynamic_programming/python/01_longest_common_subsequence.py b/09_dynamic_programming/python/01_longest_common_subsequence.py index 9f74f93..61691a0 100644 --- a/09_dynamic_programming/python/01_longest_common_subsequence.py +++ b/09_dynamic_programming/python/01_longest_common_subsequence.py @@ -1,6 +1,13 @@ -if word_a[i] == word_b[j]: - # The letters match. - cell[i][j] = cell[i-1][j-1] + 1 -else: - # The letters don't match. - cell[i][j] = max(cell[i-1][j], cell[i][j-1]) +dp_table_blue = ["b", "l", "u", "e"] +dp_table_clues = ["c", "l", "u", "e", "s"] +dp_table = [[0 for i in range(len(dp_table_blue))] for i in range(len(dp_table_clues))] # (5,4) +print(dp_table) + +for i in range(0, len(dp_table_blue)): + for j in range(0, len(dp_table_clues)): + if dp_table_clues[j] == dp_table_blue[i]: + dp_table[j][i] = dp_table[j-1][i-1] + 1 + else: + dp_table[j][i] = max(dp_table[j-1][i], dp_table[j][i-1]) + +print(dp_table) diff --git a/09_dynamic_programming/python/02_longest_common_substring.py b/09_dynamic_programming/python/02_longest_common_substring.py new file mode 100644 index 0000000..0c27dae --- /dev/null +++ b/09_dynamic_programming/python/02_longest_common_substring.py @@ -0,0 +1,11 @@ +dp_table_blue = ["b", "l", "u", "e"] +dp_table_clues = ["c", "l", "u", "e", "s"] +dp_table = [[0 for i in range(len(dp_table_blue))] for i in range(len(dp_table_clues))] # (5,4) +print(dp_table) + +for i in range(0, len(dp_table_blue)): + for j in range(0, len(dp_table_clues)): + if dp_table_clues[j] == dp_table_blue[i]: + dp_table[i][j] = dp_table[i-1][i-1] + 1 + +print(dp_table) \ No newline at end of file