数据结构(二)之算法基础

  一.为什么要学习算法?

    先来个简单的算法比较:求sum=1+2+3+...+(n-1)+n的结果. 输入整数n,输出 sum 
      解法一:for循环

  function sum(n){var s=0;            //执行1次for(var i=1;i<n+1;i++){   s+=i;           //执行n+1次

     }
    return s;            //执行1次
  }

      解法二:

function sum(n){return n*(n-1)/2;    //执行1次}

    很明显,解法二要优于解法一。因为解法二需要运算的次数少。我们去衡量一个算法的好坏主要是从时间复杂度和空间复杂度来看的,其次才到可读性,可维护性。那么接下来讲讲怎么来计算时间复杂度与空间复杂度。

  二.时间复杂度的计算:

    推导大O阶来计时间复杂度

    规则:1.用常数1取代运行时间中的所有加法常数(即常数阶都计为O(1) );

       2.在修改后的运行次数函数中,只保留最高阶项;

       3.如果最高阶项存在且不是1,则去除与这个项相乘的常数

     解法一的运行次数:  f1(n) = 1+n+1+1=n+3 次  时间复杂度记作 T(n) = O( f1(n) )  //n+3直接舍掉常数,变为n ,名为“线性阶”

     解法二的运行次数: f2(n) = 1次        时间复杂度记作 T(n) = O( f1(1) )  //名为“常数阶”

     由此可知解法一随n的增加,运行次数也增加,而解法二始终只需运行一次

    对数阶:

function count(n){var c=1;      //执行1次while(c<n){c=c*2;  //执行log2n
} return c; }

 

    也就是说2的多少次冪大于n,就运行了多少次。时间复杂度计做O(logn),名为对数阶。
    平方阶:
function num(n){var count=0;for(var i=0;i<n;i++){  //执行 n 次for(var j=i;j<n;j++){count++;        //执行 n-i 次}}return count;
}

 

   以上代码执行总次数为n+(n-1)+(n-2)+...+1 = n2/2+n/2 次,用大O推导法去掉相加常数n/2,去掉相乘常数1/2,所以时间复杂度为O(n2)
   总结:
    时间复杂度有多种,这里是讨论常见的阶。常用的时间复杂杂耗时的时间从小到大依次为:
    O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) <O(nn)

   扩展:最坏时间复杂度

    例:给出一个数组arr,里面有n个随机数,找出arr中的指定数字。那么这个数字有可能出现在数组中的第一个位置,时间复杂度为O(1);也可能出现在数组最后一个位置,时间复杂度为O(n) ,从概率来说,平均查找时间应该是n/2次。

    最坏时间复杂度从字面上就能理解,时间最长的情况,时间不会更长,情况不会更坏了。通常没有特殊说明,我们计算的时间复杂度都为最坏时间复杂度。    

  三.算法空间复杂度

    算法的空间复杂度并不是计算实际占用的空间,而是计算整个算法的辅助空间单元的个数,与问题的规模没有关系。算法的空间复杂度S(n)定义为该算法所耗费空间的数量级。S(n)=O(f(n)) 若算法执行时所需要的辅助空间相对于输入数据量n而言是一个常数,则称这个算法的辅助空间为O(1)。通常,我们用时间复杂度来衡量算法的优略。

转载于:https://www.cnblogs.com/zhoulin-circle/p/7413229.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器系统崩了能pe,系统崩溃了无法正常重装系统?教你用PE虚拟盘来解决!...

如果电脑系统损坏开不了机怎么办&#xff1f;安全模式啥的都进入不了怎么办&#xff1f;不用怕&#xff0c;小编教你用PE重装系统&#xff0c;十分简单哦。用PE系统镜像还原重装系统&#xff1a;工具&#xff1a;U盘(最好有8G及以上的容量&#xff0c;因为一个windows7以上的系…

1021 个位数统计 (15 分)

1021 个位数统计 (15 分) 简单题。 #include<iostream> using namespace std; int main() {int ch[11]{0};string str;cin>>str;int lenstr.length();for (int i0;i<len;i){ch[str[i]-0];}for (int i0;i<10;i){if (ch[i]!0) cout<<i<<":&q…

re.compile

详情见>>> import re >>> s "adfad asdfasdf asdfas asdfawef asd adsfas ">>> reObj1 re.compile(((\w)\s\w)) >>> reObj1.findall(s) [(adfad asdfasdf, adfad), (asdfas asdfawef, asdfas), (asd adsfas, asd)]>>>…

群晖218 修改服务器名称,一次换群晖引发的各种事情——论如何榨干218+的价值【不完全版】...

一次换群晖引发的各种事情——论如何榨干218的价值【不完全版】2020-04-08 16:40:0117点赞100收藏29评论创作立场声明&#xff1a;期中考试爸妈送的……购买理由大概用了两年的DS115j&#xff0c;性能实在受不了(ARM的想啥呢)然后就换了个218然后特么发现x64的就是舒服&#xf…

Python读写文件的路径,关于os.chdir(path)位置对程序的影响,

关于os.chdir(path)位置对程序的影响&#xff0c;import os import time#直接把path放到open&#xff08;&#xff09;里面 def fu0():star time.time()for i in range(100):p os.listdir(E:/pythontxt/PDF文字提取/)for each in p:with open(E:/pythontxt/PDF文字提取/each,…

文件服务器上传文件的过程,文件服务器上传文件实现过程【分享】

写本帖的目的是&#xff0c;论坛经常有咨询或反馈文件服务器问题。本帖准备把文件服务器整个的实现过程讲清楚。以方便相关问题的或达到问题自查的目的。1、文件服务器 其实是IIS的一个站点。前端(说的前端是Silverlight及WPF等的前端)是直接与文件服务器站点进行交互。其中&am…

