前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >想学算法吗少年,跟我来吧

想学算法吗少年,跟我来吧

作者头像
周杰伦本人
发布2022-10-25 18:12:14
2240
发布2022-10-25 18:12:14
举报
文章被收录于专栏:同步文章

想学算法吗少年,跟我来吧

坚持原创,写好每一篇文章

为什么学习算法

伟大的编程领域的祖师爷尼古拉斯威茨提出程序=数据结构+算法,数据结构的重要性不言而喻,数据结构在计算机学习的过程中是一门必修课,考研一般也是数据结构必考,软件开发中的架构设计中也有很多数据结构的使用,越是底层尤其是存储这一块的东西,数据结构关乎着存储性能,比如MySQL的底层、redis的数据结构。这篇文章并不是将数据结构,而是算法。算法是程序的另一种组成部分,而现在国内的软件开发往往将算法与业务开发分开了,小公司往往不在乎你的算法能力,而大厂可能会问到算法的内容,有的大厂会问一下你的算法思路,有的大厂甚至会让你上机写算法,而国外的公司对算法的要求更高,我在国外面试过一些公司,算法属于必问的内容。

算法的特性

算法是对特定问题求解步骤的描述,它由几个特性:有穷性、确定性、可行性,可以由0或多个输入一个或多个输出。

算法的两个重要指标

算法需要考虑的两个特效是时间复杂度和空间复杂度

时间复杂度

所谓时间复杂度就是算法需要运行的时间,有最好情况的时间和最坏情况的时候,我们一般以最坏的情况用到的时间为时间复杂度的依据。而这个时间复杂度并不是一个确切的值,而是按照一步一步的执行次数来算的,比如两个for循环,我们认为是o(n的平方)

代码语言:javascript
复制
while(i<=n){     
  i=i*2;        
}

像这样的时间复杂度怎么算,假如n=8,那么2的3次方是8,所以执行次数是O(log小2的N)

空间复杂度

空间复杂度是算法占用的空间,这里除去算法本身和输入输出占用的空间,而是在算法执行的过程中占用的辅助的空间。

比如这个递归算法:

代码语言:javascript
复制
int fac(int n){ 
    if(n==0||n==1) 
        return 1; 
    else 
        return n*fac(n-1); 
}

典型的斐波那契序列的实现,采用递归算法,我们都知道递归使用的是栈,如果无限递归就会出现栈溢出异常,栈的大小为n,那么这个算法的空间复杂度为O(n)

总结

这篇文章我们讲了为什么要学算法,算法有哪些特点,以及算法的时间复杂度和空间复杂度这两个重要指标是怎么进行计算的,并举了几个小示例,这些知识点是学习算法的基础知识,让我们一起了解算法基础知识,跟着我走进算法的神秘殿堂吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 想学算法吗少年,跟我来吧
    • 为什么学习算法
      • 算法的特性
        • 算法的两个重要指标
          • 时间复杂度
          • 空间复杂度
        • 总结
        相关产品与服务
        云数据库 MySQL
        腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档