0.1.数据结构

时间复杂度

在进行算法分析时候,我们先分析出这个程序它语句总的执行次数T(n),然后用O来描述T(n)所对应的数量级,代表算法时间复杂度

栈和队列

栈:先进后出,括号匹配,递归

队列:先进先出,层次遍历,解决主机与外设速度不匹配的问题

图的存储结构邻接矩阵邻接表十字链表
邻接多重表
图的遍历广度优先搜索深度优先搜索
最小生成树普利姆
适用于点少
克鲁斯卡尔
适用于边少
最短路径迪杰斯特拉
单源最短路径
佛洛依德
各顶点之间最短路径
介绍常见的排序

直接插入排序:稳定,将数组中的所有元素依次跟已排序的元素队列中的元素进行比较,如果目标元素比某个已排序的元素小,则直接插入到已排序的元素队列中,直到全部元素都插入进去。

希尔排序:不稳定,把数组中的所有元素按照一定的增量进行分组,对每组进行直接插入排序,随着增量一轮轮减少,最终恰好被分为一组,即可完成排序

冒泡排序:稳定,两两比较相邻的关键字,如果反序则交换,依次向后比较,直到这一趟没有反序的记录为止。

快速排序:不稳定,一趟排序要将整体分割成独立的两部分,一部分记录的关键字均比另一部分记录的关键字小,则可以分别对这两部分记录继续进行排序,以达到整个序列有序

简单选择排序:不稳定,第i趟要从整体未排序记录中选择最小的记录,再与第i个记录进行交换

堆排序:不稳定,构造一个大根堆,把堆顶和最后一个元素交换,完成一趟排序之后重新构造大根堆重复这个过程完成为止

归并排序:稳定,对于一个整体分割为独立的两部分,再对单独的每一部分再一次分割,分割到不能再分割之后两两交换,开始进行归并,最终得到一个完整有序的整体

基数排序:稳定,从个位到十位到百位的顺序,依次排序

怎么改进冒泡排序

在循环体外边设置一个flag标志位,一旦发现某一趟没有进行交换,说明排序已经完成,没必要继续进行下一趟了,提前完成循环。

贪心算法,分治,动态规划

贪心算法:在对问题求解时,不从整体最优上加以考虑,总是做出局部最优解
分治法:将原问题分解成若干子问题,再把子问题的解合并(相互独立的),形成原问题的解,比如归并排序
动态规划:将原问题分解成若干子问题,再把子问题的解合并(相互重叠的),形成原问题的解,强调全局最优解

动态规划两要素

子问题重叠性,最优子结构性质

递归的精髓

递归就是再函数体中调用函数本身。
精髓是确定重复的逻辑,控制逻辑的边界,进行恰当的退出。

回溯的特点

在搜寻问题的解时候,发现不满足求解条件,就返回寻求其他的路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值