算法与算法设计的几大准则

算法的定义

  • 那么算法到达什么,首先分2个层面,在现实世界里,算法就是 解决问题的一个方案,比如我要修一栋房子,我们先打地基,在造框架,在砌墙,在粉刷,在装饰,。这个算一种针对修房子问题的一种解决方案,但是修房子是只有这一种方案吗,肯定很多的,但是一些基本思路也行一样。所以算法在具体场景中是针对某个问题提出的一种解决方案。
  • 那么现在谈我们要真的需要涉及的概念就是在编程中的算法到底什么,首先我们需要找到一个具体问题,比如我们需要对一堆学生的成绩数据进行排序,那么我们就会针对这个数据编写具体操作的代码,可以实现数据的排序,这个代码在cpu角度上就一串针对具体问题可以由cpu解析执行的有序序列。
  • -

算法的5大特性

  • 有穷性 有穷性是这个算法的指令序列肯定是可以在有限时间内存执行完毕。比如如果我们需要知道学生成绩的排序榜,那么我需要对这个数据设计算法进行排序,那么如果我们这个算法一直在操作数据让他排序一直没有结束,那么我们什么时候可以看到这个排序榜呢。

  • 确定性 确定性就是我们设计的算法在具体代码执行的是唯一确定的,比如a > 10, 我们执行吃饭;而不是说随意。

  • 可行性 我们设计的算法针对的问题可以分解为具体的小步骤,而每个步骤又是可以在有限时间内执行完毕,就是说这个算法是行得通的,或者称之为有效的。
  • 输出 计算机在执行了这些指令序列之后必须有具体的结果,然后我们拿到结果才有价值。
  • 输入 我们可以有0或者1以上的输入交给这个算法。

算法设计的要求

我们设计的算法肯定是想需要计算机的内存或者磁盘空间越少越好,执行这个算法的指令序列需要的时间越少越好。
因此引入2个针对算法设计提出2个概念就是时间复杂度和空间复杂度:
时间复杂度是当前设计的算法执行完这个指令序列需要的时间。但是不同算法执行需要的时间我们根据输入的数据规模会需要不同的时间,比如常量级就是说随着你输入数据的规模我们的需要时间并不会增长。比如我们求1 + … + 100;如果我用 (1 + 100)/2*50,这个公式去求和,那么即使是求1+ … + 1000,也是执行一个指令序列。因此这个算法需要的时间为0(1),也有线性关系随便n的增加,执行的指令序列需要的时间按照这个线性关系变化等。
下面我给时间复杂度下个公式: T(n) = 0(f(n)) 其中T(n) 就是算法的时间复杂度,n表示是输入到算法的数据模块比如求和中n = 100, 50,都不同 而f(n)就是根据n不同得到的指令执行的次数的一个函数。
三种常用时间复杂度:0(1)常量级 0(n)线性级 0(n^2)平方级

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛掰是怎么形成的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值