본문 바로가기

Computer Science

(21)
[Swift] Linked List를 이용한 List 구현 Queue나 Stack과 같은 자료구조가 끝 단에서 원소를 입출력할 수 있는 것과 달리 List는 임의의 순서의 데이터를 삽입 또는 삭제할 수 있는 자료 구조이다. Queue와 마찬가지로 List도 다양한 방법으로 구현할 수 있지만, 이번 포스팅에서는 Linked List를 이용하여 List를 구현해 보려고 한다. Linked List에 관한 포스팅(https://taeminator1.tistory.com/36)에서 설명한 바와 같이 Linked List를 이용할 경우, 삽입/삭제 연산 시 자료의 이동이 없어 효율적이기 때문이다. Linked List를 이용하여 Queue를 구현했을 때와 마찬가지로 LinkedList의 기능을 포함하므로 상속을 통해 구현해 주었다. 클래스 다이어그램에서 알 수 있듯이, ..
[Swift]Random Surfer Trick 동작 확인 이전 포스팅에서 Random Surfer Trick을 직접 구현해 보았다(https://taeminator1.tistory.com/39). 이번 포스팅에서는 실제 출력된 결과를 바탕으로 분석을 해보려고 한다. 이후 등장하는 표의 예제 결과는 repeatNumber를 10만으로 하고(실제 예제에서는 100만으로 하였지만 백분율이어서 10을 나눠 10만으로 표기하였다), surfPossiblity를 15로 설정한 결과이다. 먼저 실행 횟수에 따라 결과에 차이가 있었다. 1000번을 반복할 경우, 실행할 때마다 변화율의 차이가 심했지만, 실행 횟수가 증가할수록 변화율에 큰 변화가 없었다. 변화율의 관점에서 봤을 때, 100000번 정도가 적당한 것으로 판단되어 이후 실행부터 repeatNumber를 10000..
[Swift]Random Surfer Trick 구현 구글의 검색엔진이 어떻게 세계 최강의 자리에 단시간에 오를 수 있었을까?? 존 매코믹은 "미래를 바꾼 아홉 가지 알고리즘"에서 그 이유 중 하나로 "Page Rank" 알고리즘을 꼽는다. 초창기 구글은 검색엔진을 사용하는 사용자에게 유용한 정보를 제공하기 위해, 두 가지 큰 절차를 따랐다. 첫 번째로 인덱싱이고 두 번째가 페이지 랭크이다. 인덱싱은 페이지에 포함되어 있는 단어들(HTML을 구성하는 텍스트들)의 페이지별 위치를 구성하는 기술이고, 페이지 랭크는 사용자가 입력한 내용이 포함된 페이지들 중에 어떤 페이지를 우선적으로 보여줄 것인지(높은 순위로 매길지)에 대한 기술이다. 이번 포스팅에서는 Page Rank의 다양한 알고리즘 중에서 Random Surfer Trick을 구현해 보려고 한다. Ran..
[Swift] Linked List를 이용한 Queue 구현 Queue는 먼저 입력된 데이터가 먼저 출력되는 자료구조이다. 이러한 특성을 선입선출(FIFO: First-In Frist-Out)이라고 한다. 이러한 개념은 일상생활에서 쉽게 찾아볼 수 있기 때문에 Queue는 많이 사용되는 자료구조 중 하나이다. Swift에서는 기본적으로 Queue를 제공해 주지는 않아서 별도로 구현해 주어야 한다. 다양한 방법으로 다양한 종류의 Queue를 구현할 수 있는데, Array를 이용한 Queue의 구조를 살펴보자. 먼저 Array를 이용하여 일렬로 쭉 늘어선 모양의 선형 Queue를 구현할 수 있다. Queue에서 가장 먼저 입력된 데이터를 출력하는 함수를 pop이라고 하겠다. pop을 하는 방법에는 크게 두 가지가 있다. 첫 번째로 pop 연산 시에 Array의 첫 번..
[Swift] Linked List 구현 Linked List는 Array와 자주 비교되는 대표적인 자료 구조 중 하나이다. 메모리에 각각의 원소를 순차적으로 저장하는 Array와 달리, Linked List는 데이터와 링크로 구성된 노드를 이용하여 메모리에 저장된 순서와 상관없이 연결된 데이터 구조를 말한다. 각각의 사각형은 Node를 의미한다. Node는 데이터(채색되어 있지 않은 부분)와 링크(채색되어 있는 부분)로 나뉘는데 데이터에는 저장하길 원하는 값을 넣고, 링크에는 다음 노드를 가리키도록 하여 Linked List를 구현할 수 있다. Array와 Linked List는 각각 대비되는 장점이 존재한다. 먼저 Array는 사용이 쉽다. Swift를 포함한 대부분의 언어에서 Array를 기본적으로 제공한다. 특히 Swift의 Array는..