【发布时间】:2015-02-27 21:21:21
【问题描述】:
我只是想仔细检查一下 Trie 数据结构在最坏情况下可能拥有的总空间。我认为这将是 O(N*K),其中 N 是节点总数,K 是字母表的大小(指向其他尝试),但人们一直告诉我这是 O(K^L),其中 K 是字母表的大小和 L 是平均字长,但是这些空指针会占用 Java 中的内存空间吗?例如,如果其中一个节点在总大小 K 中只有 3 个分支/点。它是否使用 K 空间?还是只有 3 个?以下是Java中的Trie实现@
class Trie {
private Trie [] tries;
public Trie () {
// A size 256 array of Trie, and they are all null
this.tries = new Trie[256]; // K = 256;
}
}
【问题讨论】:
-
我从未听说过使用 O(N^K) 空间的 trie,也没有看到任何理由这样做,无论空指针占用空间。
-
可能您的意思是 a^m(其中 a 是字母的大小,m 是平均字长) - 请参阅 this answer 下的 cmets
-
@Shashank 对不起,我的意思是 K^N
-
它可能是 K^L,其中 K 是字母大小,L 是 DNA 所说的平均字长。但不是 K^N,因为 N 是总节点数,远远超过平均字长。
-
@Shashank 你是对的。让我更正一下。
标签: java algorithm trie space-complexity