Algorithm 使用有限内存发现长n-gram的算法?

Algorithm 使用有限内存发现长n-gram的算法?,algorithm,Algorithm,有哪些内存效率高的算法可以计算大n克。我有大量的二进制输入(~1k),希望发现(使用在线算法)哪些子集比平均值更频繁地出现在一起。我认为搜索长n-gram(每个输入相当于一个字符或单词)的问题是同构的,不幸的是,创建几TB的表来进行简单的计数是不可能的(这将进入javascript,因此1GB将推动它)。我希望有人能告诉我一些聪明的算法或想法,我可以调整 我不需要保留精确的数字,只要观察一下,比如说,有10个左右的输入的子集经常出现在一起。也许可以从计算双随机数开始,然后看看什么双随机数出现得最

有哪些内存效率高的算法可以计算大n克。我有大量的二进制输入(~1k),希望发现(使用在线算法)哪些子集比平均值更频繁地出现在一起。我认为搜索长n-gram(每个输入相当于一个字符或单词)的问题是同构的,不幸的是,创建几TB的表来进行简单的计数是不可能的(这将进入javascript,因此1GB将推动它)。我希望有人能告诉我一些聪明的算法或想法,我可以调整


我不需要保留精确的数字,只要观察一下,比如说,有10个左右的输入的子集经常出现在一起。

也许可以从计算双随机数开始,然后看看什么双随机数出现得最频繁,然后再计算包含这些双随机数的更长的n-gram?(如果空间比时间宝贵得多,可以选择添加一些中间步骤,如三叉图、四格图等。)@tobias_k,将不起作用。可能有5(10)和8(01)。然后,所有5个10的最终结果为101,只有4个01的最终结果为010,而其他4个为011。现在正确的答案是101,找到的可能性已经被你的算法抛弃了。谢谢,我一直在考虑这些术语,但我突然想到,如果一个10克的分子在一百万年内发生了三次,那将是非常有趣的,而如果组成的双克分子本身只作为那10克分子的一部分出现的话(也就是说,在一百万中只有三次),就永远不会有任何理由来计算那些导致发现的Big。假设我有1024位作为输入,1024位值随时钟而变化。如果我把每一位看作是一个字母的存在(相当大)。字母表,把字母集合作为一个词来考虑……虽然你是正确的,但它并不完全是n-克,问题仍然足够接近,我相信我可以按摩一个N-gram算法来适应我的目的。我选择指定N-gram,因为它是一个更普遍的问题,因此更可能有现有的解决方案…(我的实际任务是从你的评论中自动发现用于训练神经网络的候选隐层节点),我认为N-gram根本不是正确的方法。正如我理解的,第一位可能代表“A”,第二位代表“B”,等等,直到第一千零二十四位。现在考虑三元组“111”。。根据其在字符串中的位置,它可能对应于“ABC”、“HIJ”或“XYZ”。此外,使用n-字母表,您无法找到字母表中字母不相邻的单词。但可能我完全误解了该评论;在这种情况下,请澄清。也许可以从计算双字母表开始,然后看看最常出现的双字母表,然后再计算包含这些双字母表的更长的n-字母表?(如果空间比时间宝贵得多,可以选择添加一些中间步骤,如三叉图、四格图等。)@tobias_k,不起作用。可能有5(10)和8(01).然后,所有5个10的结果都是101个,只有4个01的结果是010个,而其他4个是011个。现在正确的答案是101,找到的可能性已经被你的算法丢弃了。谢谢,我一直在考虑这些条件,但我想说一个10克可能在一百万中出现三次会非常有趣,而如果成分双克本身仅作为10克的一部分出现(即百万分之三)再也不会有任何理由来计算这些Big图,因为我有1024位作为输入,1024位值随时钟而变化。如果我把每一位看作是一个字母的存在(相当大)。字母表,把字母集合作为一个词来考虑……虽然你是正确的,但它并不完全是n-克,问题仍然足够接近,我相信我可以按摩一个N-gram算法来适应我的目的。我选择指定N-gram,因为它是一个更普遍的问题,因此更可能有现有的解决方案…(我的实际任务是从你的评论中自动发现用于训练神经网络的候选隐层节点),我认为N-gram根本不是正确的方法。正如我理解的,第一位可能代表“A”,第二位代表“B”,等等,直到第一千零二十四位。现在考虑三元组“111”。。根据它在字符串中的位置,它可能对应于“ABC”、“HIJ”或“XYZ”。此外,使用n-字母表,您无法找到字母表中不相近的单词。但可能我完全误解了该注释;在这种情况下,请澄清。