{"data":{"site":{"siteMetadata":{"title":"lastrites2018","author":"lastrites2018","siteUrl":"https://lastrites2018.netlify.com","comment":{"disqusShortName":"","utterances":"lastrites2018/gatsby-first-blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"aabf467d-093d-56b3-b7d5-9de2dabdfc79","excerpt":"checkpoint 5~checkpoint 6 3, 6은 같은 원리다. Array의 특성은 연속성이다. 하나를 지우면, 뒤의 것이 다 옮겨져야 한다. 하나를 삽입한다고 해도 다 이동하겠지. 시간 복잡도 계산해보기 Array remove : 하나를 지우면 n번을 움직여줘야 하니까 Linked Lists Lookup Head에서 시작할 수밖에 없다(singled linked list) o(n) n 번 걸리니까 Insertion ( insert constant O(1)) node…","html":"<h2 id=\"checkpoint-5checkpoint-6\"><a href=\"#checkpoint-5checkpoint-6\" aria-label=\"checkpoint 5checkpoint 6 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>checkpoint 5~checkpoint 6</h2>\n<p><img src=\"https://ws4.sinaimg.cn/large/006tNbRwgy1fvloh4ncf4j30hb0auq3p.jpg\" alt=\"3\"></p>\n<p><img src=\"https://ws1.sinaimg.cn/large/006tNbRwgy1fvloh4bvxdj30hj0atmxw.jpg\" alt=\"4\"></p>\n<p>3, 6은 같은 원리다. Array의 특성은 연속성이다. 하나를 지우면, 뒤의 것이 다 옮겨져야 한다. 하나를 삽입한다고 해도 다 이동하겠지.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token number\">2.</span> time complexity 최악의 경우를 가정하고 해야 한다<span class=\"token punctuation\">.</span>\n<span class=\"token number\">4.</span> linked list index라는 값이 없고 우리가 알 수 있는 것은 tail과 head 밖에 없기 때문에 Linear\n<span class=\"token number\">6.</span> <span class=\"token number\">3</span>번과 같은 원리\n<span class=\"token number\">7.</span> 어떤 값을 제거 한다고 해서 값을 일일히 옮겨주는 것이 아니기 때문에<span class=\"token punctuation\">,</span> <span class=\"token function\">constant</span><span class=\"token punctuation\">(</span> 빠른 계산들은 constant 라고 보면 된다<span class=\"token punctuation\">.</span><span class=\"token punctuation\">)</span>\n<span class=\"token number\">9.</span> 값을 다 돌아봐야 하기 때문\n<span class=\"token number\">11.</span> binary search의 worst <span class=\"token keyword\">case</span>\n<span class=\"token number\">12.</span> 검색하는 것과 시간 복잡도는 같다<span class=\"token punctuation\">.</span>\n<span class=\"token comment\">// hash 자료를 찾는 것과 자료를 지우는 것은 같은 시간</span>\n<span class=\"token number\">13.</span>\n<span class=\"token number\">14.</span>\n<span class=\"token comment\">//</span>\n<span class=\"token number\">2.</span> 수도클래스의 함수는 리턴을 하지 않는다</code></pre></div>\n<h2 id=\"시간-복잡도-계산해보기\"><a href=\"#%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84-%EA%B3%84%EC%82%B0%ED%95%B4%EB%B3%B4%EA%B8%B0\" aria-label=\"시간 복잡도 계산해보기 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>시간 복잡도 계산해보기</h2>\n<p>Array</p>\n<ul>\n<li>remove : 하나를 지우면 n번을 움직여줘야 하니까</li>\n</ul>\n<p>Linked Lists</p>\n<ul>\n<li>Lookup</li>\n</ul>\n<p>Head에서 시작할 수밖에 없다(singled linked list)</p>\n<p>o(n) n 번 걸리니까</p>\n<ul>\n<li>\n<p>Insertion ( insert constant O(1))</p>\n<p>node를 알고 있다는 전제하에 insert 하는 거기 때문에 constant</p>\n</li>\n<li>\n<p>내 논리가 있는 것이 중요</p>\n</li>\n<li>\n<p>Removal ( 헤드만 옮겨주면 됨-> 문서 순서대로)</p>\n</li>\n</ul>\n<p>실제로는 메모리상 어딘가에 있다. 자바스크립트의 자료 구조가 배열, 객체밖에 없기 때문에. 연습을 위해서 하는 것일뿐.</p>\n<ul>\n<li>리밸런싱</li>\n</ul>\n<p>O(n) 리밸런싱 -> O(log n)</p>\n<p>정렬을 하는 이유? 더 빨리 찾기 위해서. 자료가 많이 쌓이기 전인 초반에 리밸런싱 하는 것이 비용이 적게 든다.</p>\n<p>바꾸거나 넣는 것은 연산이 아니라 constant로 본다.</p>\n<p>시간의 복잡도는 최악의 경우를 상정하여 생각해야 한다.</p>\n<h2 id=\"시간-복잡도-보충학습\"><a href=\"#%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84-%EB%B3%B4%EC%B6%A9%ED%95%99%EC%8A%B5\" aria-label=\"시간 복잡도 보충학습 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>시간 복잡도 보충학습</h2>\n<ul>\n<li>문제를 해결하려고 할 때마다 시간복잡도를 분석하는 습관을 들이면 좋은 개발자가 될 수 있습니다.</li>\n</ul>\n<blockquote>\n<p>문제에 있어 최고의 답이나, 정답이 무엇인지 말하긴 어렵다. 좀 더 낫거나 더 나쁜 해결책에 대해서 말하는 건 가능하다.</p>\n</blockquote>\n<ol>\n<li>\n<p><strong>O(1) – 상수 시간</strong> : 알고리즘이 문제를 해결하는데 오직 한 단계만 거칩니다.</p>\n<p>값을 검색할 때, 객체에서 키를 알거나 배열에서 인덱스를 알고 있으면 언제나 한 단계만 걸립니다.</p>\n</li>\n<li>\n<p><strong>O(log n) – 로그 시간</strong> : 문제를 해결하는데 필요한 단계들이 연산마다 특정 요인에 의해 줄어듭니다.</p>\n<p>배열에서 값을 찾을 때, 어느 쪽에서 시작할지를 알고 있으면 검색하는 시간이 두배로 줄어듭니다</p>\n</li>\n<li>\n<p><strong>O(n) – 직선적 시간</strong> : 문제를 해결하기 위한 단계의 수와 입력값 n이 1:1 관계를 가집니다.</p>\n</li>\n<li>\n<p><strong>O(n^2) – 2차 시간</strong> : 문제를 해결하기 위한 단계의 수는 입력값 n의 제곱입니다.</p>\n<p><em>지수 시간은 보통 문제를 풀기 위해 모든 조합과 방법을 시도할 때 사용됩니다.</em></p>\n</li>\n<li>\n<p><strong>O(C^n) – 지수 시간</strong> : 문제를 해결하기 위한 단계의 수는 주어진 상수값 C 의 n 제곱입니다.</p>\n</li>\n</ol>\n<p>참조 : <a href=\"https://joshuajangblog.wordpress.com/2016/09/21/time_complexity_big_o_in_easy_explanation/\">https://joshuajangblog.wordpress.com/2016/09/21/time<em>complexity</em>big<em>o</em>in<em>easy</em>explanation/</a></p>\n<h2 id=\"hash-table\"><a href=\"#hash-table\" aria-label=\"hash table permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Hash Table</h2>\n<p>Hash : 잘게 쪼개서 알 수 없는 형태로 만듬</p>\n<ol>\n<li>\n<p>해쉬 함수의 특징</p>\n</li>\n<li>\n<p>같은 input으론 항상 같은 output이 나와야 한다</p>\n</li>\n</ol>\n<p>가장 간단한 hash function이 %(나머지)</p>\n<p>우리가 hashing algorithm을 구현할 일은 없다</p>\n<h2 id=\"git-upsreammerge\"><a href=\"#git-upsreammerge\" aria-label=\"git upsreammerge permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>GIT upsream/merge</h2>\n<p>upstream -> origin -> local</p>\n<p>오리진에 푸쉬하고 업스트림에 풀을 요청하는데…</p>\n<p>local이 먼저 commit하고 upsteram이 커밋 했을때</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">git pull upstream master로 변경\n\n이미 merge를 한 상황이면 esc <span class=\"token operator\">+</span> <span class=\"token punctuation\">:</span>wq\n\nconflict의 경우 push를 하면 충돌되는 파일이 열림<span class=\"token punctuation\">.</span> 필요한 부분만 수정하고 add해서 커밋하면 됨<span class=\"token punctuation\">.</span></code></pre></div>","frontmatter":{"title":"Immersive Sprint - DATA Structure Day 3","date":"September 21, 2018"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"/til/20180921 IM08D05 DATA Structure Day 3/","previous":{"fields":{"slug":"/til/20180920 IM08D04 DATA Structure Day 2/"},"frontmatter":{"title":"Immersive Sprint - DATA Structure Day 2","category":"TIL"}},"next":{"fields":{"slug":"/til/20180922 IM08D06 DATA Structure Day 4/"},"frontmatter":{"title":"Immersive Sprint - DATA Structure Day 4","category":"TIL"}}}}