파이썬 2

[파이썬] Hash Table 구현과 Hash Collision 해결 기법

해쉬 테이블(Hash Table)은 키(Key)와 데이터(Value)를 저장하는 데이터 구조로, 키와 짝을 이루는 데이터를 빠르게 찾을 수 있는 특징이 있다. 해쉬(Hash)는 임의의 값을 고정 길이로 변환하는 것으로, 해쉬 함수(Hashing Function)을 통해 해쉬 값(Hash Value)을 산출할 수 있다. 즉 해쉬 테이블의 키를 해싱 함수로 연산해서 얻은 해쉬 값을 기반으로 데이터 저장 위치를 정하는 것이다. 해쉬 테이블은 배열처럼 미리 데이터 공간을 생성한 후 사용한다. 따라서 서로 다른 키들의 해쉬 값이 우연히 같을 경우, 같은 공간에 데이터를 저장해버리는 충돌(Collision) 문제가 발생할 수 있다. 따라서 이 문제를 해결하기 위한 여러가지 알고리즘들이 존재한다. 참고로 파이썬에서는..

[파이썬] Linked List, Doubly Linked List 직접 구현하기

배열(Array)은 순차적으로 연결된 공간에 데이터를 나열하는 구조인데 비해 연결리스트(Linked List)는 떨어진 곳에 존재하는 데이터를 포인터(Pointer)로 연결해서 관리한다. 따라서 연결리스트는 데이터와 다음 데이터의 주소를 가리키는 포인터를 하나의 저장 단위로 한다. 이 하나의 저장 단위를 노드(Node)라고 한다. 장점 - 배열처럼 데이터 공간을 미리 할당하지 않아도 됨 - 중간에 데이터를 추가/삭제시 연결을 위한 포인터 값만 바꾸면 되므로, 배열처럼 데이터를 옮겨줘야하는 작업이 불필요함 단점 - 데이터 뿐만 아니라 연결을 위한 데이터도 함께 관리해야 하므로 저장공간 효율이 좋지 않음 - 데이터가 메모리상에 순차적으로 저장된다는 보장이 없으므로 데이터 접근 속도가 느림 연결리스트의 종류로..