Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Arrays 数组匹配算法_Arrays_Algorithm_Match - Fatal编程技术网

Arrays 数组匹配算法

Arrays 数组匹配算法,arrays,algorithm,match,Arrays,Algorithm,Match,我有一个项目数组,我需要找到匹配的项目(重复)。我现在有最简单的O(n^2)算法在运行。项目类型并不重要,但如果你想知道它的图像 myarray; for(i = 0; i < myarray.length - 1; i++) for(int j = i+1; j < myarray.length; j++) if(myarray[i] = myarray[j]) output(names of items); myarra

我有一个项目数组,我需要找到匹配的项目(重复)。我现在有最简单的O(n^2)算法在运行。项目类型并不重要,但如果你想知道它的图像

myarray;   
for(i = 0; i < myarray.length - 1; i++) 
    for(int j = i+1; j < myarray.length; j++) 
        if(myarray[i] = myarray[j]) 
           output(names of items);
myarray;
对于(i=0;i

我尝试了维基百科和谷歌,但没有找到答案。任何语言的任何链接、算法或代码都很好。

如果您能找到这些项目的订单,请对它们进行排序。然后很容易找到相等的项,因为它们彼此相邻


这只是O(n*Log(n))。

如果您可以找到有关项目的订单,请对其进行排序。然后很容易找到相等的项,因为它们彼此相邻


这只是O(n*Log(n))。

要在数组中查找重复项,您可以对列表进行排序和扫描,在
O(n Log n)
中查找相邻的相同项。
如果您只想输出重复的元素,并且内存不是问题,那么您可以保留一组已经看到的元素,遍历数组,检查当前元素是否在您的集合中。将其作为副本输出(如果是),否则将其插入到集合中。这将是
O(n)

要在数组中查找重复项,您可以对列表进行排序和扫描,在
O(n log n)
中查找相邻的相同项。
如果您只想输出重复的元素,并且内存不是问题,那么您可以保留一组已经看到的元素,遍历数组,检查当前元素是否在您的集合中。将其作为副本输出(如果是),否则将其插入到集合中。这将是
O(n)

而不是排序然后比较相邻项,为什么不将每个项添加到自平衡二叉树中,这样您就可以免费获得“已存在”检查(排序)。

而不是排序然后比较相邻项,为什么不将每个项添加到自平衡二叉树中,因此,您可以免费获得“已存在”支票(某种程度上)。

问题是什么?你想要小一点的吗?提高性能?很明显,我想我确实希望提高性能。好吧,对于某些n值,一个O(n)可以比一个O(logn)更有效。看见基本上,知道算法是否更快的唯一方法是实现和分析代码。O(n)是复杂性的度量。例如,O(logn)算法可能需要比O(n)算法更复杂的内存使用。啊,我现在明白你的问题了。项目的总大小为200MB,因此减少内存使用不是我的优先事项。我想快点做事,有什么问题吗?你想要小一点的吗?提高性能?很明显,我想我确实希望提高性能。好吧,对于某些n值,一个O(n)可以比一个O(logn)更有效。看见基本上,知道算法是否更快的唯一方法是实现和分析代码。O(n)是复杂性的度量。例如,O(logn)算法可能需要比O(n)算法更复杂的内存使用。啊,我现在明白你的问题了。项目的总大小为200MB,因此减少内存使用不是我的优先事项。我想把事情做得快。那么“匹配一”是什么呢?重复的?@IsmetAlkan:我也需要看两遍,看看你在找重复的。那么“匹配的一个”是什么呢?重复项?@IsmetAlkan:我也需要看两遍,才能知道你在找重复项。«这样你就可以免费得到“已经存在”的检查(某种程度上)»->这是错误的,它将是O(n*Log(n))@Thomash:嗯,插入算法可以返回两个值:它以前没有被看到过(树中的新节点)或者它以前被看到过(已存在具有相同项的节点)。因此,问题是单次传递“myarray”数据,而不是两次-排序,然后比较相邻项。我对O值没有任何评论,更多的是对实现的评论-您从插入过程中获得匹配信息。好的,我理解,但我不确信它实际上更快。我认为排序可以是faster和使用的内存比自平衡树少(或根本没有内存)。@Thomash:好吧,有些O(logn)排序算法有糟糕的最坏情况(我认为qsort有O(n.logn)最坏情况)。除非我弄错了(这是完全可能的),否则最坏情况仍然是O(n.logn)。但是,编写自平衡数据结构比调用qsort复杂得多。该树几乎没有额外内存(3*n+1)*指针大小(每个节点有3个指针-左、右和值加根指针).我们可以整天争论O表示法,但最终只有当有一些真正的代码通过分析器运行时,才知道真正的答案是什么是最好的排序是O(n*Log(n)),qsort是O(n²)在最坏的情况下。但我想说的是,一棵树使用额外的空间,而排序可以就地进行,即使复杂度相同,一个好的qsort也比一棵平衡树快得多。«因此你可以免费得到“已经存在”的检查(排序)»->这是错误的,它将是O(n*Log(n))@Thomash:嗯,插入算法可以返回两个值:它以前没见过(树中的新节点)或它以前见过(已经有一个节点具有相同的项)。因此,问题是单次传递“myarray”数据,而不是两次-排序,然后比较相邻项。我对O值没有任何评论,更多的是对实现的评论-您从插入过程中获得匹配信息。好的,我理解,但我不确信它实际上更快。我认为排序可以是faster和使用的内存比自平衡树少(或根本没有内存)。@Thomash:好吧,有些O(logn)排序算法有糟糕的最坏情况(我认为qsort有O(n.logn)最坏情况)。除非我弄错了(这是完全可能的),否则最坏情况仍然是O(n.logn)但是,编写一个自平衡数据结构要比调用qsor复杂得多