知识大全 数据结构考研分类复习真题 第五章 答案[33]
Posted 元素
篇首语:山高有攀头,路远有奔头。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第五章 答案[33]相关的知识,希望对你有一定的参考价值。
[题目分析] 寻找马鞍点最直接的方法 是在一行中找出一个最小值元素 然后检查该元素是否是元素所在列的最大元素 如是 则输出一个马鞍点 时间复杂度是O(m*(m+n)) 本算法使用两个辅助数组max和min 存放每列中最大值元素的行号和每行中最小值元素的列号 时间复杂度为O(m*n+m) 但比较次数比前种算法会增加 也多使用向量空间
int m= n= ; void Saddle(int A[m][n]) //A是m*n的矩阵 本算法求矩阵A中的马鞍点 int max[n]= //max数组存放各列最大值元素的行号 初始化为行号 ; min[m]= //min数组存放各行最小值元素的列号 初始化为列号 ; i j; for(i= ;i<m;i++) //选各行最小值元素和各列最大值元素 for(j= ;j<n;j++) if(A[max[j]][j]<A[i][j]) max[j]=i; //修改第j列最大元素的行号 if(A[i][min[i]]>A[i][j]) min[i]=j; //修改第i行最小元素的列号 for (i= ;i<m;i++) j=min[i]; //第i行最小元素的列号 if(i==max[j])printf( A[%d][%d]是马鞍点 元素值是%d i j A[i][j]); //是马鞍点 // Saddle
[算法讨论] 以上算法假定每行(列)最多只有一个可能的马鞍点 若有多个马鞍点 因为一行(或一列)中可能的马鞍点数值是相同的 则可用二维数组min 第一维是行向量 是各行行号 第二维是列向量 存放一行中最大值的列号 对最大值也同样处理 使用另一二维数组max 第一维是列向量 是各列列号 第二维存该列最大值元素的行号 最后用类似上面方法 找出每行(i)最小值元素的每个列号(j) 再到max 数组中找该列是否有最大值元素的行号(i) 若有 则是马鞍点
cha138/Article/program/sjjg/201311/23042相关参考
第五章 数组和广义表答案 一选择题 BLJCICBBAHCEAFBEABBBBBABBACDCDFCDCACA 二判断题 ×√√×××√××××√√√ 部分答案解释如下 错误
.这是一个递归调用问题运行结果为DBHEAIFJCKGL ()FOR循环中每次执行PerfectShuffle(AN)和CompareExchange(AN)的结果 第次A[]=[] A[]
.() () ()i=j=即A[]  
()略 ()求广义表原子个数的递归模型如下 f(p)= PROCNumber(p:glist;VARn:integer) VARm:integer; n:=; IFp<>N
深度为长度为 ()略 ()表的长度为深度为 ()head(tail(head(head(head(tail(tail(tail(tail(A))))))))) 共享结构广义表A=(((bc
Head(Tail(Head(Head(L)))) Head(Head(Head(Tail(Head(Tail(L)))))) 类似本题的另外叙述的几个题解答如下 ()head(head(t
head(tail(head(tail(H)))) (b) (xyz) (de) GetHead(GetHead(GetTail(L))) 本算法中首先数组b中元素以逆置顺序放入d数组中
.每个元素个二进制位主存字长位故每个元素占个字长行下标可平移至到 () () ()s+ ()s+ . 公式 +L(
.错误有以下几处 ()过程参数没有类型说明()出错条件判断缺少OR(i+k>last+) ()删除元素时FOR循环应正向不应用反向DOWNTO()count没定义 低效体现在两处 (
公式LOC(aijk)=LOC(a)+[v*v*(ic)+v*(jc)+(kc)]*l(l为每个元素所占单元数) 第行第列 ()()() i(i)/+j(<=ij<