중북된 데이터의 저장을 막지 않으며 나란히 저장함.
탐색/정렬을 위해서는 배열을 추가/삭제를 위해서는 연결 리스트를 사용
연결리스트의 ADT(Method라고 봐도 무방)
선형구조는 자료를 저장하고 꺼내는 것에 초점 vs 비선형 구조는 표현에 초점
Implement a linkedList
class, in functional style, with the following properties:
.head
property, a linkedListNode
instance.tail
property, a linkedListNode
instance.addToTail()
method, takes a value and adds it to the end of the list.removeHead()
method, removes the first node from the list and returns its value.contains()
method, returns boolean reflecting whether or not the passed-in value is in the linked list모든 버텍스가 아크로 연결된 그래프는 완전 그래프라고 하고 부분집합은 부분 그래프라고 부른다.
만약 다른 버텍스로 갈 때 하나의 아크 만으로 갈 수 있다면 근접(adjacent)하다고 한다.
그래프는 인접행렬(Adjacency Matrix) 또는 인접리스트(Adjacency List)로 표현할 수 있다.
Method
참조 - https://www.zerocho.com/category/Algorithm/post/584b9033580277001862f16c
용어
Method
정이진트리(full binary tree)
완전이진트리(complete binary tree)
마지막 레벨을 제외한 모든 레벨에서 노드들이 꽉 채워진 이진트리
높이가 n일 때 완전이진트리의 노드 개수는 2^(n-1) 보다 크거나 같고 (2^n) -1 보다 작거나 같다.
균형이진트리(Balanced binary tree)
참조 - https://lovelyseoul.tistory.com/20
좌우의 높이 차가 같은 이진트리.
Methods
.children
property, an array containing a number of subtrees.addChild()
method, takes any value, sets that as the target of a node, and adds that node as a child of the tree.contains()
method, takes any input and returns a boolean reflecting whether it can be found as the value of the target node or any descendant nodeBinary Search Tree
참조 - [https://ratsgo.github.io/data%20structure&algorithm/2017/10/21/tree/](https://ratsgo.github.io/data structure&algorithm/2017/10/21/tree/)
이진검색트리는 트리 구조를 이용해 각 노드 방문으로 자료를 탐색가능하게 하는 이진 트리 자료구조이다.
Tree 탐색
탐색을 할 때 트리 왼쪽은 더 작은 값, 오른쪽은 더 큰 값이다. 왼쪽에 있는 2, 4, 5의 값은 1 보다 작고 오른쪽은 더 크다.
Tree Traversal(트리순회)
전위순회 (Preorder)
중위순회 (inorder)
터미널 노드에서 시작해 노드-부모 노드-오른쪽 자식 노드로 순회. 대칭순회(Symmetric traversal)라고도 한다.
4, 2, 5, 1, 3
후위순회(postorder)
Method
A data structure that maintains associations between two data values. Data values being associated are referred to as key and value. Has other names like Associative Array, Dictionary, Map or Hash
두가지 데이터를 연결해줌. Key 1개와 Value 1개가 연관되어 있어 키로 값을 구할 수 있다.
Typical usage of arrays is in the form of a tuble, which is a data structure where each position has specific meaning and each instance are categorized accordingly. Index:Value?
Hash Table is similar to Javascript Object. Objects are implemented using hash table.
Top Level array: storage
Index that contains key/value pairs have array called buckets.
Key/value pairs are stored in tuple array. index 0 is key and index 1 is value.
단점:
Method
Retrieve(): Get Data
Remove(): Remove Data
Can use array, but key would be numerical. Using string would be more user-friendly.
JS objects are implemented using hash tables, so we can't use an object to implement a hash table...?
Hasing Function
Transmorgifier. If we put an input in, a numer comes out. then by the number, the output will come out. Constant in, constant out.
A: Instead of storing a single value at this idnex, store an array of values. However, then we cannot specify which is which. To solve this, store both the key and value. Introduce another array.
Separate Chaining: If collision occurs in bucket, chain existing value with the new one. Implement linked list.
Open Addressing: 개방주소법은 hash를 건들지 않았던 chaining과는 달리 비어있는 hash를 찾아 저장한다. 여기서 비어있는 hash를 찾는 과정은 동일해야 함.
Hash tables operate most effectively when the ratio of tuple count to storage array length is between 25% and 75%.
When the ratio is
Greater than 75%, double the size of the storage array
less than 25%, half the size of the storage array
Resizing means you need to rehash every key because it may end up in different bucket. Hasing function depends on the storage array size. Maintain time constant!
Worst Scenario: