一code当先
择主之臣,得遇明主!
展开
-
动态规划算法
1.动态规划(Dynamic Programming)算法的核心思想是: 的处理算法;2.,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解;3.与分治法不同的是,4.动态规划可以通过来逐步推进,得到最优解;有一个背包,容量为4磅,现有如下物品: 要求:1.背包问题主要是指一个给定容量的背包、若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大.其中又分01背包和完全背包(完全背包指的是:每种物品都有无限件可用);2.这里的问题属于01背包,即每原创 2022-12-07 15:02:45 · 555 阅读 · 0 评论 -
KMP算法
1.KMP是一个的经典算法;2.常用于,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris 三人于1977年联合发表,故取这3人的姓氏命名此算法;3.KMP方法算法就;需求:如果用暴力匹配的思路,并假设现在str1匹配到i位置,子串str2匹配到j位置,则有: 2.2.KMP算法 2.2.1.思路分析 1.首先,用字符串Str1的第一个字符和搜索词Str2的第一个字符去比较,不符合,搜索词Str2向后移动一位; 2.重复第一步,还是不符合,再后移; 3.一直重复,原创 2022-12-06 12:09:25 · 322 阅读 · 0 评论 -
平衡二叉树(AVL树)
.对于任意二叉排序树中任意一个非叶子节点,左右两棵子树的高度差的绝对值不超过1,这样的二叉排序树就是平衡二叉树或者平衡二叉搜索树(Self-balancing binary search tree),平衡二叉树又被称为AVL树;原创 2022-11-16 12:16:03 · 322 阅读 · 0 评论 -
二叉排序树(BST树)
对于二叉树中的任意一个非叶子节点(/父节点),都要求他的左子节点的权值比当前非叶子节点(/父节点)的权值要小,而右子节点权值比当前非叶子节点(/父节点)的权值大(特别说明:如果有相同的值,可以将该节点放在左子节点或者右子节点),这样的二叉树就是二叉排序树(Binary Sort Tree),也叫二叉查找树或二叉搜索树;原创 2022-11-05 21:32:46 · 479 阅读 · 0 评论 -
二叉树
1.为什么需要树这种数据结构? 1.1.数组存储方式的分析 1>.优点 通过下标方式访问元素,速度快.对于有序数组,还可使用二分查找提高检索速度; 2>.缺点 如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低; 3>.操作示意图 1.2.链式存储方式的分析 1>.优点 在一定程度上对数组存储方式有优化(比如:插入一个数值结点,只需要将插入结点链接到链表中即可,删除效率也很好); 2>.缺点 在进行检索时,效率仍然较低,比如(检索某个值,需要从头原创 2020-07-01 17:25:27 · 232 阅读 · 0 评论 -
哈希表相关知识
1.什么是Hash? 1>.Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值.简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的...原创 2020-04-27 23:15:35 · 185 阅读 · 0 评论 -
插值查找算法
1.插值查找算法原理介绍 1>.插值查找,有序表的一种查找方式.插值查找是根据查找关键字(要查找的目标元素)与查找表中最大最小记录关键字比较后的查找方法.插值查找基于二分查找,不同的是将查找点mid的选择改进为自适应选择,提高查找效率; 2>.折半(二分)查找算法求mid索引的公式: low表示每次参与查找的列表的起始元素的下标,high表示每次参与查找的列表的终止元素的下标; ...原创 2020-04-07 23:11:41 · 449 阅读 · 0 评论 -
二分查找算法
1.二分查找算法的实现思路 说明: ①.二分查找算法是在有序列表中进行查找,这是必要条件! ②.首先找到中间位置的元素,然后将要查找的目标元素跟中间位置的元素进行对比: 如果大于中间位置的元素,说明要查找的目标元素在中间位置的元素的右侧,那么就按照相同的方式对中间位置元素右侧的所有元素进行查找…,直到找到为止; 如果小于中间位置的元素,那么就按照相同的方式对中间位置元素左侧的所有元素进...原创 2020-04-07 00:07:33 · 224 阅读 · 0 评论 -
常用排序算法的总结和对比
1.算法简介 算法是满足输入,输出,确定性,有限性,正确性(/可行性)等性质的指令序列 输入:有零个或者多个外部量作为算法的输入; 输出:算法产生至少一个量作为输出; 确定性:组成算法的每条指令应该清晰,无歧义; 有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的; 正确性/可行性:的确可以解决指定的问题; 2.算法的用途 算法是用来设计并实现一种用计算机来解决问题的...原创 2020-03-21 00:59:48 · 270 阅读 · 0 评论 -
基数排序算法
1.基数排序算法简介 1>.基数排序(radix sort)属于"分配式排序"(distribution sort),又称"桶子法"(bucket sort)或bin sort.顾名思义,它是通过键值的各个"数位"上的值,将要排序的元素分配至某些"桶"中,以达到排序的目的; 2>.基数排序(Radix Sort)是桶排序的扩展; 3>.基数排序法是属于稳定性的排序,基数排序法是效...原创 2020-03-20 21:57:59 · 205 阅读 · 0 评论 -
归并排序算法
1.简介 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略; 分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之; 2.基本思想 1>.基本示意图 说明: 可以看到这种结构很像一颗完全二叉树,这里的归并排序我们采用递归去...原创 2020-03-09 16:08:13 · 328 阅读 · 0 评论 -
快速排序算法
1.简介 快速排序(Quicksort)是对冒泡排序的一种改进 2.基本思想 1>.基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据列表变成有序序列的目的; 2>.具体流程如下图: 说明: ①.从列表中取一个元素p(例如第一个元素或...原创 2019-10-22 06:30:58 · 177 阅读 · 0 评论 -
希尔排序算法
1.简介 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序; 2.希尔排序的基本思想 1>.希尔排序是把原始元素序列按下标的一定增量(/步长)分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个元素序列恰被分成一组,再进行最...原创 2019-10-18 05:22:52 · 135 阅读 · 0 评论 -
插入排序算法
1.简介 插入排序属于内部排序,是对将要排序的元素序列以插入的方式找寻每一个元素的合适的位置,以达到排序的目的; 2.基本思想 把n个待排序的元素序列看成为一个有序列表和一个无序列表,开始时有序列表中只包含一个元素(第一个元素),而无序列表中包含有n-1个元素,排序过程中每次从无序列表中取出第一个元素,把它的排序码依次与有序列表中每个元素(从后往前的顺序取)的排序码进行比较,将它插入到有序列表中...原创 2019-10-15 02:46:25 · 151 阅读 · 0 评论 -
单向环形链表
单向环形链表 1.定义 链表中每个节点的指针域是单向的,指向下一个节点,并且最后一个节点的next指针指向第一个节点,这样就形成了一个闭环,这样的链表结构就是单向循环链表 如图: 2.应用实例 2.1.约瑟夫问题 设编号为1,2,…n的n个人围坐一圈,约定由编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列…依次类推,直到...原创 2019-09-01 00:16:33 · 305 阅读 · 0 评论 -
单向链表
1.链表 1.1.简介 链表是一个有序的列表,它在内存中存储的方式如下图: 1.2.特点 ①.链表是以节点(Node)的方式来存储,而且是链式存储; ②.每个节点(Node)包含data域和next指针域(指向下一个节点) ③.链表的各个节点(Node)不一定是连续存储的 ④.链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 注意: 数据结构中,在单链表的第一个结点之前附设...原创 2019-08-14 01:10:36 · 156 阅读 · 0 评论 -
冒泡排序算法
冒泡排序算法 冒泡排序算法思路: 对序列(假设序列元素个数为n)中的两个相邻元素进行比较,如果前一个元素值大于后一个元素的值,那么将这两个元素交换位置,将值较大的元素放到后面...当序列中所有的元素按照这种方式比较完成之后就可以得到一个值最大的元素,而且放在序列的最后一个位置 每一趟排序之后得到一个值最大的元素,放在序列最后面,那么下一趟这个元素就就不需要在参与排序了,所以每一趟排序的时候,元素...原创 2019-10-15 03:03:41 · 244 阅读 · 0 评论 -
选择排序算法
选择排序算法 思路: 将每一趟的起始元素(假设起始元素是最小的)与本趟的其他元素进行比较,如果后面的其他元素值有比这个起始元素值还小的,那么后面的那个元素就是最小的,然后从刚刚找到的这个(值最小)元素开始,继续和后面剩余的元素进行比较...最终得到本趟排序中值最小的一个元素,将他和本趟排序的起始元素交换位置,那么下一趟排序这个(值最小)的元素就不参加了 第一趟从第一个元素开始遍历得到一个最小的值...原创 2019-05-14 19:44:00 · 217 阅读 · 0 评论