自学算法

关于本课程

hi,少年。咱们来一起学习算法啦。这套课程特别适合自学算法的小白。每节课程最后还有一道练习题,边学边练,可以帮你及时巩固学习到的知识。

如果您在学习其他相关的算法课程,也可以学习该课程用来巩固知识点。

本教程中的练习题,请移步 1024乐学编程-算法基础 进行练习。

您也可以在该网站免费学习到更多课程

好,那我们正式开始!
算法,可以简单理解为,完成一个任务的方法。
你可以把它想象成食谱。要想做出一道菜肴,只需要按食谱的步骤一步步操作。

编程中的算法,就是用计算机解决一个问题的方法。
食谱和算法的最大区别,在于算法是严密的,只要遵循步骤就一定能解决特定的问题;而食谱经常会有模糊描述的部分,不同厨师按照一个食谱做出来的菜可能口味天差地别。

算法有优劣之分

算法也有优劣之分,如果让你在图书馆找到一本书
算法一:在图书馆乱逛,随便抓起一本书看是不是要找的,如果不是,就再逛到另一个地方,随便抓起一本书
算法二:从图书馆的第一排书架最顶层开始,从左到右,一本本地找。找完一层,再找下一层。如果整个书架找完了,就到下一个书架,再这样找。
算法三:根据图书的索引编号,到图书馆的特定区域(如文学区、科技区),找到编号对应的书架、在哪一层,然后从左到右一本本找到。

那肯定选择算法三! 效率最高。

时间复杂度

算法的优劣有很多体现,比如时间复杂度,空间复杂度,可读性和健壮性等等。
空间复杂度是指运行完一个程序所需内存的大小。一般来说,空间复杂度越小,算法越好。
时间复杂度用来衡量一个算法的运行时间和输入规模的关系,通常用 O表示。
简单计算复杂度的方法一般是统计“简单操作”的执行次数,有时候也可以直接数循环的层数来近似估计。
按增长量级递增排列,常见的时间复杂度有:
O(1)—常数阶
O(N)—线性阶
O(log2N)—对数阶
O(nlogn)—线性对数阶
O(n²)—平方阶

算这个时间复杂度实际上只需要遵循如下守则:
• 用常数1来取代运行时间中所有加法常数;
• 只要高阶项,不要低阶项;
• 不要高阶项系数;

O(1)的算法是一些运算次数为常数的算法。例如:

temp=a;
a=b;
b=temp;

根据守则:用常数1来取代运行时间中所有加法常数;
上面语句共三条操作,单条操作的频度为1,即使他有成千上万条操作,也只是个较大常数,这一类的时间复杂度为O(1);
O(n)的算法是一些线性算法。例如:

sum=0;                 
for(i=0;i<n;i++)       
    sum++;

上面代码中第一行频度1,第二行频度为n,第三行频度为n,所以f(n)=n+n+1=2n+1。
根据守则:只要高阶项,不要低阶项目,常数项置为1,去除高阶项的系数:
所以时间复杂度O(n)。这一类算法中操作次数和n正比线性增长。

之后我们会讲到二分查找的时间复杂度是O(Log2N);线性对数阶就是在LogN的基础上多了一个线性阶O(nlogn);

普通嵌套循环,它的时间复杂度为O(n²)。

for (int i = 0; i < n; i++) {//执行n次
    for (int j = 0; j < n; j++) {//执行n次
    }
}

插入排序

下面说们说一个简单的排序算法࿰

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值