Mix Assertion, Logging, Unit Testing and Fuzzing with ZeroErrstd::unique_ptrClass from third-party library: llvm::Value*Logging the Data // LOG(INFO) << Data; // ASSERT(a > b, “A > B is not true”, a, b); std::ostream& operator<<(std::ostream& implement with template • No extensibility • No customization for different scenario for the same type LOG("Input is: {}", input); A better way is using a formatting-like interface, and a stateful functor: testing also need pretty printing, e.g.: ASSERT(a != 0, "a should not be 0. Input is: {}", input); LOG("Input is: {}", input); Logging macro:Do I catch the bug? Yes, and it’s inside a unit test case. 0 码力 | 54 页 | 961.46 KB | 6 月前3
 Hello 算法 1.0.0b1 C++版2 ?(?3) 2? + 10000?10000 ?(2?) 2.2.5. 常见类型 设输入数据大小为 ? ,常见的时间复杂度类型有(从低到高排列) ?(1) < ?(log ?) < ?(?) < ?(? log ?) < ?(?2) < ?(2?) < ?(?!) 常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 指数阶 < 阶乘阶 Figure 2‑3. 时间复杂度的常见类型 1) + 1; } 对数阶 ?(log ?) 对数阶与指数阶正好相反,后者反映“每轮增加到两倍的情况”,而前者反映“每轮缩减到一半的情况”。对数 阶仅次于常数阶,时间增长得很慢,是理想的时间复杂度。 对数阶常出现于「二分查找」和「分治算法」中,体现“一分为多”、“化繁为简”的算法思想。 设输入数据大小为 ? ,由于每轮缩减到一半,因此循环次数是 log2 ? ,即 2? 的反函数。 2 与指数阶类似,对数阶也常出现于递归函数。以下代码形成了一个高度为 log2 ? 的递归树。 // === File: time_complexity.cpp === /* 对数阶(递归实现) */ int logRecur(float n) { if (n <= 1) return 0; return logRecur(n / 2) + 1; } 线性对数阶 ?(? log ?) 线性对数阶常出现于嵌套循环中,两层循环的时间复杂度分别为0 码力 | 187 页 | 14.71 MB | 1 年前3
 Hello 算法 1.0.0b2 C++版2 ?(?3) 2? + 10000?10000 ?(2?) 2.2.5. 常见类型 设输入数据大小为 ? ,常见的时间复杂度类型有(从低到高排列) ?(1) < ?(log ?) < ?(?) < ?(? log ?) < ?(?2) < ?(2?) < ?(?!) 常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 指数阶 < 阶乘阶 Figure 2‑3. 时间复杂度的常见类型 1) + 1; } 对数阶 ?(log ?) 对数阶与指数阶正好相反,后者反映“每轮增加到两倍的情况”,而前者反映“每轮缩减到一半的情况”。对数 阶仅次于常数阶,时间增长得很慢,是理想的时间复杂度。 对数阶常出现于「二分查找」和「分治算法」中,体现“一分为多”、“化繁为简”的算法思想。 设输入数据大小为 ? ,由于每轮缩减到一半,因此循环次数是 log2 ? ,即 2? 的反函数。 2 与指数阶类似,对数阶也常出现于递归函数。以下代码形成了一个高度为 log2 ? 的递归树。 // === File: time_complexity.cpp === /* 对数阶(递归实现) */ int logRecur(float n) { if (n <= 1) return 0; return logRecur(n / 2) + 1; } 线性对数阶 ?(? log ?) 线性对数阶常出现于嵌套循环中,两层循环的时间复杂度分别为0 码力 | 197 页 | 15.72 MB | 1 年前3
 Hello 算法 1.1.0 C++ 版+ 10000?10000 ?(2?) 2.3.4 常见类型 设输入数据大小为 ? ,常见的时间复杂度类型如图 2‑9 所示(按照从低到高的顺序排列)。 ?(1) < ?(log ?) < ?(?) < ?(? log ?) < ?(?2) < ?(2?) < ?(?!) 常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 指数阶 < 阶乘阶 第 2 章 复杂度分析 hello‑algo 可接受的,通常需要使用动态规划或贪心算法等来解决。 5. 对数阶 ?(log ?) 与指数阶相反,对数阶反映了“每轮缩减到一半”的情况。设输入数据大小为 ? ,由于每轮缩减到一半,因 此循环次数是 log2 ? ,即 2? 的反函数。 图 2‑12 和以下代码模拟了“每轮缩减到一半”的过程,时间复杂度为 ?(log2 ?) ,简记为 ?(log ?) : // === File: time_complexity { n = n / 2; count++; } return count; } 图 2‑12 对数阶的时间复杂度 与指数阶类似,对数阶也常出现于递归函数中。以下代码形成了一棵高度为 log2 ? 的递归树: // === File: time_complexity.cpp === /* 对数阶(递归实现) */ 第 2 章 复杂度分析 hello‑algo.com 38 int0 码力 | 379 页 | 18.47 MB | 1 年前3
 Hello 算法 1.0.0b5 C++版+ 10000?10000 ?(2?) 2.3.4 常见类型 设输入数据大小为 ? ,常见的时间复杂度类型如图 2‑9 所示(按照从低到高的顺序排列)。 ?(1) < ?(log ?) < ?(?) < ?(? log ?) < ?(?2) < ?(2?) < ?(?!) 常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 指数阶 < 阶乘阶 图 2‑9 常见的时间复杂度类型 可接受的,通常需要使用动态规划或贪心等算法来解决。 5. 对数阶 ?(log ?) 与指数阶相反,对数阶反映了“每轮缩减到一半”的情况。设输入数据大小为 ? ,由于每轮缩减到一半,因 此循环次数是 log2 ? ,即 2? 的反函数。 图 2‑12 和以下代码模拟了“每轮缩减到一半”的过程,时间复杂度为 ?(log2 ?) ,简记为 ?(log ?) 。 // === File: time_complexity { n = n / 2; count++; } return count; } 图 2‑12 对数阶的时间复杂度 与指数阶类似,对数阶也常出现于递归函数中。以下代码形成了一个高度为 log2 ? 的递归树: // === File: time_complexity.cpp === /* 对数阶(递归实现) */ int logRecur(float n) { if (n <=0 码力 | 377 页 | 30.69 MB | 1 年前3
 Hello 算法 1.0.0 C++版+ 10000?10000 ?(2?) 2.3.4 常见类型 设输入数据大小为 ? ,常见的时间复杂度类型如图 2‑9 所示(按照从低到高的顺序排列)。 ?(1) < ?(log ?) < ?(?) < ?(? log ?) < ?(?2) < ?(2?) < ?(?!) 常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 指数阶 < 阶乘阶 第 2 章 复杂度分析 hello‑algo 可接受的,通常需要使用动态规划或贪心算法等来解决。 5. 对数阶 ?(log ?) 与指数阶相反,对数阶反映了“每轮缩减到一半”的情况。设输入数据大小为 ? ,由于每轮缩减到一半,因 此循环次数是 log2 ? ,即 2? 的反函数。 图 2‑12 和以下代码模拟了“每轮缩减到一半”的过程,时间复杂度为 ?(log2 ?) ,简记为 ?(log ?) : // === File: time_complexity { n = n / 2; count++; } return count; } 图 2‑12 对数阶的时间复杂度 与指数阶类似,对数阶也常出现于递归函数中。以下代码形成了一棵高度为 log2 ? 的递归树: // === File: time_complexity.cpp === /* 对数阶(递归实现) */ 第 2 章 复杂度分析 hello‑algo.com 38 int0 码力 | 378 页 | 17.59 MB | 1 年前3
 Hello 算法 1.0.0b4 C++版3) 2? + 10000?10000 ?(2?) 2.2.5. 常见类型 设输入数据大小为 ? ,常见的时间复杂度类型包括(按照从低到高的顺序排列): ?(1) < ?(log ?) < ?(?) < ?(? log ?) < ?(?2) < ?(2?) < ?(?!) 常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 指数阶 < 阶乘阶 Figure 2‑3. 时间复杂度的常见类型 expRecur(n - 1) + 1; } 对数阶 ?(log ?) 与指数阶相反,对数阶反映了“每轮缩减到一半的情况”。对数阶仅次于常数阶,时间增长缓慢,是理想的时 间复杂度。 对数阶常出现于「二分查找」和「分治算法」中,体现了“一分为多”和“化繁为简”的算法思想。 设输入数据大小为 ? ,由于每轮缩减到一半,因此循环次数是 log2 ? ,即 2? 的反函数。 // === File: 与指数阶类似,对数阶也常出现于递归函数。以下代码形成了一个高度为 log2 ? 的递归树。 // === File: time_complexity.cpp === /* 对数阶(递归实现) */ int logRecur(float n) { if (n <= 1) return 0; return logRecur(n / 2) + 1; } 线性对数阶 ?(? log ?) 线性对数阶常出现于嵌套循环中,两层循环的时间复杂度分别为0 码力 | 343 页 | 27.39 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 C++ 版如果我们没有学过数据结构与算法,那么给定任何数据,我们可能都塞给这个排序函数去做了。运行顺 畅、性能不错,看上去并没有什么问题。 ‧ 但如果学过算法,我们就会知道内置排序函数的时间复杂度是 ?(? log ?) ;而如果给定的数据是固定 位数的整数(例如学号),那么我们就可以用效率更高的“基数排序”来做,将时间复杂度降为 ?(??) , 其中 ? 为位数。当数据体量很大时,节省出来的运行时间就能创造较大价值(成本降低、体验变好等)。 + 10000?10000 ?(2?) 2.3.4 常见类型 设输入数据大小为 ? ,常见的时间复杂度类型如图 2‑9 所示(按照从低到高的顺序排列)。 ?(1) < ?(log ?) < ?(?) < ?(? log ?) < ?(?2) < ?(2?) < ?(?!) 常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 指数阶 < 阶乘阶 第 2 章 复杂度分析 www.hello‑algo 可接受的,通常需要使用动态规划或贪心算法等来解决。 5. 对数阶 ?(log ?) 与指数阶相反,对数阶反映了“每轮缩减到一半”的情况。设输入数据大小为 ? ,由于每轮缩减到一半,因 此循环次数是 log2 ? ,即 2? 的反函数。 图 2‑12 和以下代码模拟了“每轮缩减到一半”的过程,时间复杂度为 ?(log2 ?) ,简记为 ?(log ?) : // === File: time_complexity0 码力 | 379 页 | 18.48 MB | 10 月前3
 Hello 算法 1.2.0 繁体中文 C++ 版如果我們沒有學過資料結構與演算法,那麼給定任何資料,我們可能都塞給這個排序函式去做了。執行 順暢、效能不錯,看上去並沒有什麼問題。 ‧ 但如果學過演算法,我們就會知道內建排序函式的時間複雜度是 ?(? log ?) ;而如果給定的資料是 固定位數的整數(例如學號),那麼我們就可以用效率更高的“基數排序”來做,將時間複雜度降為 ?(??) ,其中 ? 為位數。當資料體量很大時,節省出來的執行時間就能創造較大價值(成本降低、體 + 10000?10000 ?(2?) 2.3.4 常見型別 設輸入資料大小為 ? ,常見的時間複雜度型別如圖 2‑9 所示(按照從低到高的順序排列)。 ?(1) < ?(log ?) < ?(?) < ?(? log ?) < ?(?2) < ?(2?) < ?(?!) 常數階 < 對數階 < 線性階 < 線性對數階 < 平方階 < 指數階 < 階乘階 第 2 章 複雜度分析 www.hello‑algo 可接受的,通常需要使用動態規劃或貪婪演算法等來解決。 5. 對數階 ?(log ?) 與指數階相反,對數階反映了“每輪縮減到一半”的情況。設輸入資料大小為 ? ,由於每輪縮減到一半,因 此迴圈次數是 log2 ? ,即 2? 的反函式。 圖 2‑12 和以下程式碼模擬了“每輪縮減到一半”的過程,時間複雜度為 ?(log2 ?) ,簡記為 ?(log ?) : // === File: time_complexity0 码力 | 379 页 | 18.79 MB | 10 月前3
 What's Eating my RAM?stateDefragmentation subsystems Log TcpConnection ProcessRequest Log TcpConnection ProcessRequest ProcessRequest ProcessRequest Decode Decode Decoder DecodeDefragmentation subsystems Log TcpConnection ProcessRequest ProcessRequest Log TcpConnection ProcessRequest ProcessRequest ProcessRequest Decode Decode Decoder Allocate small chunks Hold them Allocate various chunks Hold them DecodeDefragmentation subsystems subsystems Log TcpConnection ProcessRequest Log TcpConnection ProcessRequest ProcessRequest ProcessRequest Decode Decode Decoder Allocate various chunks Doesn’t hold them Allocate big chunks Doesn’t hold0 码力 | 88 页 | 3.49 MB | 6 月前3
共 144 条
- 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 15
 













