如何在没有暴力的情况下找到矩阵中元素的数量?我们可以这样做吗?

时间:2013-09-13 10:03:29

标签: c++

我想检查给定数组(2D)中是否存在元素,并查找单元格左侧和单元格右侧以及顶部和底部的计数。我该怎么做不使用蛮力

3 个答案:

答案 0 :(得分:1)

除了其他答案(对于任何现有的应用程序可能不是很有用,只是一个想法)是Grover的算法。来自维基百科的一篇文章:

  

Grover算法是一种用于搜索未排序的量子算法   在O(N1 / 2)时间内使用N个条目并使用O(log N)存储的数据库   空间(见大O表示法)。 Lov Grover于1996年制定了它。

     

在经典计算模型中,搜索未排序的数据库   不能在不到线性的时间内完成(所以只是搜索   每个项目都是最佳的)。 Grover的算法说明了   量子模型搜索可以比这更快;实际上是时候了   复杂度O(N1 / 2)是渐近最快的   在线性量子模型中搜索未排序的数据库。

答案 1 :(得分:1)

如果数组已排序,那么您可以使用二进制搜索找到O(nlogm)时间复杂度! 其中n,m是行和列。

答案 2 :(得分:0)

如果您的矩阵未排序,并且您没有像哈希表那样的快速访问,那么就没有办法了。

例如,如果您的矩阵已排序,则可以使用更有效的搜索算法(例如二进制搜索)来更快地找到元素。不要忘记,2D数组可以用向量表示,而变量用于保存列数。