Algorithm 如何对32位数字进行排序以找到唯一的条目?
有一个数据集“file”——文件名,后面是32位数字——类似于文件的哈希Algorithm 如何对32位数字进行排序以找到唯一的条目?,algorithm,string,unique,prefix,Algorithm,String,Unique,Prefix,有一个数据集“file”——文件名,后面是32位数字——类似于文件的哈希 "file1" 6a9bd9a6 1df3b24b 7ab054dc "file2" 6a9bd54e 1df3b24b 8cd054dc "file3" 6a9bd9a6 7ab054dc 我将如何获得唯一的文件,使s2不是任何其他s2的前缀-这意味着该数字是唯一的。如果有两个相同的s2,如果它们不是任何其他s2的前缀,则它们都是唯一的 我正在寻找一个快速的解决方案。我可以想出一个解决方案,将每个字符串相互比较,但这样
"file1" 6a9bd9a6 1df3b24b 7ab054dc
"file2" 6a9bd54e 1df3b24b 8cd054dc
"file3" 6a9bd9a6 7ab054dc
我将如何获得唯一的文件,使s2不是任何其他s2的前缀-这意味着该数字是唯一的。如果有两个相同的s2,如果它们不是任何其他s2的前缀,则它们都是唯一的
我正在寻找一个快速的解决方案。我可以想出一个解决方案,将每个字符串相互比较,但这样做太耗时,而且效果不佳。另一个选择是对表使用MySQL引擎,但我不知道如何使用。你能帮忙吗 您可以使用确保没有任何字符串是任何其他字符串的前缀
当您插入到trie中时,您将检查以下两种情况:
1) 我是否经过一个旧的叶节点?如果是,则表示另一个字符串是我的字符串的前缀。2) 是否要将已存在的非叶标记为叶?如果是,我是另一个字符串的前缀 这将是一个O(N)解决方案,其中N是字符串的数量(测量插入trie的次数)。每次插入的长度与其字符串的长度相同
如果你想从这里创建散列。您可以轻松地遍历trie,然后在到达所需的叶后使用有关是否有前缀节点的信息。每个叶节点代表一个完整的路径,它知道它是否是另一个字符串的前缀。如果它是前缀,则它至少有一个子节点 我不知道你说的“s2”是什么意思。你能澄清一下吗?为什么您的数据集后面有多个数字,而不仅仅是1?我想这对您不可能有帮助,我们需要更清楚的描述。您可以理解更多的数字,而不是作为文件的散列,而是作为文件的一部分,或文件本身。s1是“File1”,s2是后面的数字。哦,我把所有数据都插入到trie中,trie有一个算法,返回关于每个数据项的信息,不管它是否有“父项”,是否是不同项的前缀?你可以递归地迭代trie的每个节点。当你到达每片叶子时,你会计算散列。在每个叶节点上,您还可以通过O(1)访问时间知道它是否是前缀。