优化的第一步(C++)
着手优化之前,第一步应该是【0】。
凭感觉优化的典型后果
第 1 步:把总耗时切成 10 份 第 2 步:读数据只占 1 份 第 3 步:判重占了 9 份 第 4 步:先优化占大头的那段 不测量、凭感觉优化,典型后果是【0】。
优化前要比多少次
200 条数据,用数组判重。运行下面这段程序: #include <algorithm> #include <iostream> #include <map> #include <string>
优化后还要比多少次
同样 200 条,改用集合。运行下面这段程序: #include <algorithm> #include <iostream> #include <map> #include <string>
把平方级的判重改成线性
下面的 slow_dedup 每次都在 vector 里从头找(O(n²))。补全 fast_dedup:改成集合判重、数组保序,结果必须一样。输出快版去重后还剩几个。 (本题用 g++ -std=c++17 -O0 编译。)
把重复计算提到循环外
下面的代码在循环里反复调用同一个开销大的函数,而它的结果每次都一样。把它提到循环外面去,然后输出这个函数被调用了几次。 (本题用 g++ -std=c++17 -O0 编译。)
优化前后结果必须一致
优化最容易犯的错是把行为也改了。补全 fast_dedup,再把慢版和快版各跑一遍,结果完全相同输出 结果一致,否则输出 结果不一致。 (本题用 g++ -std=c++17 -O0 编译。)
这次优化到底提了多少
补全 speedup_of:返回 200 条数据时,数组判重的比较次数是集合的多少倍(整除)。这个数就是这次优化的收益——有数才叫优化,没数只是改写。 (本题用 g++ -std=c++17 -O0 编译。)
大数据下最怕什么(C++)
数据量上来之后,最怕代码里【0】。
哈希表什么时候会退化
第 1 步:五个一模一样的数 第 2 步:第一个没见过:留下 第 3 步:后面四个都见过:跳过 第 4 步:去重以后只剩一个 7 7 7 7 7 哈希表也不是永远 O(1),它在【0】的时候会退化。