把 O(n²) 的判重改成 O(n)
下面这段去重用的是列表判重(每次都要挨个比)。把它改成用集合判重,结果必须一样。 改完之后输出去重后还剩几个。
把重复计算提到循环外
下面的代码在循环里反复调用同一个开销大的函数,而它的结果每次都一样。 把它提到循环外面去,然后输出这个函数被调用了几次。
⚠️ 优化前后结果必须一致
优化最容易犯的错是把行为也改了。 补全代码:慢版(列表判重)和快版(集合判重)各跑一遍,比较两者的结果是否完全相同,相同输出 结果一致,否则输出 结果不一致。
这次优化到底提了多少
补全 speedup:返回 200 条数据时,列表判重的比较次数是集合的多少倍(整除)。 这个数就是这次优化的收益——有数才叫优化,没数只是改写。
大数据下最怕什么
数据量上来之后,最怕代码里【0】。
哈希表什么时候会退化
哈希表也不是永远 O(1),它在【0】的时候会退化。
小数据上两种做法差多少
只有 10 条数据时,两种判重的比较次数。运行下面这段程序: def list_ops(n): ops = 0 seen = [] for i in range(n): for y in seen:
数据量上来之后呢
换成 200 条。运行下面这段程序: def list_ops(n): ops = 0 seen = [] for i in range(n): for y in seen:
空输入不能崩
补全 distinct:返回不重复元素的个数。 这次喂给它一个空列表,不能报错。
全都一样的输入
同一个 distinct,这次喂五个一模一样的词。