вставка случайных чисел в массив Java - PullRequest
0 голосов
/ 19 октября 2018

Я должен хешировать 900 случайных целых чисел в пустую таблицу с размером набора 1009, используя открытую адресацию.Чтобы определить, где число должно идти в таблице, я беру случайное число мод 1009 и затем помещаю число там, если оно открыто.Если нет, я должен проверить следующий ключ после этого и продолжать проверять один за другим, пока не найду открытый ключ для размещения случайного числа.Код, который у меня есть на данный момент, таков:

import java.util.*;

public class openAdd{
public static void main(String[] args) {
    //set table length
    int[] table = new int[1009];

    //insert 900 random integers into the table using open addressing
    //random number % table size = the key the number should be placed
    //if the key is already taken go to the next key until you find an open one
    Random randomGenerator = new Random();

    for (int i = 0; i < 900; i++) {
        int num = randomGenerator.nextInt(99999);
        int key = num % 1009;
        if (table[key] == 0) {
            table[key] = num;
        }
    }
}

}

Я думаю, что то, что у меня есть, хорошо, я просто запутался в том, как настроить ключ + 1если уже есть что-то в оригинальном ключе.Спасибо за вашу помощь, и просто дайте мне знать, если мне нужно что-то добавить.

1 Ответ

0 голосов
/ 19 октября 2018

Кажется, у вас правильная идея, но не правильная реализация.Если table[key] не равен нулю, то вам нужно увеличивать key, пока не найдете индекс в table, где table[key] равно нулю.Вы можете использовать оператор остатка Java (как вы уже сделали), чтобы предотвратить увеличение key за пределами массива:

int key = num % 1009;

if (table[key] == 0) {
    table[key] = num;
} else {
    while (table[key = (key + 1) % table.length] != 0);
    table[key] = num;
}

Поскольку table.length больше, чем количество элементов, которые вы устанавливаетенет необходимости проверять, является ли массив full .Также имейте в виду, что num может быть 0.

...