【问题标题】:Linear probing in Hashing implementation散列实现中的线性探测
【发布时间】:2021-01-28 11:25:44
【问题描述】:

我正在尝试解决这个需要实现线性探测的问题。

给定一个整数数组和一个哈希表大小。使用线性探测将数组元素填充到哈希表中以处理冲突。

示例 1:

Input:
hashSize = 10
sizeOfArray = 4
Array[] = {4,14,24,44}

Output:
-1 -1 -1 -1 4 14 24 44 -1 -1

示例 2:

Input:
hashSize = 10
sizeOfArray = 4
Array[] = {9,99,999,9999}

Output:
99 999 9999 -1 -1 -1 -1 -1 -1 9

你的任务:
您无需读取输入或打印任何内容。

你的任务是完成函数 linearProbing(),它以空哈希表 (hash)、哈希表大小 (hashSize)、整数数组 arr[] 及其大小 N 作为输入,并插入所有元素将数组 arr[] 放入给定的哈希表中。

哈希表的空单元格将被赋予 -1 的值。此外,如果没有更多空间可以插入新元素,只需删除该元素即可。

预期时间复杂度:O(N)。
预期辅助空间:O(1)。

约束:

1 <= hashSize <= 100
1 <= sizeOfArray <= 100
0 <= Array[] <= 105

我写的代码是:

static int[] linearProbing(int hash_size, int arr[], int N) {
    int[] a = new int[hash_size];
    for(int i = 0; i < hash_size; i++)
        a[i] = -1;
    for(int i = 0; i < N; i++) {
        int probe = arr[i] % hash_size;
        int offset = 1;
        while(a[probe] != -1) {
            probe = (probe + offset) % hash_size;
        }
        a[probe] = arr[i];
    }
    return a;
}

给定的测试用例正在运行。但是在提交时我得到了 TLE。请帮忙。

驱动代码如下= https://i.stack.imgur.com/ULVdd.png

【问题讨论】:

  • 虽然情况可能并非如此。当完整的哈希数组被填充时会发生什么。在这种情况下,您将不会有任何空位,while 循环将永远不会停止。
  • 哦,我忘了。您能提出所需的更改建议吗?
  • 链接无效。页面是内部 404
  • 你能查一下这种情况会不会发生吗?你能有 hash_size
  • 如前所述,会出现哈希表大小小于数组大小的情况。您的算法在现场,但没有处理这种情况并进入无限循环。 ` 另外,如果没有更多空间来插入新元素,只需删除该元素。`

标签: java algorithm hash


【解决方案1】:

你错过了一个点,当数组大小大于哈希表时,跳过其余的。

这也可能是简单的一点,只需将 N 替换为 hash_size 并迭代。只要arr 包含元素,这将只允许您进行迭代

static int[] linearProbing(int hash_size, int arr[], int N) {
    //This is what was missing from your code
    int iterating_size = N>hash_size? hash_size : N;

    int[] a = new int[hash_size];
    for(int i = 0; i < hash_size; i++)
        a[i] = -1;
    int started = -1;
    for(int i = 0; i < iterating_size ; i++) {
        int probe = arr[i] % hash_size;
        int offset = 1;
        while(a[probe] != -1) {
            probe = (probe + offset) % hash_size;
        }
        a[probe] = arr[i];
    }
    return a;
}

【讨论】:

  • Thnx @papaya 我明白了。
猜你喜欢
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 2011-01-08
  • 2020-04-08
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多