Решение коллизий методом открытой адресации(не важно C# или C++)
Формулировка задачи:
Посмотрите пожалуйста на код. Не могу понять в чем проблема. Алгоритм с книги Т.Кормена ( ссилка - > https://brb.to/texts/other/i48NWg7CO...-i-analiz.html). Потом проверял етот алгоритм -> Хэш-таблица. Он работает правильно. Переписал под свою лабу - коллизии не решаються.
Код:
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Hash2
- {
- class Program
- {
- static Int32 m = 11;
- static Int32[] hash = new Int32[m];// hash table
- static Int32 c1 = 1, c2 = 3;
- static Int32 m_ = m - 1;
- static void Main(string[] args)
- {
- // int []arr = new int[m];
- for (int i = 0; i < hash.Length; i++)
- {
- hash[i] = -1;
- }//-1 = means that item in hash is empty
- HashInsert(10);
- HashInsert(22);
- HashInsert(31);
- HashInsert(4);
- HashInsert(15);
- HashInsert(28);
- HashInsert(17);
- HashInsert(88);
- HashInsert(59);
- Console.Read();
- }
- static Int32 h(Int32 k)//different hash functions
- {
- return k % m;
- }
- static Int32 h_linear(Int32 k, Int32 i)
- {
- return (h(k) + 1) % m;
- }
- static Int32 h_quad(Int32 k, Int32 i)
- {
- return ((h(k) + c1 * i + c2 * i * i) % m);
- }
- static Int32 h2(Int32 k) { return 1 + (k % (m - 1)); }
- static Int32 h_double(Int32 k, Int32 i)
- {
- return (h(k) + i * h2(k)) % m;
- }
- static Int32 HashSearch(Int32 k)
- {
- Int32 i = 0;
- int j = 0;
- do
- {
- j = h_linear(k, i);
- if (hash[j] == k) return j;
- else i++;
- } while (hash[j] != -1 && i != m);
- return -1;
- }
- static Int32 HashInsert(Int32 k)
- {
- Int32 i = 0;
- do
- {
- int j = h_linear(k, i);
- {
- if (hash[j] == -1)
- {
- hash[j] = k;
- Console.WriteLine("index = :" + j+" Value: "+k);
- return j;
- }
- else i++;
- }
- } while (i != m);
- Console.WriteLine("index = : "+-1);
- return -1;
- }
- }
- }
Решение задачи: «Решение коллизий методом открытой адресации(не важно C# или C++)»
textual
Листинг программы
- static Int32 h_linear(Int32 k, Int32 i)
- {
- return (h(k) + 1) % m;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д