목록알고리즘 (20)
DOing
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/mjz3e/btq5c6PmCTK/pWkJutn2Gq4kedA8lJVtzK/img.png)
💡 해쉬 테이블? : 해시테이블은 키에 대한 데이터를 저장하는 데이터구조이다. : 키를 해시함수로 연산하여 해시 값을 알아내고, 이를 기반으로 키에 대한 데이터값을 알아낼 수 있다. : 즉, 키를 통해 데이터를 바로 알아낼 수 있어 속도가 획기적으로 빨라진다. : 파이썬의 딕셔너리 타입이 바로 해시테이블구조로 구현 되어있다. 💡 해쉬 테이블 구현하기 class Dict: def __init__(self): self.items = [None] * 8 def put(self, key, value): index = hash(key) % len(self.items) self.items[index] = value def get(self, key): index = hash(key) % len(self.items) ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bJWszF/btq5beUyeeL/25KfUwZyKrnrPi8j9RMTiK/img.png)
시간 복잡도는 알고리즘 복잡도 중에 하나이다. 이번 포스팅에서는 알고리즘 복잡도에서부터 시간복잡도, 빅오 표기법에 대해서 알아보자. 🌱 알고리즘 복잡도? 하나의 문제를 푸는 알고리즘은 다양할 수 있다. 다양한 알고리즘 중 어느 알고리즘이 더 좋은지를 판단하기 위한 평가방법이다. 이러한 알고리즘의 복잡도를 계산하는 다양한 방법들이 있다. 그중에 가장 중요한 것 두개를 꼽자면, 1) 시간 복잡도 : 알고리즘 실행속도 2) 공간 복잡도 : 알고리즘이 사용하는 메모리 사이즈 -> 예전에는 메모리가 비쌌기때문에 이게 중요하기도 했다. -> 하지만 공간복잡도는 요즘엔 잘 계산하지않고 시간 복잡도를 주로 계산한다. 시간복잡도 표기법에는 Big O 표기법, 오메가 표기법, 세타 표기법이 있다. Big O 표기법은 최악..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ZwhiL/btq434k83hF/ehbcVkQSGItk9SzsZH3800/img.png)
💡 Linked List(연결리스트) 배열(array)은 미리 공간을 예약해놓고 그 공간에 데이터를 쓰고 읽는다. 링크드 리스트(linked list)는 미리 예약을 해놓지않고 필요할때마다 데이터를 추가할 수 있는 구조다. 배열은 데이터만 저장하지만, linked list는 (데이터+다음 데이터를 가르키는 주소)를 저장한다. - 노드 : 데이터 저장단위(데이터값, 포인터)로 구성 - 포인터 : 각 노드안에서 다음이나 이전데이터의 주소를 가지고 있는 공간 💡 링크드리스트 장단점 장점: 1) 미리 공간을 할당하지않아도된다. 2) 연속된 공간을 할당할 필요도 없다. 단점: 1) 저장공간의 효율이 높지않다. -> 데이터 뿐만아니라 주소를 위한 공간이 필요하기 때문이다. 2) 접근 속도가 느리다. -> 배열은 인..
💡 배열(Array) 배열은 같은 종류의 데이터를 순차적으로 저장하는 데이터 구조이다. [ 배열의 장점 ] : 인덱스를 통한 빠른 접근 가능 [ 배열의 단점 ] : 데이터 추가/삭제가 쉽지않다. : 미리 최대 길이를 지정해야한다. 파이썬은 배열보다 추가적인 기능을 제공하기 때문에 이 단점이 와닿지 않을 수 있다. country='US'; country=country+'a' 하지만 본래의 C에서는 이러한 배열의 단점이 와닿는다. #include int main(int argc, char * argv[]){ char country[3] ='US'; # 미리 최대길이를 지정해야한다, 이 길이를 넘을 수 없다. printf("%c%c\n", country[0], country[1]); retrun 0; } 파이..