算出翻倍之后的倍数
补全 grow:返回数据量从 n 翻到 2n 时,一个 O(n²) 算法的操作数变成几倍(整除)。 算 n = 100 的情况。
同一个规模下,两种做法各要多少步
补全 compare:返回 暴力操作数/前缀和操作数/倍数(用 / 隔开)。 算 n=1000、m=1000。
⚠️ 数据量多大之后 B 才会反超 A
算法 A 是 O(n²) 但常数很小(操作数正好是 n * n);算法 B 是 O(n) 但常数很大(操作数是 100 * n)。 补全 crossover:找出最小的 n,使得 B 的操作数严格小于 A。 ——这道题说明:量级更优不等于任
平时说的复杂度指哪一种
不加说明时,人们说的时间复杂度通常指【0】。
为什么最坏情况最有用
工程上最关心最坏情况,是因为【0】。
运气最好时要几步
在 [13, 15, 17, 23, 24] 里从头挨个找 13。运行下面这段程序: def lsearch_steps(a, target): steps = 0 for x in a: steps +=
运气最差时呢
同一个数组,改成找 24。运行下面这段程序: def lsearch_steps(a, target): steps = 0 for x in a: steps += 1 if x == ta
写一个数步数的线性查找
补全 lsearch_steps:从头挨个比,返回比了几次(找到就停)。 这次找 17。
最好和最坏一起报出来
同一个 lsearch_steps。把最好情况和最坏情况拼起来输出(用 / 隔开):找第一个元素、找最后一个元素。
平均要几步
补全 average_steps:假设要找的元素等概率地是数组里的任意一个,返回平均比较次数(整除)。