Algorithm/알고리즘 패러다임

Algorithm/알고리즘 패러다임

유용한 파이썬 기능 정리

type print(type([7, 5, 2, 3, 6])) # => print(type(5)) # => print(type(3.14)) # => print(type(True)) # => print(type("True")) # => type 함수를 사용하면 파라미터의 데이터 타입이 리턴됩니다. 시간 복잡도는 O(1)입니다. max, min print(max(2, 5)) # => 5 print(max(2, 7, 5)) # => 7 print(min(2, 5)) # => 2 print(min(2, 7, 5, 11, 6)) # => 2 max 함수를 사용하면 파라미터 중 가장 큰 값이 리턴되고, min 함수를 사용하면 파라미터 중 가장 작은 값이 리턴됩니다. 두 함수 모두 파라미터 개수가 유동적이기 때문에 원..

Algorithm/알고리즘 패러다임

공간 복잡도

시간 복잡도(Time Complexity)는 인풋 크기에 비례하는 알고리즘의 실행 시간을 나타냅니다. 시간 복잡도를 잘 이해하셨다면 공간 복잡도도 어렵지 않습니다. 공간 복잡도(Space Complexity)는 인풋 크기에 비례해서 알고리즘이 사용하는 메모리 공간을 나타냅니다. 물론 공간 복잡도도 점근 표기법으로 표현할 수 있기 때문에 간편하게 Big-O 표기법을 사용할 수 있습니다. 간단한 예시 몇 가지만 봅시다. O(1) def product(a, b, c): result = a * b * c return result 파라미터 a, b, c가 차지하는 공간을 제외하면 추가적으로 변수 result가 공간을 차지합니다. result가 차지하는 메모리 공간은 인풋과 무관하기 때문에 함수 product의 공..

Algorithm/알고리즘 패러다임

주요 시간 복잡도 정리

다른 개발자들과 함께 알고리즘에 대한 의논을 하게 되면, 자연스럽게 “시간 복잡도” 이야기가 나올 수밖에 없습니다. 시간 복잡도를 계산할 줄 알아야 원활한 대화가 이루어질 수 있겠죠. 다행히, 알고리즘의 시간 복잡도는 대개 이 중 하나입니다. O(1) O(lgn) O(n) O(nlgn) O(n2) O(n3) O(n4) O(2n) O(n!) 이 중에서도 O(1), O(lgn), O(n), O(nlgn), O(n2), O(n3) 정도가 많이 사용되고, 나머지는 흔치 않습니다. O(1) O(1)은 인풋의 크기가 소요 시간에 영향이 없다는 뜻입니다. # O(1) 함수 def print_first(my_list): print(my_list[0]) print_first([2, 3]) print_first([2, 3..

Algorithm/알고리즘 패러다임

알고리즘 평가 주의 사항

점근 표기법으로 알고리즘을 평가할 때 주의해야 할 점 몇 가지만 알아봅시다. 점근 표기법에서 n은 무엇인가? 점근 표기법에서 n이 갖는 의미에 대해 착각하는 사람들이 많습니다. 하지만 사실 n은 점근 표기법에서 인풋 크기를 나타낼 때 가장 흔히 사용되는 문자일 뿐, 별다른 의미는 없습니다. 인풋 리스트의 크기를 x라고 부르기로 하면 O(lgx), O(x), O(x^2) 등의 표기를 하겠죠. “트리”나 “그래프” 같은 조금 특수한 자료 구조가 인풋으로 들어올 수도 있습니다. 트리와 그래프가 특수한 이유는 리스트처럼 “선형적”이지 않기 때문인데요. 예를 들어서 그래프는 꼭짓점(vertex)과 변(edge)으로 이루어져 있습니다. 꼭짓점의 개수를 V라고 하고 변의 개수를 E라고 하면, 두 꼭짓점 간 최단 경로..

Algorithm/알고리즘 패러다임

정렬 알고리즘 비교

우리는 일단 두 가지 정렬 방법을 살펴봤습니다. 그런데 사실 이 외에도 퀵 정렬, 힙 정렬, 거품 정렬 등 여러 정렬 알고리즘이 있는데요. 그렇다면 이 많은 정렬 알고리즘 중 어떤 게 가장 좋을까요? 이 사이트를 들어가면 여러 정렬 알고리즘의 퍼포먼스를 다양한 상황에서 살펴볼 수 있습니다. 예를 들어 이미 거의 정렬된 리스트를 정렬할 때는 삽입 정렬(Insertion Sort)이 가장 빠른 반면, 무작위 순서의 리스트를 정렬할 때는 힙 정렬(Heapsort)이 가장 먼저 끝나네요. 아예 정반대로 정렬된 리스트의 경우에는 삽입 정렬이 매우 오래 걸린다는 것도 볼 수 있죠. 선택 정렬(Selection Sort)과 합병 정렬(Merge Sort)은 상황에 영향을 받지 않고 일정한 시간이 소요된다는 점도 주목..

Algorithm/알고리즘 패러다임

알고리즘이 바꾸는 세상

네비게이션 어플 두 회사에서 각각 네비게이션 어플을 출시했다고 가정해 보세요. 둘 다 디자인이 훌륭하고, 사용성도 나쁘지 않습니다. 그러면 저는 어떤 어플을 사용해야 할까요? 우선 길을 정확하게 알려주고 도착 시간도 정확하게 알려줘야 합니다. 틀린 정보를 알려주는 어플은 그냥 안 쓰게 되겠죠. 그리고 두 번째로는 길을 빨리 알려줘야 합니다. 만약 길 한 번 찾아주는 게 2분씩이나 걸리면 답답해서 못 쓰겠죠. 결론적으로 누가 더 정확하고 효율적인 알고리즘을 사용하는지가 중요합니다. 서비스의 성공 여부가 알고리즘에 달려 있는 것입니다. 영화 어플 예전에는 영화를 보고 싶으면 비디오나 DVD를 빌려 봤었는데, 요즘은 넷플릭스나 왓챠플레이 같은 서비스를 구독해서 볼 수 있습니다. 영화를 직접 검색해서 볼 수도 ..

Algorithm/알고리즘 패러다임

알고리즘이란?

알고리즘이란? 평소에 “알고리즘”이란 말, 많이 들으시죠? 알고리즘이란, 어떤 문제를 해결하기 위한 자세한 방법입니다. 예를 들어 라면을 만들기 위해서는 냄비에 물을 끓이고, 라면 봉지를 뜯고, 스프와 건더기를 넣고, 면을 넣고, 4분 정도 기다리면 되는데요. 여기서 우리가 해결하고 싶은 문제는 라면을 끓이는 것이고, 방금 이야기한 해결 방법이 라면을 끓이는 문제에 대한 알고리즘입니다. 그런데 친구 하나는 스프랑 건더기보다 면을 먼저 넣어야 더 맛있다고 생각합니다. 또 다른 친구는 면을 익히는 중에 면을 살짝씩 위로 들어올려서 공기에 접촉시켜주면 면이 더 탱탱해진다고 주장하네요. 모두 목적은 같은데 방법이 조금씩 다릅니다. 같은 문제를 해결하기 위해서도 다양한 알고리즘이 존재하는 거죠. 좋은 알고리즘이란..

달려라 국나뇽
'Algorithm/알고리즘 패러다임' 카테고리의 글 목록 (3 Page)