算法基本操作判定:两处比较操作是否属于同一基本操作?
算法基本操作的判定:相邻元素比较的归类问题
先看你给出的算法实现:
doX (int[] l) { int n; n = l.length; int first, second; int temp; for (first=0; first < n-1 && l[first] < l[first+1]; first++); if (first < n-1) { for (second = n-1; l[second-1] < l[second]; second--); temp = l[first]; l[first] = l[second]; l[second] = temp; } }
针对你提出的疑问,结论是:这两处比较属于同一类基本操作,原因如下:
- 从操作本质来看,两者都是对数组中相邻的两个整数执行
小于关系的比较运算,逻辑含义和运算类型完全一致,没有本质区别。 - 在算法分析的语境里,“基本操作”的定义核心是操作的类型,而非它出现的代码位置。只要是同一种运算(这里都是
int类型的<比较),就归为同一基本操作。 - 两处比较的差异仅在于比较的数组元素位置不同,但这属于操作的参数差异,而非操作本身的类型差异——就像两次调用同一个比较函数只是传入不同参数,不能算作不同的操作。
如果你的需求是统计不同循环中的比较次数,可以将两者分开计数,但这是对同一基本操作的分场景统计,而非把它们判定为不同的基本操作。
内容的提问来源于stack exchange,提问作者Michael B
相关产品推荐
相关产品推荐

