Решение коллизий методом открытой адресации(не важно C# или C++)

Узнай цену своей работы

Формулировка задачи:

Посмотрите пожалуйста на код. Не могу понять в чем проблема. Алгоритм с книги Т.Кормена ( ссилка - > https://brb.to/texts/other/i48NWg7CO...-i-analiz.html). Потом проверял етот алгоритм -> Хэш-таблица. Он работает правильно. Переписал под свою лабу - коллизии не решаються. Код:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Hash2
  7. {
  8. class Program
  9. {
  10. static Int32 m = 11;
  11. static Int32[] hash = new Int32[m];// hash table
  12. static Int32 c1 = 1, c2 = 3;
  13. static Int32 m_ = m - 1;
  14. static void Main(string[] args)
  15. {
  16. // int []arr = new int[m];
  17. for (int i = 0; i < hash.Length; i++)
  18. {
  19. hash[i] = -1;
  20. }//-1 = means that item in hash is empty
  21. HashInsert(10);
  22. HashInsert(22);
  23. HashInsert(31);
  24. HashInsert(4);
  25. HashInsert(15);
  26. HashInsert(28);
  27. HashInsert(17);
  28. HashInsert(88);
  29. HashInsert(59);
  30. Console.Read();
  31. }
  32. static Int32 h(Int32 k)//different hash functions
  33. {
  34. return k % m;
  35. }
  36. static Int32 h_linear(Int32 k, Int32 i)
  37. {
  38. return (h(k) + 1) % m;
  39. }
  40. static Int32 h_quad(Int32 k, Int32 i)
  41. {
  42. return ((h(k) + c1 * i + c2 * i * i) % m);
  43. }
  44. static Int32 h2(Int32 k) { return 1 + (k % (m - 1)); }
  45. static Int32 h_double(Int32 k, Int32 i)
  46. {
  47. return (h(k) + i * h2(k)) % m;
  48. }
  49. static Int32 HashSearch(Int32 k)
  50. {
  51. Int32 i = 0;
  52. int j = 0;
  53. do
  54. {
  55. j = h_linear(k, i);
  56. if (hash[j] == k) return j;
  57. else i++;
  58. } while (hash[j] != -1 && i != m);
  59. return -1;
  60. }
  61. static Int32 HashInsert(Int32 k)
  62. {
  63. Int32 i = 0;
  64. do
  65. {
  66. int j = h_linear(k, i);
  67. {
  68. if (hash[j] == -1)
  69. {
  70. hash[j] = k;
  71. Console.WriteLine("index = :" + j+" Value: "+k);
  72. return j;
  73. }
  74. else i++;
  75. }
  76. } while (i != m);
  77. Console.WriteLine("index = : "+-1);
  78. return -1;
  79. }
  80. }
  81. }

Решение задачи: «Решение коллизий методом открытой адресации(не важно C# или C++)»

textual
Листинг программы
  1.         static Int32 h_linear(Int32 k, Int32 i)
  2.         {
  3.             return (h(k) + 1) % m;
  4.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы