求一个优于O(n^2)的算法

江湖小虾米东方未明 2012-09-25 11:48:18
一个N*N的矩阵,从左至右,右边的数比左边的数,下边的数比上面的数大,现在给定某一个数N,求搜索到它的一个优于O(n^2)的算法~
...全文
180 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

看这个帖子:http://topic.csdn.net/u/20120924/22/fa75558e-3883-4c48-8e01-30889e3c51e7.html
[/Quote]
能给个伪代码吗?~,,,
DeDeWo 2012-09-25
  • 打赏
  • 举报
回复
看这个帖子:http://topic.csdn.net/u/20120924/22/fa75558e-3883-4c48-8e01-30889e3c51e7.html
zhoujk 2012-09-25
  • 打赏
  • 举报
回复
先在每一行的第一个数上二分,找到定位的行后,在这一行上进行二分,比一次二分的算法还要快。但不是很有必要,因为二分已经相当不错了
tkminigame 2012-09-25
  • 打赏
  • 举报
回复
从右上角往下走,遇到超过的数值,改变方向
只有两个方向:往下,或往左
只有两个结果:找到了或走出去了

def foo(M,n):
l = len(m)
x,y = l-1,0
goDown = True
while M[y][x]!=n:
if M[y][x] > n and goDown:
goDown = False
elif M[y][x]<n and not goDown:
goDown = True
if goDown:
y+=1
else:
x-=1
if x<0 or y>=l:
return ('not found!')
return x,y

m = ((0,2,4,6,8),
(3,5,7,9,10,),
(4,8,10,11,16,),
(6,9,13,15,18),
(8,10,17,19,21)
)

print(foo(m,15))
print(foo(m,11))
print(foo(m,7))
print(foo(m,17))
print(foo(m,20))
print(foo(m,1))
print(foo(m,12))


output

(3, 3)
(3, 2)
(2, 1)
(2, 4)
not found!
not found!
not found!
HimeTale 2012-09-25
  • 打赏
  • 举报
回复
好吧,之前是我想简单了。
从一个点出发,然后一步一步的走下去吧,直到找到位置。
复杂度O(n)
HimeTale 2012-09-25
  • 打赏
  • 举报
回复
跟2分有啥区别啊
只不过这个效率更高,一次可以去掉3/4。
wmj0095 2012-09-25
  • 打赏
  • 举报
回复
最后的代码很好 呵呵
DeDeWo 2012-09-25
  • 打赏
  • 举报
回复


#include<iostream>
#include<string>
using namespace std;
const int MM=1005;
int map[MM][MM],N,M;
int search(int x,int y,int key,int &px,int &py){//从矩阵的左下角开始查找
if(x<0 || y>=M)
return 0;
if(map[x][y]<key)
return search(x,y+1,key,px,py);
else if(map[x][y]>key)
return search(x-1,y,key,px,py);
else{
px=x, py=y;
return 1;
}
}
int main(){
while(scanf("%d%d",&N,&M)==2){
for(int i=0;i<N;++i) //输入矩阵,N行,M列,下标从0开始
for(int j=0;j<M;++j)
scanf("%d",&map[i][j]);
int key;
while(cin>>key){ // 查找key
int px,py;
if(search(N-1,0,key,px,py)){ //返回的(px,py)是key在矩阵中的最后一个位置
puts("have find");
printf("px == %d , py == %d \n",px,py);
}
else
puts("not find");
}
}

return 0;
}



绿色夹克衫 2012-09-25
  • 打赏
  • 举报
回复
lz搜索杨氏矩阵查找。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