[자료구조] Sorted map과 Skip list

  

Sorted Map과 Skip List 톺아보기

1. Sorted Map

1.1 Sorted Map이란?

Sorted Map은 key-value 쌍 데이터를 key 순서대로 정렬하여 저장하는 자료구조다(key는 자연수임을 가정). 즉, 키를 통해 값을 빠르게 찾을 수 있을 뿐만 아니라, 정렬된 순서대로 데이터를 탐색할 수 있다는 장점이 있다.

1.2 Sorted Map의 활용 예: Maxima Sets (최대값 집합)

Maxima Sets는 2차원 평면에서 x 좌표가 증가할 때 y 좌표가 감소하지 않는 점들의 집합을 찾는 문제이다. Sorted Map을 사용하면 효율적으로 Maxima Sets를 찾을 수 있다.

Python
def find_maxima_sets(points):
    maxima_sets = []
    sorted_map = {}  # Sorted Map 사용
    for x, y in sorted(points):  # 점들을 x 좌표 기준으로 정렬
        if not sorted_map or y > sorted_map.peekitem()[1]:  # 현재 y 값이 가장 큰 y 값보다 크면
            sorted_map[x] = y  # Sorted Map에 추가
    maxima_sets.append(list(sorted_map.items()))  # Maxima Sets에 추가
    return maxima_sets

위 코드는 Maxima Sets를 찾는 알고리즘이다. 점들을 x 좌표 기준으로 정렬한 후, Sorted Map을 사용하여 현재까지 가장 큰 y 값보다 큰 점들만 저장한다. 이렇게 하면 Maxima Sets를 효율적으로 찾을 수 있다.



2. Skip List

2.1 Sorted Map의 한계 극복

Sorted Map은 array나 linked list로 구현할 수 있다. 하지만 array로 구현하면 삽입/삭제 연산에 O(n) 시간이 소요되고, linked list로 구현하면 binary search을 사용할 수 없어 검색 속도가 느려진다. Skip List는 이러한 Sorted Map의 한계를 극복하기 위해 고안된 확률적 자료구조다.

2.2 Skip List의 구조

Skip List는 여러 개의 linked list로 구성되며, 각 리스트는 이전 리스트의 일부 노드만 포함한다. 결과적으로 검색, 삽입, 삭제 연산의 시간 복잡도를 평균 O(log n)으로 줄일 수 있다.

skip list

* skip list의 동작 :

    - next(p) : 같은 층의 다음 node return
    - prev(p) : 같은 층의 이전 node return
    - below(p) : 바로 아래 층의 node return
    - above(p) : 바로 위 층의 node return

2.3 Skip List의 핵심 연산

  • Search (검색): 가장 상위 리스트에서 시작하여, 찾는 키 값보다 작거나 같은 키 값을 가진 노드를 찾을 때까지 오른쪽(next 동작)으로 이동한다. 만약 다음 노드의 키 값이 찾는 키 값보다 크면 아래쪽 리스트(below 동작)로 이동하여 탐색을 계속한다.

  • Insert (삽입): 먼저 검색 과정을 통해 삽입할 위치를 찾는다. 그 후, 동전 던지기를 통해 새로운 노드가 포함될 리스트(몇 층일지)를 결정하고, 해당 리스트에 노드를 삽입한다.

  • Remove (삭제): 검색 과정을 통해 삭제할 노드를 찾은 후, 해당 노드를 모든 리스트에서 제거한다.

3. 마무리

Sorted Map은 key 순서대로 데이터를 관리하고 탐색하는 데 유용한 자료구조다. Skip List는 Sorted Map의 한계를 극복하여 검색, 삽입, 삭제 연산을 효율적으로 수행할 수 있도록 한다.역시 문제를 발견하고, 더 나은 알고리즘을 찾아 해결해나가는 것... 참 대단하다.

[자료구조] 왜 자료구조를 배우는가?
(https://hyeonb.blogspot.com/2024/03/blog-post.html)
[자료구조] Map에 대하여
hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2