【发布时间】:2019-02-19 18:57:51
【问题描述】:
假设我们在 Javascript 中有以下哈希映射类:
class myHash {
constructor() {
this.list = [];
}
hash(input) {
var checksum = 0;
for (var i = 0; i < input.length; i++) {
checksum += input.charCodeAt(i);
}
return checksum;
}
get(input) {
return (this.list[this.hash(input)]);
}
set(input, value) {
this.list[this.hash(input)] = value;
}
}
hash 函数有一个复杂度为O(n) 的循环,并在 getter 和 setter 期间调用。这不会让哈希映射O(n)变得复杂吗?
【问题讨论】:
-
什么是不使用 for 循环的更好的散列函数?
{}本身也被认为是 HashMap,不是吗?我正在尝试自己实现一个。 -
@Joshl 您的想法是正确的,但是您感到困惑的复杂性是完全不同的计算; 查找通常是常量,而散列函数不是。
-
@Joshl 通常当人们谈论数组或散列的复杂性时,他们谈论的是行为如何随着条目数量的变化而变化。在您的班级中,考虑当您有一个条目时
get需要多长时间,并将其与有一百万个条目时所需的时间进行比较。一个平均值它们将是相同的。
标签: javascript hashmap