<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>알고리즘 on Sobamemil</title>
    <link>https://blog.sobamemil.com/tags/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</link>
    <description>Recent content in 알고리즘 on Sobamemil</description>
    <generator>Hugo</generator>
    <language>ko</language>
    <lastBuildDate>Fri, 09 Apr 2021 23:36:05 +0900</lastBuildDate>
    <atom:link href="https://blog.sobamemil.com/tags/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>크러스컬 알고리즘 구현 2 (붕괴법칙을 적용한 방법)</title>
      <link>https://blog.sobamemil.com/posts/181-%ED%81%AC%EB%9F%AC%EC%8A%A4%EC%BB%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B5%AC%ED%98%84-2-%EB%B6%95%EA%B4%B4%EB%B2%95%EC%B9%99%EC%9D%84-%EC%A0%81%EC%9A%A9%ED%95%9C-%EB%B0%A9%EB%B2%95/</link>
      <pubDate>Fri, 09 Apr 2021 23:36:05 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/181-%ED%81%AC%EB%9F%AC%EC%8A%A4%EC%BB%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B5%AC%ED%98%84-2-%EB%B6%95%EA%B4%B4%EB%B2%95%EC%B9%99%EC%9D%84-%EC%A0%81%EC%9A%A9%ED%95%9C-%EB%B0%A9%EB%B2%95/</guid>
      <description>&lt;p&gt;&lt;strong&gt;프로그램 개요 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;C 언어를 사용한 크러스컬 알고리즘(Kruskal Algorithm) 구현.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;붕괴법칙을 적용하지 않은 크러스컬 알고리즘.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;붕괴법칙을 적용한 크러스컬 알고리즘&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;프로그램 구조 및 설계:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;이전 글과 이어지는 포스팅입니다. 프로그램의 구조와 설계 방법은 아래 링크에서 보실 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sobamemil.tistory.com/180&#34;&gt;2021.04.09 - [알고리즘] - 크러스컬 알고리즘 구현 1 (붕괴법칙을 적용하지 않은 방법)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[크러스컬 알고리즘 구현 1 (붕괴법칙을 적용하지 않은 방법)&lt;/p&gt;
&lt;p&gt;프로그램 개요 : C 언어를 사용한 크러스컬 알고리즘(Kruskal Algorithm) 구현. 붕괴법칙을 적용하지 않은 크러스컬 알고리즘. 붕괴법칙을 적용한 크러스컬 알고리즘 입력 파일 : 프로그램 실행 결과 :&lt;/p&gt;</description>
    </item>
    <item>
      <title>크러스컬 알고리즘 구현 1 (붕괴법칙을 적용하지 않은 방법)</title>
      <link>https://blog.sobamemil.com/posts/180-%ED%81%AC%EB%9F%AC%EC%8A%A4%EC%BB%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B5%AC%ED%98%84-1-%EB%B6%95%EA%B4%B4%EB%B2%95%EC%B9%99%EC%9D%84-%EC%A0%81%EC%9A%A9%ED%95%98%EC%A7%80-%EC%95%8A%EC%9D%80-%EB%B0%A9%EB%B2%95/</link>
      <pubDate>Fri, 09 Apr 2021 23:28:25 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/180-%ED%81%AC%EB%9F%AC%EC%8A%A4%EC%BB%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B5%AC%ED%98%84-1-%EB%B6%95%EA%B4%B4%EB%B2%95%EC%B9%99%EC%9D%84-%EC%A0%81%EC%9A%A9%ED%95%98%EC%A7%80-%EC%95%8A%EC%9D%80-%EB%B0%A9%EB%B2%95/</guid>
      <description>&lt;p&gt;&lt;strong&gt;프로그램 개요 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;C 언어를 사용한 크러스컬 알고리즘(Kruskal Algorithm) 구현.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;붕괴법칙을 적용하지 않은 크러스컬 알고리즘.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;붕괴법칙을 적용한 크러스컬 알고리즘&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;크러스컬 알고리즘에 대한 설명은 아래 링크의 이전 글에서 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sobamemil.tistory.com/150&#34;&gt;2020.07.02 - [알고리즘] - 크러스컬(Kruskal) 알고리즘&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[크러스컬(Kruskal) 알고리즘&lt;/p&gt;
