Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何对32位数字进行排序以找到唯一的条目?_Algorithm_String_Unique_Prefix - Fatal编程技术网

Algorithm 如何对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的前缀,则它们都是唯一的 我正在寻找一个快速的解决方案。我可以想出一个解决方案,将每个字符串相互比较,但这样

有一个数据集“file”——文件名,后面是32位数字——类似于文件的哈希

"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)访问时间知道它是否是前缀。