Решение коллизий методом открытой адресации(не важно 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;
        }

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


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

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

5   голосов , оценка 4.2 из 5
Похожие ответы