算法知识点

1、等差数列等比数列

等差数列

等差数列的前n项和公式:
在这里插入图片描述

等比数列

等比数列的前n项和公式:
在这里插入图片描述

2、局部变量与全局变量

局部变量比全局变量所占的空间大,局部变量占的空间大概为2M

嵌套:尽量少使用,因为所占的时间复杂度较高

3、平凡解

未知数中至少有一个为0的方程解或者方程解集

4、关于sqrt

特别关注sqrt的用法,运算得到的浮点数是特殊的:
比如:x=sqtr(4),实际上得到的是1.99999,而z=floor(x)即取得x的整数,由于不是采用四舍五入的算法,所有最终z等于1。
解决办法 :正确的写法应该是 x=sqrt(4)+0.5 ,就可以完美解决这种问题,此时z值就为2。这种方法不管数字为多大多小都适用。

5、排序法

选择排序法

规则
每次选取一列数字中的最小或者最大的那个数字,放在待排序列的最前面
时间复杂度
其它情况:O(n^2)
空间复杂度
所有情况:O(1)
优劣
最坏情况下对其复杂度影响不大。
代码
在这里插入图片描述

冒泡排序法

规则
依次比较相邻的两个数,大的放前,小的放后;每一轮结束都会在未排序序列中得到一个最小的数放在最后
时间复杂度
最好情况:O(n)
其它情况:O(n^2)
空间复杂度
所有情况:O(1)
优劣
在最差情况下,虽然时间复杂度和平常一样,但是系数大约增加一倍,所以效率降低一半。
速度较慢,但是当参加排序的数列局部或者总体有序时候,排序能达到较快的速度。
代码
在这里插入图片描述
改进
上述过程若有n个数,则需进行n-1次排序,但若发现在未达到n-1次时,某一趟排序已经排好了,此时计算机任然不知道。
解决办法:应该设置一个变量bo,记录此趟是否进行了数据交换,flase则表示进行了交换
在这里插入图片描述

哈希排序法(桶排序)

规则
时间复杂度
所有情况:O(n)
空间复杂度
O(n)
优劣
该算法不看数据的数量,而看数据中最大的数字为多少,则设置几个桶,(即就算只有3个数字:1、2和10000;该算法也要设置10000个桶),因此此算法需要在最大和最小数字差异较小的情况下使用较为合适。
代码
原理:设置100个空桶(一个容量100的数组,初值均为零,桶号即为数组号),依次检测输入的n是否与这个桶号相等,相等即置一;之后从0到100顺序判断这个数组内容是否为一,为一则输出桶号
在这里插入图片描述

插入排序

规则
通俗理解 :打扑克牌抓牌时,首先拿到一张牌,再拿第二张牌,比这张牌小则放在后面,比这张牌大则放在前面;
算法角度来看 :假设待排序区域为R[1,n],则R[1]设为有序区,R[2,n]设为无序区,从R[2]开始取数字,和R[1]比较排序,此时有序区变为R[1,2];再从R[3]取数字,和R[1,2]比较排序,依次类推
时间复杂度
最好情况:O(n)
其它情况:O(n^2)
空间复杂度
所有情况:O(1)
优劣
在最差情况下,虽然时间复杂度和平常一样,但是系数大约增加一倍,所以效率降低一半。
速度较慢,但是当参加排序的数列局部或者总体有序时候,排序能达到较快的速度。
代码
在这里插入图片描述

快速排序法

规则
即是冒泡排序法改进版:先选定整个无序数组中的一个数字,将比这个数字小的一部分和比这个数字大的另一部分分成两个数组,这两个数组任然是无序的,之后对这两个数组分别进行冒泡排序
时间复杂度
其它情况:O(nlogn)
最差情况:O(n^2)
空间复杂度
O(log2n)
最差情况:O(n)
优劣
从时间复杂度来看是当前最好的排序方法,但是由于其使用的是递归的方式,则在空间复杂度上占用过大
代码
原理:设置两个指针i和j,分别从最左边和最右边开始
在这里插入图片描述
在这里插入图片描述

归并排序法

规则
将两个 有序 数列合并为一个 有序 数列称为 二路归并
先把相邻两个数字进行归并,即第一个和第二个,第三个和第四个…进行归并,之后将[1,2]和[3,4]…进行归并,即每次归并的数字的数量为2,4,8…
时间复杂度
其它情况:O(nlogn)
空间复杂度
所有情况:O(n)
优劣
最坏情况下对其复杂度影响不大。
同样也是递归的方法进行操作,即占用的空间复杂度较高。
代码
二路归并
原理:i和j分别指向A数组的第一个数字和中间的数字,(即假设一个数组的前半段位置为第一个数组,后半段为第二个数组),先比较i和j指向的数字大小,若i指向的小,则放入R[0]中(指针k指向这里),之后i和k同时加1;反正将j指向元素放入,j和k自增一。
在这里插入图片描述
总归并
在这里插入图片描述

6、稳定排序和不稳定排序

原理

设某个数组中存在:a=3,b=3,在进行完排序后,a和b的相对位置保持不变(即在原来排序前a在b的左边,排序完成后a任然在b的左边)称为稳定排序,否则称为不稳定排序。

稳定排序

插入排序、冒泡排序、二叉树排序、二路归并排序和其它线性排序

不稳定排序

选择排序、希尔排序、快速排序、堆排序

7、各种情况下对排序法的选择

最好情况
插入排序和冒泡排序最快
平均情况
快速排序最快
最差情况
堆排序和归并排序最快
当n较小时对稳定性不做要求
选择排序较快
当n较小时对稳定性有要求
插入排序和冒泡排序较快
当n较小时且待排序的记录的关键字在一个明显有限的范围时
采用(哈希排序)桶排序较快
当n较大时关键字较随机,对稳定性没要求
快速排序法
当n较大时关键字较有序,对稳定性没要求
堆排序

8、C ++自带排序算法

万能头文件
#include<bits/stdc++.h>
自带算法
在这里插入图片描述
在这里插入图片描述

9、主定理(Master theorem)

主定理的两种判断方法(实质是相同的)
第一种(较为方便易记)
(注: n 为问题规模,我们把它分为 a 个子问题,每个子问题规模为 n/bn^d 或者 f(n) 为杂项处理的时间(dividing and combining), T(n) 为复杂度)
在这里插入图片描述
第二种 :
在这里插入图片描述

10、算法的渐进记号

在这里插入图片描述
常用的三个渐进符号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实例:对下列各组函数f(n)和g(n),确定f(n)=O(g(n))或者f(n)=Ω(g(n))或者f(n)=Θ(g(n))
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值