二分法 时间复杂度 O(logN)

根据log(x) 曲线,随着数据量x的增大,耗时时间y并不会有太大的变化。
随着x增大,可以看到曲线趋近于直线,y的值变化不大
题目:给定一个数GUEST,以及排序好的列表THE_LIST,要求输出THE_LIST中的数middle,使得middle=GUEST
完成以下函数find_data
import random
import time

GUEST = 1980
N = 10 ** 5  # 根据logN 曲线,随着数据量x的增大,耗时时间y并不会有太大的变化。
THE_LIST = sorted([random.randint(0, N) for _ in range(N)])
list_len = len(THE_LIST)
s = time.time()


def find_data(the_list):
    pass


print(find_data(THE_LIST))
print('列表长度', list_len)
print('耗时', time.time() - s)
print('---------------------------')
题解:
def find_data(the_list):
    # return the_list[the_list.index(GUEST)]
    while True:
        if not the_list:
            print('列表没有这个数')
            break
        inx = int(len(the_list) / 2)
        middle = the_list[inx]
        if middle == GUEST:
            print('这个数是:', middle)
            return middle
        elif middle > GUEST:
            the_list = the_list[:inx]
        else:
            the_list = the_list[inx + 1:]

同样的思路:
给定一个数GUEST,连续整数n~m ,要求输出n~m中的数middle,使得middle=GUEST
import time

GUEST = 198000
n = 1
m = 10 ** 10
s = time.time()
while True:
    if GUEST > m or GUEST < n:
        print('给定的范围内没有这个数')
        break
    middle = int((n + m) / 2)
    if middle == GUEST:
        print('这个数是:', middle)
        break
    elif middle > GUEST:
        m = middle
    else:
        n = middle
print('耗时', time.time() - s)
#Python#
全部评论
每次都不知道大家说的复杂度是怎么算的
点赞 回复 分享
发布于 2022-08-10 14:48

相关推荐

07-15 12:15
门头沟学院 Java
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务