linux下搭建mongodb副本集

1.搭建三台mongodb服务器 cd /usr/local mkdir mongodb tar -zxvf mongodb-linux-x86_64-2.6.7.tgz cd mongodb-linux-x86_64-2.6.7 mv * /usr/local/mongodb cd /usr/local/mongodb mkdir data touch logs cd bin ./mongod -dbpath/usr/local/mongodb/data -logpath/usr/local…

ajax轮询模拟websocket,Ajax轮询和SSE服务器推送数据与websocket模式的区别性学习

我们试想一下我们做个实时聊天的窗口有几种方法&#xff1f;在我们不刷新页面并且可以试试更新页面内容的方法 你这时候是不是想到了ajax没错确实可以Ajax轮询什么是轮询&#xff1f;顾名思义就是我轮着问你&#xff0c;规定一个时间然后我就问你 有新数据了吗&#xff1f; 有新…

1026 程序运行时间 (15 分)

1026 程序运行时间 (15 分) 简单题。 #include<iostream> #include<cmath> #include<iomanip> using namespace std; int main() {int a,b,c;cin>>a>>b;if((b-a)%100>0&&(b-a)%100<50) c(b-a)/100; else c(b-a)/1001;cout<&l…

文字超出两行 则显示。。。

overflow: hidden; text-overflow: ellipsis; display: box; display: -webkit-box; line-clamp: 2; -webkit-line-clamp: 2; -webkit-box-orient: vertical; 转载于:https://www.cnblogs.com/zcboy/p/7435917.html

vue项目前端服务器,【前端技术】vue自动部署项目到服务器

想要的功能前端打包之后自动上传文件夹到服务器在不提交代码的前提下&#xff0c;也可以完成上述功能经过各种百度谷歌&#xff0c;最后有两种方案可以选择第一种是写一个shell&#xff0c;通过lftp上传文件夹&#xff0c;但是会有个权限的问题&#xff0c;需要更改nginx配置才…

1027 打印沙漏 (20 分)

1027 打印沙漏 (20 分) 简单题。 #include<iostream> #include<string> #include<math.h> using namespace std; int main() {int n;char ch;cin>>n>>ch;int i;for (i1;;i){if (2*i*i-1>n) {ii-1;break;}}for (int j1;j<2*i;j){for (int…

你所不了解的五条面试忠告

今天不聊代码也不谈架构&#xff0c;今天我只想说说对每个人来说都必不可少又并非最重要的工作环节之一——面试。 几乎各大培训结构在他们的学员即将毕业的时候都会开一两节有关面试的课程&#xff0c;无非是教大家如何因对考官的问题或者如何在一些冷门知识上回答让对方满意。…

官狼服务器临时维护,官狼三分钟新模式,跑跑狼人杀如何边跑边杀

作为风靡全球的桌游&#xff0c;狼人杀一度成为了国内白领、学生党的国民游戏。随着网络的普及&#xff0c;很多玩家开始转求线上网杀&#xff0c;网易《狼人杀官方》因为玩法最多画风好看&#xff0c;一直是大多数人的选择。而就在最近&#xff0c;《狼人杀官方》重磅推出了年…

二叉搜索树相关题目

//二叉查找树的第k大节点&#xff1a;利用二叉搜索树的中序遍历序列是递增排序的性质&#xff0c;递归实现 struct BinaryTreeNode{int m_nValue;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight; }; BinaryTreeNode* FindKthNodeCore(BinaryTreeNode* pRoot, unsigned int …

三星s6 信号无服务器,手机没信号的原因以及解决方法

现在手机是一件很普遍的通讯工具&#xff0c;因为现在手机功能的强大&#xff0c;所以基本上人人一部手机。目前在社会上比较流行的牌子就是苹果或者三星手机。不过想必大家在用手机的时候都会出现手机没有信号这个问题。这个问题是一件比较麻烦的问题&#xff0c;有的时候急需…

2017书单3

30.围城 钱钟书的一部经典文学作品&#xff0c;只在高中刚开学的时候读过一点&#xff0c;听当时的老帅、班主任王家友讲过一点。王老师的音容笑貌依然在心呀&#xff01;话说这本书&#xff0c;写的是出国留洋的方鸿进&#xff0c;买了野鸡大学的假文凭后的一系列遭遇&#xf…

不同型号服务器如何做双击热备,服务器做双机热备教程

服务器做双机热备教程 内容精选换一换将GaussDB(DWS)提供的ODBC DRIVER(psqlodbcw.so)配置到数据源中便可使用。配置数据源需要配置“odbc.ini”和“odbcinst.ini”两个文件(在编译安装unixODBC过程中生成且默认放在“/usr/local/etc”目录下)&#xff0c;并在服务器端进行配置…

143. 最大异或对

模板&#xff1a;tire 复杂度&#xff1a;O&#xff08;nlogn&#xff09; 143. 最大异或对 #include <iostream> #include <algorithm> using namespace std; const int maxn 100010, M 31 * maxn; int ch[maxn]; int n; int son[M][2], idx 0; void insert(i…

windows service 2008 内存吃尽解决方案

最近用windows2008&#xff0c;发现系统运行一段时间后&#xff0c;内存吃紧&#xff0c;赶紧打开资源查看器&#xff0c;发现当前运行的程序占有内存都很小&#xff0c;后经查资料&#xff0c;原来是被windows2008的文件缓存吃尽了&#xff0c;这是windows2008的新机制&#x…