Skip to content

Commit e3f015e

Browse files
committed
分治思想的详细解析
1 parent 9b2af38 commit e3f015e

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

Diff for: MergekSortedLists.md

+24-9
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Author: 小鹿
77

88

99

10-
#### 题目:Merge K Sorted Lists
10+
## 题目:Merge K Sorted Lists
1111

1212
Merge *k* sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
1313

@@ -27,9 +27,9 @@ Output: 1->1->2->3->4->4->5->6
2727

2828

2929

30-
#### Solve:
30+
## Solve:
3131

32-
###### ▉ 算法思路
32+
#### ▉ 算法思路
3333

3434
> 如果我们完成了简单的基于两个单链表的合并之后,对于这个题来说,考察点是分治算法,我认为还有一个考察点就是递归调用,分治的同时经常用递归来解决。
3535
>
@@ -39,7 +39,7 @@ Output: 1->1->2->3->4->4->5->6
3939
4040

4141

42-
###### ▉ 代码实现
42+
#### ▉ 代码实现
4343

4444
```javascript
4545
/**
@@ -97,17 +97,32 @@ var mergeTwoLists = function(l1, l2) {
9797

9898

9999

100+
#### ▉ 扩展:分治算法
101+
102+
> 分治算法经常和递归一块使用,所谓分治算法,顾名思义,分而治之,最基本的分之算法在归并排序、快速排序都有用到。也就是将原问题划分成 n 个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。
103+
104+
105+
106+
##### 1、分治算法递归每层操作
107+
108+
- 分解:将原问题分解成一系列的子问题。
109+
- 解决:递归地求解各个子问题,若子问题足够小,则直接求解;
110+
- 合并:将子问题的结果合并成原问题。
111+
112+
113+
114+
##### 2、分治算法满足的条件
115+
116+
- **可分解:**原问题与分解成的小问题具有相同的模式;
117+
- **无关联:**原问题分解成的子问题可以独立求解,子问题之间没有相关性,这一点是分治算法跟动态规划的明显区别。
118+
- **终止条件:**具有分解终止条件;
119+
- **合并不能太复杂:**可以将子问题合并成原问题,而这个合并操作的复杂度不能太高,否则就起不到减小算法总体复杂度的效果了。
100120

101121

102-
###### ▉ 扩展:递归
103122

104-
>
105-
>
106123

107124

108125

109126

110127

111-
###### ▉ 扩展:分治算法
112128

113-
>

0 commit comments

Comments
 (0)