&lt;p&gt;크러스컬(Kruskal) 알고리즘이란? 크러스컬 알고리즘은 최소 비용 신장 그래프를 찾는 알고리즘 입니다. 변의 개수를 E, 꼭지점의 개수를 V라고 한다면 크러스컬 알고리즘은 O(ElogV)의 시간 복잡도&lt;/p&gt;
&lt;p&gt;sobamemil.tistory.com](&lt;a href=&#34;https://sobamemil.tistory.com/150&#34;&gt;https://sobamemil.tistory.com/150&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;이 글에서는 예로 주어진 그래프에 대해서 크러스컬 알고리즘으로 문제를 해결하는 방법과 코드를 작성하였습니다.&lt;/p&gt;</description>
    </item>
    <item>
      <title>크러스컬(Kruskal) 알고리즘</title>
      <link>https://blog.sobamemil.com/posts/150-%ED%81%AC%EB%9F%AC%EC%8A%A4%EC%BB%ACkruskal-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</link>
      <pubDate>Thu, 02 Jul 2020 18:03:16 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/150-%ED%81%AC%EB%9F%AC%EC%8A%A4%EC%BB%ACkruskal-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</guid>
      <description>&lt;p&gt;&lt;strong&gt;크러스컬(Kruskal) 알고리즘이란?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;크러스컬 알고리즘은 최소 비용 신장 그래프를 찾는 알고리즘 입니다.&lt;/p&gt;
&lt;p&gt;변의 개수를 E, 꼭지점의 개수를 V라고 한다면 크러스컬 알고리즘은 O(ElogV)의 시간 복잡도를 갖습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;크러스컬의 MST(욕심쟁이 방법) 알고리즘 간략 코드 :&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1  2  3  4  5  6  7  8  9  10  11  12  13  14  15&lt;/td&gt;
          &lt;td&gt;edge_set kruskal_MST(edge_set E, int n) {  sort(E); // 간선 정렬  edge_set MST_E = { };  for (i=0; i&amp;lt;n; i++) init_set(i); // n개의 집합(트리)을 생성  while(MST_E의 간선 수 &amp;lt; n - 1) {  (u, v) = E의 최소 가중치 간선;  E = E - {(u, v)};  if(find(u) != find(v)) // u와 v가 다른 집합(트리) 원소  {  MST_E = MST_E ∪ {(u, v)}; // 간선 추가  union(u, v); // 두 집합(트리)을 합병  }  }  return MST_E;  }&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;- 예제 -&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>합병 정렬(Merge Sort) 알고리즘</title>
      <link>https://blog.sobamemil.com/posts/129-%ED%95%A9%EB%B3%91-%EC%A0%95%EB%A0%ACmerge-sort-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</link>
      <pubDate>Wed, 18 Mar 2020 14:20:58 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/129-%ED%95%A9%EB%B3%91-%EC%A0%95%EB%A0%ACmerge-sort-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</guid>
      <description>&lt;p&gt;합병 정렬(Merge Sort)이란?&lt;/p&gt;
&lt;p&gt;분할 정복 알고리즘(=Divide and conquer algorithm 즉, 그대로 해결할 수 없는 문제를 작은 문제로 분할하여 문제를 해결하는 방법이나 알고리즘입니다.)의 하나로 O(&lt;em&gt;n&lt;/em&gt; log &lt;em&gt;n&lt;/em&gt;)의 시간 복잡도를 가지고 있습니다.&lt;/p&gt;
&lt;p&gt;합병 정렬의 작동 알고리즘은 아래와 같습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;리스트의 길이가 1 이하이면 이미 정렬된 것으로 본다. 그렇지 않은 경우에는&lt;/li&gt;
&lt;li&gt;분할(divide) : 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다.&lt;/li&gt;
&lt;li&gt;정복(conquer) : 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다.&lt;/li&gt;
&lt;li&gt;결합(combine) : 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다. 이때 정렬 결과가 임시배열에 저장된다.&lt;/li&gt;
&lt;li&gt;복사(copy) : 임시 배열에 저장된 결과를 원래 배열에 복사한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이해가 잘 안간다면 아래 애니메이션을 통해 작동 원리를 쉽게 이해할 수 있습니다.&lt;/p&gt;</description>
    </item>
    <item>
      <title>삽입 정렬(Insertion Sort) 알고리즘</title>
      <link>https://blog.sobamemil.com/posts/127-%EC%82%BD%EC%9E%85-%EC%A0%95%EB%A0%ACinsertion-sort-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</link>
      <pubDate>Tue, 17 Mar 2020 23:05:39 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/127-%EC%82%BD%EC%9E%85-%EC%A0%95%EB%A0%ACinsertion-sort-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</guid>
      <description>&lt;p&gt;삽입 정렬(Insertion Sort)이란?&lt;/p&gt;
&lt;p&gt;자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘입니다.&lt;/p&gt;
&lt;p&gt;삽입 정렬의 시간 복잡도는 O(n2)이며 안정 정렬입니다.&lt;/p&gt;
&lt;p&gt;또한 배열이 길어질수록 효율이 매우 떨어지지만 구현이 간단하다는 장점이 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/127/img_1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;삽입 정렬의 예&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/127/img_2.gif&#34;&gt;&lt;/p&gt;
&lt;p&gt;삽입 정렬의 애니메이션       -Simpsons contributor-&lt;/p&gt;
&lt;p&gt;삽입 정렬 알고리즘을 구현하기 전에 의사코드(Pseudocode)로 먼저 이해를 하고 코드를 작성하는 것이 더 쉽게 작성할 수 있을 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pseudocode :&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1  2  3  4  5  6  7  8  9&lt;/td&gt;
          &lt;td&gt;//InsertionSort pseudo code  InsertionSort(A,n) // sort A[1&amp;hellip;n]  for j &amp;lt;- 2 to n  do key &amp;lt;- A[j]  i &amp;lt;- j-1  while i&amp;gt;0 and A[i]&amp;gt;key  do A[i+1] &amp;lt;- A[i]  i &amp;lt;- i-1  A[i+1] &amp;lt;- key&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;C****코드 :&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
