자바스크립트에서 이진 검색 트리를 만들고 표현하는 방법을 이해합시다. 먼저 BinarySearchTree 클래스를 만들고 여기에 Node 속성을 정의해야 합니다. 예시 class BinarySearchTree { constructor() { // Initialize a root element to null. this.root = null; } } BinarySearchTree.prototype.Node = c
새로 생성된 이진 트리에 처음 삽입하면 루트에 노드가 생성됩니다. 왼쪽 자식은 부모보다 작고 오른쪽 자식은 부모보다 큰 바이너리 검색 트리 속성에 따라 추가 삽입이 삽입됩니다. 코드에서 이 알고리즘을 구현하는 방법을 살펴보겠습니다. 예시 insertIter(data) { let node = new this.Node(data); // Check if the tree is empty if (this.root === null) { &nbs
BST의 속성을 사용하여 요소를 조회할 것입니다. 먼저 검색의 반복적 구현을 살펴보겠습니다. 예시 searchIter(data) { let currNode = this.root; while (currNode !== null) { if (currNode.data === data) { // Found the element! re
이진 검색 트리에서 왼쪽 자식이 항상 부모보다 작다는 속성을 보면 왼쪽 자식을 향해 계속 반복하면 도달할 때까지 왼쪽 자식이 없는 노드에서는 기본적으로 BST에서 가장 작은 요소를 찾습니다. 코드에서 이 기능을 구현해 보겠습니다. 이제부터는 함수의 단일 버전(반복 또는 재귀)만 구현할 것입니다. 이 경우, 우리는 반복 함수를 만들 것입니다 - 예시 getMinVal() { if (this.root === null) { throw "Empty tree!"
때로는 사전으로 작업할 때 사전의 키만 일부 작업에 대한 배열로 필요합니다. Object.keys를 사용하여 객체의 속성을 쉽게 얻을 수 있습니다. 이 메서드를 사용하여 컨테이너 개체에서 키를 반환합니다. 예시 keys() { 반환 Object.keys(this.container);} 다음을 사용하여 테스트할 수 있습니다. 예시 const myMap =new MyMap();myMap.put(key1, value1);myMap.put(key2, value2);console.log(myMap.keys()); 출력 이것은 출력을
컨테이너의 내용을 단순히 지우는 clear() 함수를 구현합니다. 예를 들어, 예시 clear() { this.container = {} } 다음을 사용하여 테스트할 수 있습니다. 예시 const myMap = new MyMap(); myMap.put("key1", "value1"); myMap.put("key2", "value2"); myMap.display(); myMap.clear(); myMap.display();
여기에서 클래스의 각 함수에 대해 구현하고 모든 키-값 쌍에서 호출할 수 있는 콜백을 수락합니다. 이러한 기능을 구현하는 방법을 살펴보겠습니다. 예시 forEach(callback) { for (let prop in this.container) { // Call the callback as: callback(key, value) callback(prop, this.container[prop]); } } 다음을
다음은 MyMap 클래스의 전체 구현입니다. 예시 class MyMap { constructor() { this.container = {}; } display() { console.log(this.container); } hasKey(key) { return key in this.container; &nb
해시 테이블은 연관 방식으로 데이터를 저장하는 데이터 구조입니다. 해시 테이블에서 데이터는 각 데이터 값에 고유한 인덱스 값이 있는 배열 형식으로 저장됩니다. 원하는 데이터의 인덱스를 알면 데이터에 대한 액세스가 매우 빨라집니다. 따라서 데이터의 크기에 관계없이 삽입 및 검색 작업이 매우 빠른 데이터 구조가 됩니다. 해시 테이블은 배열을 저장 매체로 사용하고 해시 기법을 사용하여 요소가 삽입되거나 위치할 인덱스를 생성합니다. 해싱 해싱은 키 값의 범위를 배열의 인덱스 범위로 변환하는 기술입니다. 모듈로 연산자를 사용하여 키 값 범
이 모든 메서드를 정의하는 데 사용할 간단한 클래스를 설정해 보겠습니다. 해시 테이블을 저장할 컨테이너 개체를 만들고 테이블을 표시하는 표시 기능을 만듭니다. 충돌 해결을 위해 연결을 사용합니다. 표시 기능은 테이블의 각 항목(해시 값)을 가져와서 관련된 모든 쌍을 인쇄합니다. 예시 또한 키-값 쌍을 저장하기 위해 프로토타입에 새 클래스를 만들 것입니다. class HashTable { constructor() { this.container = []; &n
해시 테이블에 요소를 추가할 때 가장 중요한 부분은 충돌 해결입니다. 우리는 같은 것을 위해 체이닝을 사용할 것입니다. 여기에서 읽을 수 있는 다른 알고리즘이 있습니다:https://en.wikipedia.org/wiki/Hash_table#Collision_resolution 이제 구현을 살펴보겠습니다. 이것을 단순하게 유지하기 위해 정수에 대해서만 작동하는 해시 함수를 만들 것입니다. 그러나 더 복잡한 알고리즘을 사용하여 모든 객체를 해시할 수 있습니다. 예시 put(key, value) { let h
이미 put 메소드에서 이것을 구현했습니다. 개별적으로 다시 살펴보겠습니다. 예시 get(key) { let hashCode = hash(key); for(let i = 0; i < this.container[hashCode].length; i ++) { // Find the element in the chain if(this.container[hashCode][i].key === key) {
요소를 제거하려면 배열에서 요소를 제자리에 제거하는 간단한 스플라이스 함수 호출을 사용하여 요소를 찾고 제거하기만 하면 됩니다. 동일한 구현을 살펴보겠습니다 - 예시 remove(key) { let hashCode = this.hash(key); for (let i = 0; i < this.container[hashCode].length; i++) { // Find the element in the chain &n
이제 모든 키-값 쌍을 반복하고 해당 값에 대한 콜백을 호출할 수 있는 forEach 함수를 생성하겠습니다. 이를 위해 컨테이너의 각 체인을 반복하고 키 및 값 쌍에서 콜백을 호출하기만 하면 됩니다. 예시 forEach(callback) { // For each chain this.container.forEach(elem => { // For each element in each chain call callback on KV pair  
명확한 방법은 매우 간단합니다. 컨테이너 변수를 새 객체에 다시 할당하면 이제 세트가 비어 있습니다. 이것은 다음과 같이 구현할 수 있습니다 - 예시 clear() { this.container = {}; } −를 사용하여 이것을 테스트할 수 있습니다. 예시 const testSet = new MySet(); testSet.add(1); testSet.add(2); testSet.add(5); testSet.display(); testSet.clear(); testSet.display(); 출력 이것
구현한 세트에서 클래스의 각 함수에 대해 생성하고 모든 요소에서 호출할 수 있는 콜백을 수락할 수 있습니다. 이러한 기능을 구현하는 방법을 살펴보겠습니다. 예시 forEach(callback) { for (let prop in this.container) { callback(prop); } } 다음을 사용하여 테스트할 수 있습니다. 예시 const testSet = new MySet(); testSet.add(1); testSet.add(2)
2세트를 추가하는 작업을 합집합이라고 합니다. 중복을 확인하는 동안 한 세트에서 다른 세트로 모든 개체를 추가해야 합니다. 이 방법을 구현하기 위해 이미 구현한 2가지 방법을 사용할 수 있습니다. 기존 집합을 변경하지 않고 새 집합을 만들고 반환하기를 원하므로 이 함수를 정적 함수로 구현합니다. 먼저 전달된 객체가 실제로 MySet 클래스의 인스턴스인지 확인해야 합니다. 예시 static union(s1, s2) { if (!s1 instanceof MySet || !s2 instanceof MySet)
2 집합의 차이는 빼는 집합이 빼는 집합에서 모든 요소를 제거해야 함을 의미합니다. 그래서 우리는 두 번째 세트를 반복하고 첫 번째 세트에서 그 안에 있는 모든 요소를 제거할 수 있습니다. 예시 static difference(s1, s2) { if (!s1 instanceof MySet || !s2 instanceof MySet) { console.log("The given objects are not of type MySet");
다음은 MySet 클래스의 완전한 구현입니다. 예시 class MySet { constructor() { this.container = {}; } display() { console.log(this.container); } has(val) { return this.container.hasOwnPropert
컴퓨터 과학에서 연관 배열, 지도, 기호 테이블 또는 사전은 (키, 값) 쌍의 모음으로 구성된 추상 데이터 유형입니다. 컬렉션에서 가장 자주. 사전은 지도라고도 합니다. 사전 문제는 고전적인 컴퓨터 과학 문제입니다. 검색, 삭제 및 삽입 작업 동안 데이터 집합을 유지 관리하는 데이터 구조를 설계하는 작업입니다. 다양한 유형의 사전 구현이 있습니다. 해시 테이블 구현 트리 기반 구현(자체 균형 및 불균형 트리) 목록 기반 구현 사전을 사용해야 하는 경우 사전은 만병통치약이 아니며 기회가 있을 때마다 사용해서는 안 됩니다.