스킵리스트(Skip List)by Pigbrain

-Log시간에 검색/추가/제거를 수행할 수 있는 정렬된 자료구조

-이진검색트리 대체 가능

연결리스트와의 차이점

  • 연결리스트는 하나의 ‘next’ 포인터만 갖는다
  • 스킵리스트는 다수의 ‘next’ 포인터를 갖는다 (Foward 포인터라 불린다)
    • Forward 포인터를 이용하여 빠르게 탐색 가능
    • 최상의 경우 입력 값들이 랜덤인 경우 O(log n)의 효율을 갖는다
    • 최악의 경우 정렬된 데이터들이 입력된다면 O(n)의 복잡도를 가질 수 있다

구조

검색

  • 가장 상위의 리스트 부터 검색을 시작
  • 현재 위치(p)의 값을 x, 다음 노드의 값을 y라고 가정
    • x == y이면 다음 노드를 반환
    • x > y 이면 다음 노드로 이동
    • x < y 이면 아래 리스트로 이동
  • Ex) 78을 검색

삽입

  • Ex) 15를 삽입
    • 15를 검색한다
    • 15보다 작은 수에서 검색이 종료된다
    • 검색 종료 된 위치를 Predecessor Key라고 지칭하며 이 다음 위치에 15를 삽입한다
      • 삽입할때 확률로 노드의 크기를 정하여 삽입한다

삭제

  • Ex) 34를 삭제
    • 상위 리스트의 값부터 삭제하며 아래로 이동한다

참고

  • https://en.wikipedia.org/wiki/Skip_list
  • http://www.slideshare.net/jongwookkim/skip-list
  • http://sweeper.egloos.com/m/867460
  • http://www.slideshare.net/AndresMendezVazquez/analysis-of-algorithms-13-skip-lists?related=1
Published 12 July 2015