【发布时间】:2012-12-30 18:59:16
【问题描述】:
这是家庭作业。
目标是用伪代码提供一种算法,该算法将搜索数字数组(不指定整数或 >0)并检查任何两个数字的比率是否等于给定的 x。时间复杂度必须在 O(nlogn) 以下。
我的想法是对数组进行归并排序(O(nlogn) 时间),然后如果 |x| > 1 开始按降序检查每个数字(使用二进制遍历算法)。检查每个数字也应该花费 O(logn) 时间,最坏的情况是 n 次检查总共需要 O(nlogn)。如果我没有遗漏任何东西,这应该给我们一个 O(nlogn) + O(nlogn) = O(nlogn) 的最坏情况,在分配的参数内。
我意识到排序后从哪里开始检查比率并不重要,但时间成本按 1/2 摊销)。
我的逻辑正确吗?有更快的算法吗?
如果不清楚,举个例子:
给定一个数组 { 4, 9, 2, 1, 8, 6 }
如果我们要搜索比率为 2:
合并排序 { 9, 8, 6, 4, 2, 1 }
由于给定的比率 >1,我们将从左到右搜索。
2a。第一个数字是 9。检查 9 / 4 > 2。检查 9/6
【问题讨论】:
标签: algorithm optimization complexity-theory big-o mergesort