[JavaScript]TWIl:データ構造2/3リンクリスト,hashTable(20/10.22-0.27)
6865 ワード
Data Structure Sprintを行っています.
2/3まで行い,今回実施した資料構成は2種類であった.
今回も自ら描いた資料構造と一緒に.(ああ)
1. linkedList
2. hashTable
LikedListは要素からなる、サイズがダイナミックなデータ構造である.
nodeにはvalue(data)とnext(pointer)という属性があり、各nodeはnext属性で接続されている.
上図は、データの一方向接続のSige-linkedListです.
また、双方向ポインタを持つデータの二重リンクリストもあります.2つのポインタprev,nextがあり,双方向にループすることができる.
LinkedListが使用する代表的な機能は音楽プレイリストです.歌をスキップしたり、前/次などを実現できます.
今回は単一の接続リストを体現しています.この点を見てみましょう.
value(data) 次ノードへのnext
addToTail(データ)リスト末尾にデータを追加 データのremove(data) の検索と削除
getNodeAt(index)、インデックスを取得するためのノード.データを返すcontains(data) このデータのインデックスOf(data) を検索する.のデータ総数を提供するsize() 以外の実装の程度による.
hashTableは、データがキー値ペアからなる、サイズがダイナミックなデータ構造である.
入力データのキー値をハッシュ関数で特定のインデックスに変換し、キー値をインデックスに格納します.ストレージスペースの効率を向上させるために、スペースが75%以上25%以下の場合、スペースサイズを調整します.(double sizing, half sizing)
ハッシュ関数でインデックスを一度にクエリーできるので、keyの値が頻繁に変化する場合に役立ちます.
また、鍵は特定のインデックスで暗号化されるため、データセキュリティが重要な場合にも暗号化されます.
代表的なのはメンバーシップDB構成,ゲームユーザのスコアDB構成などである.
sizeは、格納されたデータの数を示す 容量制限 storage
新しいキー、値のinsert(key,value) を挿入する
検索(key),入力鍵の値を取得する入力鍵のデータを削除するremove(鍵) ストレージ容量のサイズ変更(newLimit)
2/3まで行い,今回実施した資料構成は2種類であった.
今回も自ら描いた資料構造と一緒に.(ああ)
1. linkedList
2. hashTable
1. linked List
LikedListは要素からなる、サイズがダイナミックなデータ構造である.
nodeにはvalue(data)とnext(pointer)という属性があり、各nodeはnext属性で接続されている.
上図は、データの一方向接続のSige-linkedListです.
また、双方向ポインタを持つデータの二重リンクリストもあります.2つのポインタprev,nextがあり,双方向にループすることができる.
LinkedListが使用する代表的な機能は音楽プレイリストです.歌をスキップしたり、前/次などを実現できます.
今回は単一の接続リストを体現しています.この点を見てみましょう.
Property
Method
addToTail(データ)
getNodeAt(index)、インデックスを取得するためのノード.
Psuedo Code
addToTail(data) {
// 1. 입력받은 data를 가진 node를 생성
// 2. 만약, 리스트가 비어있다면 해당 node를 head이자 tail로 할당
// 3. 아니라면, 리스트의 tail의 next에 해당 node를 할당하고, 이를 tail로 지정
}
remove(data) {
// 1. data가 head일 경우 : head를 다음 node로 지정 (연결이 자동으로 끊길 것)
// 2. data가 tail일 경우 : 그 이전의 노드를 tail로 지정
// 3. 그 외 : data node의 이전 node와 다음 node를 연결(.next.next)
}
getNodeAt(index) {
// 해당 index만큼 node를 이동해 해당 node를 return
}
contains(data) {
// 리스트를 순회하여 해당 data를 찾으면 true를, 찾지 못하면 false를 return
}
indexOf(data) {
// 리스트를 순회하여 도중에 일치하는 값을 찾으면 해당 index를, 찾지 못하면 -1을 return
}
size() {
// 리스트를 순회하여 tail에서의 i(index)를 return
}
2. hashTable
hashTableは、データがキー値ペアからなる、サイズがダイナミックなデータ構造である.
入力データのキー値をハッシュ関数で特定のインデックスに変換し、キー値をインデックスに格納します.ストレージスペースの効率を向上させるために、スペースが75%以上25%以下の場合、スペースサイズを調整します.(double sizing, half sizing)
ハッシュ関数でインデックスを一度にクエリーできるので、keyの値が頻繁に変化する場合に役立ちます.
また、鍵は特定のインデックスで暗号化されるため、データセキュリティが重要な場合にも暗号化されます.
代表的なのはメンバーシップDB構成,ゲームユーザのスコアDB構成などである.
Property
size
Method
検索(key),入力鍵の値を取得する
Psuedo Code
// hashFunction과 LimitedArray는 이미 구현되어 있는 것으로 한다.
insert(key, value) {
// hashFunction(key) -> 특정 index 받음
// 1. 해당 index가 비어있는 경우
// --> 그대로 키값 쌍을 삽입
// 2. 해당 index에 이미 다른 data 1개가 존재 할 경우
// --> bucket을 만들어 기존의 data를 담고, 입력받은 키값 쌍을 삽입
// --> 만들어진 bucket을 해당 index에 삽입
// 3. 해당 index에 bucket이 존재할 경우
// --> bucket에 접근해 입력받은 키값 쌍을 삽입
// +) 삽입 후 storage 사용정도가 75% 이상 넘어가면 resize메소드를 이용해 double sizing
}
retrieve(key) {
// 1. 해당 key를 가진 data가 존재하지 않을 경우
// --> undefined를 return
// 2. 해당 key의 index에 유일한 data로 존재할 경우
// --> 바로 value 접근 가능
// 3. 해당 key의 index가 bucket일 경우
// --> bucket을 순회하며 일치하는 key 검색, 존재한다면 value를 return
}
remove(key) {
// 1. 해당 key의 index에 유일한 data로 존재할 경우
// --> 해당 index의 값을 undefined 처리
// 2. 해당 key의 index가 bucket일 경우
// --> bucket을 순회하며 일치하는 key 검색, 존재시 해당 bucket의 index를 undefined로 처리
// +) 제거 후 storage 사용정도가 25% 이하로 떨어지면 resize메소드를 이용해 half sizing
}
resize(newLimit) {
// 1. 현재 storage를 변수에 백업
// 2. size, limit, LimitedArray(double or half)로 초기화
// 3. 백업해둔 storage를 순회하며 data들을 rehashing하여 다시 삽입
}
Reference
この問題について([JavaScript]TWIl:データ構造2/3リンクリスト,hashTable(20/10.22-0.27)), 我々は、より多くの情報をここで見つけました https://velog.io/@wjdqls9362/Javascript-TWIL-자료구조-23-linkedList-hashTable-2010.2210.27テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol