当前位置: 首页 > 知识库问答 >
问题:

有效地存储同词排列

吕晟睿
2023-03-14

我有一个关于字典存储的问题。

我在读Trie数据结构,到目前为止,我已经读到它作为前缀树工作得很好。但是,我来到Trie-DS是为了看看它是否能有效地减少通过同一个单词形成的字母排列的存储

对于ex:单词“ant”、“tan”和NAT有相同的字母,但根据Trie的说法,它继续为这些单词创建两个独立的路径。我可以理解Trie是用来存储前缀和减少冗余的。但有人能帮我减少这里的冗余吗。我想的一种方法是改变Trie的行为,因为每个节点都有一个“单词完成”的状态;此外,如果我把‘字开始’的状态,我可以使这工作如下:

A
N - A - T
T - A - N

现在,每次我都可以检查单词是否从这里开始,直到最后。

这有道理吗?如果这是可行的呢?或者他们有什么更好的方法来做到这一点?

谢谢

共有1个答案

长孙鸿振
2023-03-14

如果向每个节点添加一个状态字段,那么树的内存开销(假设为8位字符)将增加一个可能不是微不足道的部分。

我明白您希望减少DS中的字母数量,但您必须考虑如果某些内容是其他内容的子集会发生什么,例如ANTAN将如何表示。考虑作为全连通图节点的最小字符数(128)。显然所有的词都存储在这个图中,但是它不适合存储任何特定的词。没有办法说出单词在哪里结束。存储在trie中的信息不仅仅是字母,而是完整的、适当终止的单词。

如果你按照你的建议添加一个标记,你将如何编码这个:增压,超级,鲈鱼。您将word_starts设置为S和P,word_ends设置为R和h,您怎么知道SUPERCH和PER不包含?您可以使用一个非零标签,并为单词的开头和结尾分配数字对:S:1,P:2,R:1,H:2。为了确保开始和结束可以出现在同一个字母上,您必须使用特定的位作为标签。

然后你可以使用清液作为最小平面表示,N:001A:000T:011A:100N:010T:100。在最坏的情况下,这需要标记的#字位:A,AA,aaa....但是,如果要将其存储在树中,则必须查找另一个标记,这不是树所支持的操作。所以我看不出使用标记的好方法

从信息理论的角度来看,我认为关键的问题是如何正确地对一个词的长度、顺序和内容进行编码,并以一种独特的方式对它们的每一种可能的组合进行编码。

我本来只想发表评论,但有点冗长。我不确定这是否回答了你的问题,但我希望它能有所帮助。

 类似资料:
  • 我有一个词汇表,,,...,。 出于某种原因,我将使用array而不是Trie来存储它们。 因此,一个简单的方法可以是:

  • 问题内容: 您将如何解决以下存储和检索问题? 每天(每年365天)将添加大约2.000.000行,每行包含以下信息: id(唯一的行标识符) entity_id (取值介于1到2.000.000(含)之间 date_id(每天增加一次-取值范围为1到3.650(十年:1 * 365 * 10)) value_1(取值范围在1到1.000.000之间(包括1和1.000.000之间) value_2

  • 我已经使用web3j和ganache创建了一个投票Dapp,但它们的问题很小。我决定在每次新的选举开始时部署一个投票合同,并且将有一个管理员来控制合同的部署以及选举的开始和结束。因此,在部署投票合约时,只有管理员才能获得合约合约地址。我如何将地址发送给普通公民,以便他们可以调用智能合约。我曾想过将合同地址存储在一个普通的数据库中,但如果数据库被入侵或破坏,整个dapp就会崩溃。web3j中是否有任

  • 问题内容: 我正在 MySQL 服务器上测试性能,并用超过2亿条记录填充表。存储过程生成大的SQL字符串非常慢。任何帮助或评论都非常欢迎。 系统信息: 数据库: MySQL 5.6.10 InnoDB数据库(测试)。 处理器: AMD Phenom II 1090T X6内核,每个内核3910Mhz。 内存: 16GB DDR3 1600Mhz CL8。 HD: SSD中的Windows 7 64

  • 问题内容: 我存储了1.11亿个键值对(一个键可以有多个值-最多2/3),它们的键是50位整数,值是32位(最大)整数。现在,我的要求是: 快速插入(键,值)对[允许重复] 基于键快速检索一个或多个值。 这里基于MultiMap给出了一个很好的解决方案。但是,我想在主内存中存储更多键/值对,而不会降低性能。我从网络文章中研究到B +树,R+树,B树,紧凑多图等可以是一个很好的解决方案。有谁能够帮我

  • 问题内容: 这个问题已经在这里有了答案 : 在SQL Server中存储IP地址的数据类型 (10个答案) 3年前关闭。 在MySQL中存储和检索IP地址的最有效方法是什么?现在我正在做: 其中ip是一个字段。 有一个更好的方法吗? 问题答案: 对于IPv4地址,您可能需要将其存储为,并使用和函数从其数字值返回IP地址,反之亦然。 例: