本文共 1732 字,大约阅读时间需要 5 分钟。
详见我的 GitHub 仓库:
/* * Project: Data Structure - Assignment 1 * File : Main.cpp * -------------------- * * @author: Teddy van Jerry * @licence: The MIT Licence * @compiler: at least C++/11 * * @version 1.0 2021/03/01 * - initial version * */#include#include #include "TVJ_Timer.h" // an open source .h file written by Teddy van Jerryusing namespace std;/** * print out Pythagorean Number within a limit * return void */void findPythagoreanNumber(int limit){ ofstream out("Output.md", ios::app); // store data in a Markdown file out << "## n = " << limit << endl; for (size_t a = 1; a != limit; a++) { for (size_t b = a; b != limit; b++) { for (size_t c = b; c != limit; c++) { if (a * a + b * b == c * c) { out << "* (a, b, c) =" << '(' << setw(5) << a << ',' << setw(5) << b << ',' << setw(5) << c << ')' << endl; } } } } out.close();}int main(int argc, char** argv){ // set the unit millisecond, precision is 9. TVJ_Timer timer("m.9", true); for (size_t i = 1; i <= 10; i++) { timer.restart(); findPythagoreanNumber(100 * i); cout << "n = " << setw(4) << 100 * i << ", total time is " << timer << endl; } return 0;}
根据数学公式,findPythagoreanNumber(n)
的循环次数为 n ( n − 1 ) ( 2 n − 1 ) 6 \dfrac{n(n-1)(2n-1)}{6} 6n(n−1)(2n−1),而这是程序主要花费的时间(对于输出来说可能不太正确,但是总体的趋势仍然一样),在 n n n 逐渐增大的过程中,我们可得时间复杂度 O ( n 3 ) O(n^3) O(n3)。根据程序得出的数据,时间总体上符合这总规律。
在 n n n 不同时,虽然循环的规模相差甚远,可是临时申请的内存都是一样多的,因而其空间复杂度为 O ( 1 ) O(1) O(1)。
ALL RIGHTS RESERVED © 2021 Teddy van Jerry
欢迎转载,转载请注明出处。