微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用链表的Trie复杂性

如何解决使用链表的Trie复杂性

我使用链表(不是通常的数组)实现了Trie 我的TrieNode包含链接列表作为节点(而不是限制输入类型-英语,数字等) 我想知道使用链表作为节点的Trie当前的复杂性是什么。 谢谢!

解决方法

如果要检查长度为 l 的单词 w 是否在树突中,则最多需要检查以下单词的 l 级别特里。在每一层中,您需要使用线性搜索来检查当前节点是否有一个带有下一个字母的孩子。您需要迭代的最大子节点数是您使用的字母的大小。

因此,我认为答案是O( l * | A |),其中 A 是您使用的字母,以防万一小写拉丁字母 A = a,b ..,y,z;因此| A | = 26。

,

我不会说我将链表或数组*用作特里的节点存储,因为两者都会使每个节点的搜索和插入均为O(n),因此,总体O(n * D)接近O(A * D),其中AD分别是字母长度和Trie深度。

相比而言,对于纯朴的Trie实现而言,每个节点的哈希映射使我成为最不复杂/性能最高的对象,因为它会降低搜索和插入每个节点O(1)和{{1}的复杂性} 总体。唯一的额外复杂性是调整地图的大小,但是如果您不关心空间,则可以预先调整每个地图的大小,使其初始容量为O(D),从而无需动态调整地图的大小。>

*:这是基于对数组实现使用强力搜索和插入。如果您可以创建一个静态的1-1字符映射到从零开始的索引,则与散列图相比,使用数组可以实现相同的操作和空间复杂度,并具有更好的性能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。