问答题 给定n×m矩阵A[a..b,c一d,并设A[i,j]≤A[i,j+1](a≤i≤b,c≤j≤d-1)和A[i,j]≤A[i+1,f] (a≤i≤b一1,c≤j≤d)。设计一算法判定x的值是否在A中,要求时间复杂度为O(m+n)。【东南大学2005四(10分)2001六(13分) 1994三(17分)】【清华大学1998六(10分)】
【正确答案】正确答案:要求查找时间复杂度为O(m+n),不能采用常规的二层循环的查找。可以先从右上角(i=a,j=d)元素与x比较,只有三种情况:一是A[i][j]>x,这种情况下向j小的方向继续查找;二是A[i][j]<x,下步应向i大的方向查找;三是A[i][j]=x,查找成功。否则,若下标已超出范围,则查找失败。核心语句段如下: while(i<=b&&j>=C&&!flag) //初始值:i=a; j=d; flag=0; if(A[i][j]==x)flag=l; //fla9=1是成功查到x的标志 else if(A[i][j]>x)j一一;else i++;
【答案解析】