最简单易懂的C++笔记分享 Day 19

Posted 西京数据分析与商业智能

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最简单易懂的C++笔记分享 Day 19相关的知识,希望对你有一定的参考价值。

C++笔记分享  Day 19

之前十多天我们对C++的语法做了简单介绍,从今天开始我们将结合算法从具体问题中应用这些知识,话不多说我们开始吧。

算法一般可以分为两大类:数值运算算法和非数值运算算法。前者主要解决数学问题,如一些求和,算积分之类的;后者主要解决一些逻辑问题,诸如,搜索,排序,查找之类的。


数值运算算法:(一般与优化)

例如我要实现从零到一百的求和运算,可以通过for循环去循环遍历 :

#include<isotream>using namespace std ;int main(){int loop =0,sum=0;for (loop=1;loop<100;loop=loop+2)  {    sum=sum+loop;  }     sum=sum+100;   cout << sum << endl;     return 0;}
也可以利用公式:sum=n*(a1+an)/2实现(a1为首项,an为尾项) :
#include<isotream>using namespace std ;int main(){int sum =0;sum=49*(99+1)/2;sum=sum+100;cout << sum << endl;  return 0;}

通过对比显然可以看出后者的程序效率提高了数倍,同理我要实现斐波那契数列第100项为多少,可以用if判断的递归 :

#include<iostream>using namespace std;int  Fib(int n){  if (n == 1 || n == 2)  {    return 1;  }  else  {    return (Fib(n - 1) + Fib(n - 2));  }}int main(){  int  m ;  m=100;  int n = Fib(m);  cout << n << endl;  return 0;}
也可以使用if判断加上for循环代替递归 :(线性运算,时间复杂度大大降低)
#include<iostream>using namespace std;int  Fib(int n){  if (n == 1 || n == 2)  {    return 1;  }  else  {    int f1 = 1,f2 = 1;    int fn;    for(int i = 2;i<n;i++)  {    fn = f1 + f2;    f1 = f2;    f2 = fn;   }     return fn;  }}int main(){  int m;  m=100;  int n = Fib(m);  cout << n << endl;  return 0;}

通过以上对比举例的方式进行分享,我们可以从中明白仅仅使用C++程序编写而不使用任何算法效率是及其低下的,了解时间复杂度的同学可能更有体会。当然这里面还有很多内容,如多项式计算,指数计算,三角函数计算的优化等等等等,我就在此抛砖引玉,列举两个常见的问题与大家交流分享,也许大家对以上问题还有更好的方式解决,还请留言指教。

话说回来在生活中这种数值算法其实用的不是特别多,更多的是解决一些逻辑问题的非数值运算算法,在这些算法理论设计中我们通常要使用数据结构来帮助我们我们构建框架。有关非数值运算算法我们下一次会再讲,再会!

最简单易懂的C++笔记分享 Day 19

点击下方“在看”分享精彩内容



以上是关于最简单易懂的C++笔记分享 Day 19的主要内容,如果未能解决你的问题,请参考以下文章

C++ 随机化快速排序 最简单易懂的代码! 基于归并分区思想实现

C++继承,万字笔记简单易懂

DAY9-字符串笔记整理2018-1-19

崔希凡JavaWeb笔记day19-day21(10月4日17:38:58)

递归回溯最简单易懂的小例子

Go语言技巧之正确高效使用slice(听课笔记总结--简单易懂)