博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SEU 数据结构课笔记】 01 - 2021/03/01 - Assignment
阅读量:787 次
发布时间:2019-03-21

本文共 1732 字,大约阅读时间需要 5 分钟。

Assignment - 算法时间复杂度练习

  • 用穷举法找出所有三边长度都为整数的直角三角形(毕达哥拉斯三角形),且三条边的长度都小于n。
  • 分析时间与空间复杂度。
  • 统计n等于100到1000(间隔100)的运行时间。

C++ 代码

TVJ_Timer.h

详见我的 GitHub 仓库:

Main.cpp

/* * 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;}

输出示例

  • Console:
    Console Output
  • Output.md: 4457 lines

算法分析

时间复杂度

根据数学公式,findPythagoreanNumber(n) 的循环次数为 n ( n − 1 ) ( 2 n − 1 ) 6 \dfrac{n(n-1)(2n-1)}{6} 6n(n1)(2n1),而这是程序主要花费的时间(对于输出来说可能不太正确,但是总体的趋势仍然一样),在 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

欢迎转载,转载请注明出处。


See also

你可能感兴趣的文章