使用O(n log n)查找列表的最小值

时间:2018-11-19 11:07:22

标签: python algorithm big-o

使用 Big-O 表示法的效率,我发现自己陷入了一系列疑问,因为他们精心设计了一种可以及时setInterruptIfStopped工作的代码,以执行下一个任务:

·查找列表的最小数量(因素的顺序并不重要)

·替代使用... min方法

我知道,这种幅度意味着时间线性增长,而JobIntentService呈指数增长(thanks to other users

要理解它的大小,例如,我有此代码。

O(n log n)

也可以使用列表,但是不能满足我的要求。 这会为列表n中的每个元素返回一次...然后再实现对分搜索 def x(my_list): n = len(my_list) print(my_list) if n <= 1: print("return") return 0 return x(my_list[:n // 2]) + x(my_list[n // 2:]) print(x([2, 3, 4, 5, 6, 7]))

谢谢:)

2 个答案:

答案 0 :(得分:0)

您的列表排序了吗?然后找到最小值,它只是列表的第一个元素:my_list[0]。这是O(1)(恒定时间-无需循环)。

您的列表未排序吗?然后,您必须浏览列表中的每个值,以确定哪个值与其余值相比最小。这是最小(em)O(n)(请注意,O(n)比O(nlogn)更有效)。

current_min = my_list[0]
for element in my_list:
    if element < current_min:
        current_min = element

答案 1 :(得分:0)

回答标题中提出的问题:

def min_of(lst):
    if len(lst) <= 2:
        return lst[0] if lst[0] < lst[-1] else lst[-1]
    a = min_of(lst[len(lst)/2:])
    b = min_of(lst[:len(lst)/2])
    return a if a < b else b

更新

对不起,这是O(n)方法