algo-C1-Introductionhtml, body {overflow-x: initial !important;}html { font-size: 14px; }body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0px; right: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 1rem; line-height: 1.42857143; color: rgb(51, 51, 51); background-color: rgb(255, 255, 255); overflow-x: hidden; }a:active, a:hover { outline: 0px; }::selection { background-color: rgb(181, 214, 252); text-shadow: none; background-position: initial initial; background-repeat: initial initial; }#write { max-width: 854px; margin: 0px auto; height: auto; width: inherit; word-break: normal; word-wrap: break-word; position: relative; white-space: pre-wrap; text-align: justify; padding-bottom: 70px; }body.typora-export { padding-left: 30px; padding-right: 30px; }.typora-export #write { margin: 0px auto; }#write > p:first-child, #write > ul:first-child, #write > pre:first-child, #write > blockquote:first-child, #write > div:first-child { margin-top: 30px; }img { max-width: 100%; }input, button, select, textarea { color: inherit; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; }input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }::before, ::after, * { box-sizing: border-box; }#write p, #write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write div, #write pre { width: inherit; }h1 { font-size: 2rem; }p, .mathjax-block { display: block; -webkit-margin-before: 1rem; -webkit-margin-after: 1rem; -webkit-margin-start: 0px; -webkit-margin-end: 0px; }.hidden { display: none; }.md-blockmeta { color: rgb(204, 204, 204); font-weight: bold; font-style: italic; }a { cursor: pointer; }li span { min-width: 10px; }#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; margin: 4px 0px 0px; }tr { page-break-inside: avoid; page-break-after: auto; }thead { display: table-header-group; }table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; page-break-inside: auto; }table.md-table td { min-width: 80px; }.CodeMirror-placeholder { opacity: 0.3; }.CodeMirror-code pre { padding: 0px; }.CodeMirror-lines { padding: 0px; }div.hr:focus { cursor: none; }.md-fences, pre.md-fences { font-size: 0.9rem; display: block; page-break-inside: avoid; text-align: left; overflow: visible; white-space: pre; position: relative !important; }.md-fences .CodeMirror.cm-s-default.CodeMirror-wrap { top: -1.6em; margin-bottom: -1.6em; }.md-fences.mock-cm { white-space: pre-wrap; }.footnotes { color: rgb(136, 136, 136); font-size: 0.9rem; padding-top: 1em; padding-bottom: 1em; }.footnotes + .footnotes { margin-top: -1em; }sub, sup { line-height: inherit; position: inherit; top: inherit; vertical-align: super; }.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background-color: transparent; text-decoration: none; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 1rem; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; line-height: normal; font-weight: normal; text-align: left; box-sizing: content-box; direction: ltr; background-position: initial initial; background-repeat: initial initial; }li div { padding-top: 0px; }blockquote { margin: 1rem 0px; }li p, li .mathjax-block { margin: 0.5rem 0px; }li { margin: 0px; position: relative; }blockquote > :last-child { margin-bottom: 0px; }blockquote > :first-child { margin-top: 0px; }.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; }@media print { html, body { height: 100%; } .typora-export * { -webkit-print-color-adjust: exact; }}.footnote-line { margin-top: 0.714em; font-size: 0.7em; }a img, img a { cursor: pointer; }#write pre.md-meta-block { font-size: 0.8rem; min-height: 2.86rem; white-space: pre; background-color: rgb(204, 204, 204); display: block; background-position: initial initial; background-repeat: initial initial; }p > .md-image:only-child { display: inline-block; width: 100%; text-align: center; }#write .MathJax_Display { margin: 0.8em 0px 0px; }.mathjax-block { white-space: pre; padding-bottom: 0.65rem; overflow: hidden; width: 100%; }p + .mathjax-block { margin-top: -1.143rem; }.mathjax-block:not(:empty)::after { display: none; }[contenteditable="true"]:active, [contenteditable="true"]:focus { outline: none; box-shadow: none; }:focus { outline: none; box-shadow: rgb(79, 172, 249) 0px 0px 2px 3px, rgb(120, 174, 218) 0px 0px 2px inset; }.task-list { list-style-type: none; }.task-list-item { position: relative; padding-left: 1em; }.task-list-item input { position: absolute; top: 0px; left: 0px; }.math { font-size: 1rem; }.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-top-left-radius: 10px; border-top-right-radius: 10px; border-bottom-right-radius: 10px; border-bottom-left-radius: 10px; }.md-toc-content { position: relative; margin-left: 0px; }.md-toc::after, .md-toc-content::after { display: none; }.md-toc-item { display: block; color: rgb(65, 131, 196); text-decoration: none; }.md-toc-inner:hover { text-decoration: underline; }.md-toc-inner { display: inline-block; cursor: pointer; }.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: bold; }.md-toc-h2 .md-toc-inner { margin-left: 2em; }.md-toc-h3 .md-toc-inner { margin-left: 4em; }.md-toc-h4 .md-toc-inner { margin-left: 6em; }.md-toc-h5 .md-toc-inner { margin-left: 8em; }.md-toc-h6 .md-toc-inner { margin-left: 10em; }.md-toc-h6 { margin-left: 12em; }@media screen and (max-width: 48em) { .md-toc-h3 .md-toc-inner { margin-left: 3.5em; } .md-toc-h4 .md-toc-inner { margin-left: 5em; } .md-toc-h5 .md-toc-inner { margin-left: 6.5em; } .md-toc-h5 .md-toc-inner { margin-left: 8em; } .md-toc-h6 { margin-left: 9.5em; }}a.md-toc-inner { color: inherit; font-size: inherit; font-style: inherit; font-weight: inherit; text-decoration: inherit; line-height: inherit; }.footnote-line a:not(.reversefootnote) { color: inherit; }.md-attr { display: none; }.md-fn-count::after { content: '.'; }.md-tag { opacity: 0.5; }h1 .md-tag, h2 .md-tag, h3 .md-tag, h4 .md-tag, h5 .md-tag, h6 .md-tag { font-weight: initial; opacity: 0.35; }html { font-size: 16px; }html, body { background-color: rgb(243, 242, 238); font-family: 'PT Serif'; color: rgb(31, 9, 9); line-height: 1.5em; }#write { max-width: 36em; }ol, ul { list-style: none; }blockquote, q { quotes: none; }blockquote::before, blockquote::after, q::before, q::after { content: none; }table { border-collapse: collapse; border-spacing: 0px; }h1, h2, h3, h4, h5, h6 { font-weight: bold; }h1 { font-size: 1.875em; line-height: 1.6em; margin-top: 2em; }h2, h3 { font-size: 1.3125em; line-height: 1.15; margin-top: 2.285714em; margin-bottom: 1.15em; }h3 { font-weight: normal; }h4 { font-size: 1.125em; margin-top: 2.67em; }h5, h6 { font-size: 1em; }h1 { border-bottom-width: 1px; border-bottom-style: solid; margin-bottom: 1.875em; padding-bottom: 0.8125em; }a { text-decoration: none; color: rgb(6, 85, 136); }a:hover, a:active { text-decoration: underline; }p, blockquote, pre.md-fences, .md-fences { margin-bottom: 1.5em; }h1, h2, h3, h4, h5, h6 { margin-bottom: 1.5em; }blockquote { font-style: italic; border-left-width: 5px; border-left-style: solid; margin-left: 2em; padding-left: 1em; }ul, ol { margin: 0px 0px 1.5em 1.5em; }ol li { list-style-type: decimal; list-style-position: outside; }ul li { list-style-type: disc; list-style-position: outside; }.md-meta, .md-before, .md-after { color: rgb(153, 153, 153); }table { margin-bottom: 1.5em; font-size: 1em; }thead th, tfoot th { padding: 0.25em 0.25em 0.25em 0.4em; text-transform: uppercase; }th { text-align: left; }td { vertical-align: top; padding: 0.25em 0.25em 0.25em 0.4em; }code, pre.md-fences { background-color: rgb(218, 218, 218); padding-left: 1ch; padding-right: 1ch; }pre.md-fences { margin-left: 2em; margin-bottom: 3em; }pre, code, tt { font-size: 0.875em; line-height: 1.714285em; }h1 { line-height: 1.3em; font-weight: normal; margin-bottom: 0.5em; }p + ul, p + ol { margin-top: -1em; }h3 + ul, h4 + ul, h5 + ul, h6 + ul, h3 + ol, h4 + ol, h5 + ol, h6 + ol { margin-top: 0.5em; }li > ul, li > ol { margin-top: inherit; }h2, h3 { margin-bottom: 0.75em; }hr { border-style: none none solid; border-bottom-width: 1px; }h1 { border-color: rgb(197, 197, 197); }blockquote { border-color: rgb(186, 186, 186); color: rgb(101, 101, 101); }thead.md-table-edit { background-color: transparent; }thead { background-color: rgb(218, 218, 218); }tr:nth-child(even) { background-color: rgb(232, 231, 231); background-position: initial initial; background-repeat: initial initial; }hr { border-color: rgb(197, 197, 197); }.task-list { padding-left: 1rem; }.task-list-item { padding-left: 1.5rem; list-style-type: none; }.task-list-item input::before { content: '√'; display: inline-block; width: 1.25rem; height: 1.5rem; vertical-align: middle; text-align: center; color: rgb(221, 221, 221); background-color: rgb(243, 242, 238); }.task-list-item input:checked::before, .task-list-item input[checked]::before { color: inherit; }#write pre.md-meta-block { min-height: 1.875rem; color: rgb(85, 85, 85); border: 0px; background-color: transparent; margin-left: 1em; margin-top: 1em; background-position: initial initial; background-repeat: initial initial; }.md-image > .md-meta { color: rgb(155, 81, 70); }.md-expand.md-image > .md-meta { background-color: rgba(255, 255, 255, 0.65098); }.md-image > .md-meta { font-family: Menlo, 'Ubuntu Mono', Consolas, 'Courier New', 'Microsoft Yahei', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', sans-serif; }#write > h3.md-focus::before { left: -2.5rem; color: rgb(153, 153, 153); border-color: rgb(153, 153, 153); }#write > h4.md-focus::before { left: -2.5rem; top: 0.25rem; color: rgb(153, 153, 153); border-color: rgb(153, 153, 153); }#write > h5.md-focus::before { left: -2.5rem; color: rgb(153, 153, 153); border-color: rgb(153, 153, 153); }#write > h6.md-focus::before { left: -2.5rem; top: 0.3125rem; color: rgb(153, 153, 153); border-color: rgb(153, 153, 153); }.md-toc:focus .md-toc-content { margin-top: 19px; }.md-toc-content:empty::before { color: rgb(6, 85, 136); }.md-toc-item { color: rgb(6, 85, 136); }#write div.md-toc-tooltip { background-color: rgb(243, 242, 238); }#outline-dropmenu { background-color: rgb(243, 242, 238); -webkit-box-shadow: rgba(0, 0, 0, 0.372549) 0px 6px 12px; box-shadow: rgba(0, 0, 0, 0.372549) 0px 6px 12px; }.pin-outline #outline-dropmenu { background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; box-shadow: none; border-right-width: 1px; border-right-style: dashed; background-position: inherit inherit; background-repeat: inherit inherit; }.pin-outline #outline-dropmenu:hover .outline-title-wrapper { border-left-width: 1px; border-left-style: dashed; }.outline-item:hover { background-color: rgb(218, 218, 218); border-left-width: 18px; border-left-style: solid; border-left-color: rgb(218, 218, 218); border-right-width: 18px; border-right-style: solid; border-right-color: rgb(218, 218, 218); }.outline-expander::before { content: ''; font-family: FontAwesome; font-size: 14px; top: 1px; }.outline-expander:hover::before, .outline-item-open > .outline-item > .outline-expander::before { content: ''; }
Merge Sort:一.Motivation and Examplewhy study merge sort?The Sorting ProblemExample:二.Pseudocode:Pseudocode for Merge:Merge Sort Running Time:Running Time of Merge:Running Time of Merge SortRecall:三.AnalysisClaim:Question1:Question2Proof of claim
Merge Sort:
一.Motivation and Example
why study merge sort?
- Good introduction to divide & conquer
- Calibrate your preparation
- Motivates guiding principles for algorithm analysis(worst-case and asymptotic analysis)
- Analysis generalizes to “Master Method"
The Sorting Problem
Input: array of n numbers, unsorted. (5 4 1 8 7 2 6 3)
Output: same numbers, sorted in increasing order (1 … 8)
Example:
二.Pseudocode:
- recursively sort 1st half of input array
- recursively sort 2nd half of input array
- merge two sorted sublists into one[ ignores base cases]
Pseudocode for Merge:
Merge Sort Running Time:
Key Question: running time of MergeSort on array of n numbers?
[Running time ~ #of mines of code executed ]
Running Time of Merge:
running time of merge on array of m numbers is <= 4m + 2 <= 6m(since m >= 1)
Running Time of Merge Sort
Claim: MergeSort requires <=
operations for sort n numbers
Recall:
of times you divide by 2 until you get a number that drops below one
So if you plug in 32 you got to divide five time by two get down to one.
三.Analysis
Claim:
For every Input array of n numbers, Merge Sort produces a sorted output array and uses at most 6nlog_2n + 6n operations.
Proof of calim (assuming n = power of 2):
Question1:
how many levels does this recursion tree have.===>
beacause: {level0, level1……. level(log2n)} === > (log_2n - 0) + 1 ===>
Question2
at each level j = 0,1 ,2 , log_2n, there are 2^j subproblems, each of size n / 2^j.
第二个的原因很简单, 这颗递归树的第j层的子问题有 2^j 个, 例如第0层是1个, 第1层是两个, 由此类推, 所以每个的大小都是n / 2^j.
Proof of claim
第j层总的合并程序中所含有的指令次数是 <= 2 ^j * 6(n / 2^j) = 6n.也就是所每一层的合并程序内部所做的指令次数都是固定的, 为6n次, 所以对于这课共有log2n + 1个层的数, 总的操作次数为6n( log2n + 1) = 6nlog_2n + 6n.