logo

Хешування в JavaScript

Хешування — це популярна техніка, яка використовується для якнайшвидшого зберігання та отримання даних. Основна причина використання хешування полягає в тому, що воно виконує вставку, видалення, пошук та інші операції

Навіщо використовувати хешування?

У хешуванні всі операції, такі як вставка, пошук і видалення, можуть виконуватися за O(1), тобто постійний час. Найгірша часова складність для хешування залишається O(n), але середня часова складність випадку дорівнює O(1).

HashTable

Використовується для створення нової хеш-таблиці.



Синтаксис:

// function to delete a key from the hashtable  delete (key) {  const index = this._setKey(key);  if (this.table[index]) {  this.table[index] = [];  this.size--;  return true;  } else {  return false;  } }>

Основні операції з синтаксисом

отримати:

Використовується для пошуку ключа в хеш-таблиці та повернення значення, пов’язаного з цим ключем.

Синтаксис:

// function inside hashtable class to  // access a value using its key get(key) {  const target = this._setKey(key);  return this.table[target]; }>

Вставити:

Використовується для вставки нової пари ключ-значення в хеш-таблицю.

Синтаксис:

// function to insert a value in the  // hash table using setKey function insert(value) {  const index = this._setKey(value);  this.table[index] = value;  this.size++; }>

пошук:

Використовується для пошуку значення.

Синтаксис:

// search a value (by getting its  // key using setKey function) search(value){  const index = this._setKey(value);  if(this.table[index]==value)  console.log('The value is found at index : ',index);  else  console.log('Not found'); }>

Видалити:

Використовується для видалення певної пари ключ-значення з хеш-таблиці.

Синтаксис:

// function to delete a key from the hashtable  delete (key) {  const index = this._setKey(key);  if (this.table[index]) {  this.table[index] = [];  this.size--;  return true;  } else {  return false;  } }>

Компоненти хешування в Javascript

1. Хеш-таблиця: Хеш-таблиця є узагальненням масиву. Це надає функціональні можливості, у яких колекція даних зберігається таким чином, що можна легко знайти ці елементи пізніше, якщо потрібно. Це робить пошук елемента дуже ефективним.

що таке android easter egg

2. Хеш-функція: Хеш-функція використовується для перетворення даного ключа в певний індекс слота. він використовується для відображення кожного можливого ключа в унікальний індекс слота. Якщо кожен ключ відображається в унікальному індексі слота, тоді хеш-функція відома як ідеальна хеш-функція. Дуже складно створити ідеальну хеш-функцію, але наша робота як програміста полягає в тому, щоб створити таку хеш-функцію, за допомогою якої буде якомога менше колізій.

Хороша хеш-функція повинна мати такі властивості:

  • Ефективно обчислюється.
  • Слід рівномірно розподілити ключі (Кожна позиція таблиці однаково ймовірна для кожної).
  • Слід звести до мінімуму зіткнення.
  • Повинен мати низький коефіцієнт завантаження (кількість елементів у таблиці поділена на розмір таблиці).

3. Усунення зіткнень: Оскільки хеш-функція отримує невелике число для великого ключа, існує ймовірність того, що два ключі дадуть одне й те саме значення. Ситуація, коли щойно вставлений ключ відображається на вже зайнятий слот у хеш-таблиці, називається зіткненням і має бути оброблено за допомогою певної техніки обробки зіткнень. Нижче наведено способи вирішення конфліктів:

  • Зв'язування: Ідея полягає в тому, щоб кожна клітинка хеш-таблиці вказувала на пов’язаний список записів, які мають однакове значення хеш-функції. Зв'язування є простим, але вимагає додаткової пам'яті поза таблицею.
  • Відкрита адресація: При відкритій адресації всі елементи зберігаються в самій хеш-таблиці. Кожен запис таблиці містить або запис, або NIL. Під час пошуку елемента ми розглядаємо слоти таблиці по черзі, поки не знайдемо потрібний елемент або не стане ясно, що елемента немає в таблиці.

Реалізація з прикладом:

Крок 1: Створіть клас HashTable із початковими властивостями таблиці та розміру.

крок 2: Додайте приватну функцію setKey(key), щоб перетворити ключі на індекси.

крок 3: Додайте функції insert() і get() для додавання та доступу до пар ключ-значення з таблиці.

