首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
清水之灵
掘友等级
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
0
文章 0
沸点 0
赞
0
返回
|
搜索文章
最新
热门
数据结构与算法-学习笔记(15)
数组占据随机访问的优势,却有需要连续内存的缺点。 链表具有可不连续存储的优势,但访问查找是线性的。 散列表和链表、跳表的混合使用,是为了结合数组和链表的优势,规避它们的不足。 我们可以得出数据结构和算法的重要性排行榜:连续空间 > 时间 > 碎片空间。 因此散列表和链表会一起来…
数据结构与算法-学习笔记(14)
散列表采用的是数组支持按照下标(通过寻址公式)在O(1)的时间复杂度下随机访问数据的特性,所以散列表其实是数组的一种扩展,由数组演化而来,没有数组就没有散列表。 通过散列函数把元素的键值映射为数组下标,然后在数组中根据下标找到对应数据。 实际情况下,第三点很难实现。即使比较有名…
数据结构与算法-学习笔记(13)
如数组的二分查找,链表中逐渐缩小查找区域,来查询目标数据。 在单链表中查找数据,即使有序,由于指针方向也只能从头到尾遍历链表。如何进行优化,让查找次数减少呢? 这样我们查找某个节点可以现在第一级查找出大致范围,在逐渐缩小范围,减少了查找次数。 查找次数再次减少。 如果在数据量比…
数据结构与算法-学习笔记(12)
第一个等于给定值,在前面,因此high = mid -1,出口是mid==0||array[mid-1]!=value找到了第一个。 综上,以上二分查找变形可以解决查找数据区间,或近似值的各种问题。 在循环有序数组中查找给定值。 观察该类数组的结构,可以分为两部分1,2。都是有…
数据结构与算法-学习笔记(11)
思路:根据中间点确定目标值范围,然后不断缩小范围直到找到。 假设查找k次,当k值增大,n/2……k = 1时,k=log2n,因此时间复杂度O(k) = O(logn)。 而logn这种对数时间复杂度,是一种极其高效的时间复杂度,即使n非常大,对应的logn也很小。例如:当n=…
数据结构与算法-学习笔记(十)
快速排序的最坏时间复杂度是O(n2);原因是数据是有序或接近有序的,而每次区分点都选最后一个,则需要交换次数太多,时间复杂度就会退化到O(n2)。 因此这种时间复杂度出现的主要原因还是分区点选的不够合理。 快速排序使用递归实现的,就可能出现栈溢出的问题。解决办法:1.限制递归深…
数据结构与算法-学习笔记(九)
桶排序、计数排序、基数排序这三种排序算法因为时间复杂度是O(n)线性的,因此把这类排序算法叫做线性排序。他们是非基于比较的排序算法。 这种排序算法对排序的数据要求很苛刻,主要掌握他们的适用场景。 如果要排序的数据有n个,把n个数据均匀分到m个桶内,每个桶内有k=n/m个元素。 …
数据结构与算法-学习笔记(八)
思路:将要排序的数组从中间分成两部分,分别排序,再将排序好的两部分合并。 这里用到了分治思想:分而治之,讲一个大问题分解成若干个小问题来解决。很明显这里需要用到递归这种编程方式。 每次合并时,会临时申请一个最大不超过n的内存空间,合并完成释放。而空间复杂度是指算法运行时需要的额…
数据结构与算法-学习笔记(七)
最好、最坏、平均情况时间复杂度:为甚要区分这三种时间复杂度?第一,有些排序算法会区分。第二,对于要排序的数据,有的接近有序、有的完全无序。有序度不同的数据,对于排序的执行时间肯定有影响,我们要知道排序算法在不同数据下的性能表现。 时间复杂度的系数、常数、低阶:因为实际排序中数据…
数据结构与算法-学习笔记(六)
递归就是求解问题的一种固定编程方式。它的思路就是将问题一层层往外递出去,直到遇到出口后,再一层层向里回归答案。最终得出结果。而每次递出的问题还是用同样的方式解决。 一个问题的解可以分解成几个子问题的解,子问题解决了,大问题也就解决了:子问题(数据规模更小的问题)。例如:根据n-…
下一页
个人成就
文章被点赞
47
文章被阅读
10,754
掘力值
461
关注了
6
关注者
21
收藏集
0
关注标签
1
加入于
2018-10-19