我是新来的。作为一名研究生,我现在已经对算法进行了头脑风暴。我感谢任何可以延伸的关于下面问题的帮助。我已经搜索了足够的,我找不到解决这个问题的任何解决方案。分而治之算法(应用二进制搜索?!)
我们有一个无限长的排序不同数字的数组。前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)) 。
请抛开你的想法。谢谢
“我们有一个无限长的排序不同数字的数组。”停在那儿。现在离开计算机科学部门,去隔壁的数学系。 – 2015-02-08 15:52:54
@MikeNakis为什么?一些计算机科学算法需要假定非绑定值。 – ElderBug 2015-02-08 15:54:18
你不能有一个无限长度的数组。你可能会说到无尽的物品流,但不是无限的阵列。当然,您不能在流上执行二分搜索,因为您需要知道项目的总数,以便可以计算中间值等等。 – 2015-02-08 15:57:46