我想检查给定数组(2D)中是否存在元素,并查找单元格左侧和单元格右侧以及顶部和底部的计数。我该怎么做不使用蛮力
答案 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数组可以用向量表示,而变量用于保存列数。