
数据结构与基本算法
文章平均质量分 56
Joern-Lee
嵌入式-物联网-美好的未来~~~
展开
-
算法入门(六):归并排序
这个排序正好可以用到之前博文的master公式,这是一个mergeSort,整体思路也是递归行为。先让left数组排好序,再让right数组排好序,最后整合为一个有序数组。关键的需要递归的整合算法:先准备两个指针和一个辅助数组,分别指向左侧数组0位和右侧数组0位,然后compare,哪边更小就先拷贝哪一侧然后偏移一位,如果存在越界了,把另一侧都拷贝下来:他的思想很重要,很多演化的题目,需要重点掌握 这里主要关注递归思想,还有通过两侧的++完成运算后自主偏移,还有辅助数组使用(存在排序操作避免影响原先数组)接原创 2022-06-29 21:10:57 · 260 阅读 · 2 评论 -
算法入门(五):对数器与递归复杂度计算
这是一种算法验证机制选择一种需要验证的方法A,和另一种可能速度有点慢但是已经验证好的方法B通过随机样本产生器从小到大产生随机样本,来进行实际测试例如排序我们就可以拿系统的排序算法当成方法B和自己编写的排序算法方法A通过对数器方式进行验证,具体代码可以参考下面图片:这里主要说一下什么是递归,以求数组最大值的算法来举例同时学习如何基于master公式来进行符合该公司的递归算法时间复杂度计算常规该问题可以通过遍历-比较-记录和更新最大值下标来通过O(N)时间解决。但是这里我们希望采用递归方式,采用递归就要搞清楚最原创 2022-06-27 10:01:16 · 285 阅读 · 0 评论 -
算法入门(四):二分法的详解与扩展
原创不易~看完若对你有所帮助,记得点一个赞哈,这就是对我最大的支持了!这里主要通过三个问题来引出二分法的基本使用和扩展这个二分法最基本的使用,针对有序数组,以两等分方式递归找寻目标数字(通过比较二分值和目标值大小来选择下一次二分区间)这里时间复杂度是以2为底对数,例如8个数字找1个,最多对半3次 log2^8 = 3看到有序,可以想一想二分算法,这里也是可以通过二分来解决的。二分,判断二分值(这个位置通过index记录)和3关系,比3大或者等于3,去二分值左侧再二分,否则去右侧二分,同时通过一个变量记录3的原创 2022-06-26 11:11:49 · 413 阅读 · 0 评论 -
算法入门(三):异或位运算的知识和拓展
原创不易~看完若对你有所帮助,记得点一个赞哈,这就是对我最大的支持了!异或的口诀可以记忆为:不进位相加,就是:0 ^ 1 = 1 // 0+1 = 11 ^ 0 = 10 ^ 0 = 01 ^ 1 = 0 // 1+1=10 -> 不进位是0注意异或满足的两个重要规律:交换律与结合律许多数一起异或,和乱序分开一部分一部分异或是完全一样的所以就有另外一种swap代码了,我们来看下: 相关算法题 问题1 一个int数组,只有一种数出现了奇数次,其他数字都出现了偶数次,求该数字第一个问题有异或的知识基础话非常简单原创 2022-06-25 11:27:27 · 653 阅读 · 0 评论 -
算法入门(二):简单排序算法
原创不易~看完若对你有所帮助,记得点一个赞哈,这就是对我最大的支持了!只需要额外几个变量完成:O(1)需要等规模的额外数组:O(N)原理之前在第一章节中已经说过了:核心就是遍历找最小值下标,和初始位置替换 冒泡排序 原理:通过遍历原数组,进行大小比较,保证一轮可以将最大值放到最右侧,然后下一轮可以将次大值放到length - 2地方,循环直到结束 插入排序 思想 插入排序很重要的一点思想是保证局部有序看0-0范围是否有序,ok0-1范围是否有序,如果没有做到,交换arr[0]和arr[1],知道有序,ok0原创 2022-06-23 10:35:43 · 109 阅读 · 0 评论 -
算法入门(一):认识复杂度
原创不易~看完若对你有所帮助,记得点一个赞哈,这就是对我最大的支持了!一个操作如果和样本的数据量没有关系,每次都是固定时间,就是常数操作例如数组中取出i位置的数字就是常数操作,无论arr长度,寻址操作都是一个常数操作,计算一个偏移量就行了:其他例如位运算等都是常数操作但是链表里面的查找,以及很多框架的API都不是常熟操作:选择排序了解与引入时间复杂度这个排序思路很简单,先从0到N找最小值,然后记录最小值index和0位置交换,然后从1-N重复上述操作就可以0-N-1 首先我们需要看一下比较谁小 , 需要看N原创 2022-06-19 11:53:04 · 181 阅读 · 0 评论 -
数据结构之图(存储结构、遍历)
一、图的存储结构 1.1 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 看一个实例,下图左就是一个无向图。 从上面可以看出,无向图的边数组是一个对称矩阵。所谓对称矩阵就是n阶矩阵的元满足ai...转载 2017-02-28 19:57:47 · 420 阅读 · 0 评论 -
最短路径—Dijkstra算法和Floyd算法
注意:以下代码 只是描述思路,没有测试过!! Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中...转载 2017-02-28 20:02:08 · 303 阅读 · 0 评论 -
算法学习之路
关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的。 原文链接:http://zh.lucida.me/blog/on-learning-algorithms/ 原文作者:Lucida 这篇文章讲了什么? 我这些年学习数据结构转载 2017-02-23 16:12:59 · 906 阅读 · 1 评论