проектування бази даних в dbms

крок 4: Додайте функцію remove(), щоб видалити ключ із хеш-таблиці.

приклад 1: Припустимо, ми маємо зберегти 5 чисел 100, 87, 86, 12, 25 і 9 у хеш-таблиці. У цьому випадку ми створимо функцію setKey, у якій ми візьмемо значення як аргумент і перетворимо його на індекс хеш-таблиці. Нижче наведено реалізацію.

Javascript

Команда linux для zip




// HashTable Implementation> class HashTable {> >constructor() {> >this>.table =>new> Array(10);> >this>.size = 0;> >}> >// private function to convert key to index> >// _ shows that the function is private> >_setKey(key) {> >return> key % 10;> >}> >// insert value in the hashtable> >insert(value) {> >const index =>this>._setKey(value);> >this>.table[index] = value;> >this>.size++;> >}> >get(key) {> >const target =>this>._setKey(key);> >return> this>.table[target];> >}> >search(value) {> >const index =>this>._setKey(value);> >if> (>this>.table[index] == value)> >console.log(>'The value is found at index : '>, index);> >else> >console.log(>'Not found'>);> >}> >delete>(key) {> >const index =>this>._setKey(key);> >if> (>this>.table[index]) {> >this>.table[index] = [];> >this>.size--;> >return> true>;> >}>else> {> >return> false>;> >}> >}> }> const hashExample =>new> HashTable();> // insert> hashExample.insert(100);> hashExample.insert(87);> hashExample.insert(86);> hashExample.insert(12);> hashExample.insert(9);> console.log(hashExample.table);>// ->показує хеш-таблицю> // search> hashExample.search(87);>// found> hashExample.search(10);>// not found> // delete> hashExample.>delete>(12);> // showing table after deletion> console.log(hashExample.table);>

>

>

Вихід:

[ 100,  ,  12,  ,  86,  87,  ,  9 ] The value is found at index : 7 Not found [ 100,  ,  [],  ,  86,  87,  ,  9 ]>

У вихідних даних або показує, що таблиця має 1 або 3 послідовні порожні місця/індекси.

приклад 2: Припустімо, ми хочемо зберегти контактні номери сім’ї з 5 членів у хеш-таблиці. Для цього ми створимо хеш-таблицю розміром 10 і збережемо контактні дані. Індекс буде встановлено за допомогою приватної функції setKey, яка перетворить останню цифру контактного номера в індекс хеш-таблиці.

рохіт шетті актор

Javascript




hashmap
// HashTable Implementation> class HashTable {> >constructor() {> >this>.table =>new> Array(10);> >this>.size = 0;> >}> >// private function to convert key to index> >// _ shows that the function is private> >_setKey(key) {> >const lastDigit = key % 10;> >return> lastDigit;> >}> >// insert value in the hashtable> >insert(value) {> >const index =>this>._setKey(value);> >this>.table[index] = value;> >this>.size++;> >}> >get(key) {> >const target =>this>._setKey(key);> >return> this>.table[target];> >}> >search(value) {> >const index =>this>._setKey(value);> >if> (>this>.table[index] == value)> >console.log(>'The contact number is found at index : '>, index);> >else> >console.log(>'Contact Number not found'>);> >}> >delete>(key) {> >const index =>this>._setKey(key);> >if> (>this>.table[index]) {> >this>.table[index] = [];> >this>.size--;> >return> true>;> >}>else> {> >return> false>;> >}> >}> }> const hashExample =>new> HashTable();> // insert> hashExample.insert(98754525);> hashExample.insert(98747512);> hashExample.insert(94755523);> hashExample.insert(92752521);> hashExample.insert(98556529);> console.log(hashExample.table);>// ->показує хеш-таблицю> // search> hashExample.search(92752521);>// found> hashExample.search(92755784);>// not found> // delete> hashExample.>delete>(92752521);> // showing table after deletion> console.log(hashExample.table);>

>

>

Вихід:

[ ,  92752521,  98747512,  94755523,  ,  98754525,  ,  98556529 ] The contact number is found at index : 1 Contact Number not found [ ,  [],  98747512,  94755523,  ,  98754525,  ,  98556529 ]>

У вихідних даних або показує, що таблиця має 1 або 3 послідовні порожні місця/індекси.