【发布时间】:2015-04-08 09:00:00
【问题描述】:
我是新来的。作为一名研究生,我对算法进行了一段时间的头脑风暴。我很感激可以就以下问题提供的任何帮助。我已经进行了足够多的搜索,但找不到任何解决此问题的方法。
我们有一个无限长的排序不同数字的数组。前 n 个数字是大于 0 但小于 1 的分数。所有其余元素都是“1”,并且您没有得到 n 的值。您需要开发一种算法来检查用户给定的分数 F 是否出现在该数组中。将算法的时间复杂度分析为 n 的函数。 (以 n=8 为例,其中 1 从数组的第 8 个位置开始)
我的方法: 我猜想解决这个问题的最好方法是使用二进制搜索。每次我们可以将数组的大小减少一半,最后得到要找到的分数。让我们假设数组中有 m 个元素,包括 1。小数元素的数量是 n。 对整个数组执行二分查找的时间复杂度为 O(log(m))。由于我被要求用 n 来表示时间复杂度,因此 m = n+k(假设数组中 1 的数量为 k) 所以这个问题的时间复杂度是O(log(n+k))。
请提出您的想法。谢谢
【问题讨论】:
-
“我们有一个无限长的排序不同数字的数组。”停在那儿。马上离开计算机科学系,去隔壁的数学系。
-
@MikeNakis 为什么?一些计算机科学算法需要假设未绑定的值。
-
你不能有一个无限长的数组。您可能会说无穷无尽的项目流,但不是无穷无尽的数组。当然,您不能对流执行二进制搜索,因为您需要知道项目的总数,以便计算中间项,等等。
-
数字排序了吗?
-
我一定错过了什么,图灵机不再是计算机科学的一部分了吗?
标签: arrays algorithm binary-search divide-and-conquer