![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 70
loserbai-
技术源于热爱 ---------------------- 学习改变命运,知识改变未来 ---------------------- Architect-Road
A humble xiao bai who focuses on the basics
展开
-
动态规划算法
概念引入在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。因此各个阶段决策的选取不能任意确定,它依赖于当前面临的状态,又影响以后的发展。当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线.这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问题称为多阶段决策问题。在多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前状态,又随即引原创 2021-08-30 23:23:12 · 1337 阅读 · 0 评论 -
字符串暴力匹配
简单粗暴,编程思想如下:如果当前字符匹配成功(即strl[j]=str2[ji) ,则i++, j++,继续匹配下一个字符如果失配(即str[j]!= str2[j), 令i = i - (j - 1), j = 0,相当于每次匹配失败时, i回溯, j被置为0。.用暴力方法解决的话就会有大量的回溯,每次只移动一位,若是不匹配,移动到下一位接着判断,浪费了大量的时间。(不可行!)步骤依次匹配匹配失败,i移动到 i减去(j - 1)的位置,j指针重置 private st原创 2021-08-25 13:46:35 · 252 阅读 · 0 评论 -
分治算法,汉诺塔问题
基本思想分治法的基本思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。分治策略分治策略:对于一个规模为n的问题,若该问题可以容易的解决(比如规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解决这些子问题,然后将各个子问题的解合并得到原问题的解。分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题…直到最后子问题可以简单的直接原创 2021-08-25 13:29:40 · 279 阅读 · 0 评论 -
常用算法--贪心算法
简介贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 。算法思想:贪心算法一般按如下步骤进行:建立数学模型来描述问题 。把求解的问题分成若干个子问题 。对每个子问题求解,得到子问题的局部最优解 。把子问题的解局部最优解合成原来解问题的一个解 。贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不原创 2021-08-25 13:13:40 · 392 阅读 · 0 评论 -
二分查找算法
二分查找属于递归查找的一种,其主要思想是将一个有序数组,分为二分,进行递归,反复为之。注意:二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找二分查找法的运行时间为对数时间O(log2 n) ,即查找到需要的目标位置最多只需要log2 n步,假设从[0.99]的队列(100个数,即n-100)中寻到目标数30,则需要查找步数为log2 100,即最多需要查找7次(2~6< 100<2^7)算法思想我们需要一个有序数组,查找的值为3进行对分,查找原创 2021-08-10 09:11:26 · 4624 阅读 · 0 评论 -
数据结构入门进阶必学-图的遍历
图介绍图的抽象数据结构边列表邻接列表邻接图领结矩阵图的遍历深度优先遍历思想深度优先遍历算法步骤图的广度优先搜索(Broad First Search)广度优先遍历算法步骤介绍在计算机科学中,一个图就是一些顶点的集合,这些顶点通过一系列边结对(连接)。顶点用圆圈表示,边就是这些圆圈之间的连线。顶点之间通过边连接。顶点:图可以有零个或者多个元素(节点)边:每个相邻元素之间被称为边或者圆弧,定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,原创 2021-08-08 21:36:26 · 373 阅读 · 2 评论 -
堆排序图解超细
堆排序一、堆排序的基本介绍二、 堆的存储三、排序一、堆排序的基本介绍1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间- 复杂度均为O(nlogn),它也是不稳定排序。2)堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆,注意:没有要求结点的左孩子的值和右孩子的值的大小关系。3)每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆二、 堆的存储一般用数组来表示堆,下标为 i 的结点的父结点下标为(i-1)原创 2021-08-03 14:47:15 · 473 阅读 · 1 评论 -
二叉排序树
定义一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;(3)左、右子树也分别为二叉排序树;特点树的结构通常不是一次生成的,而是在查找过程中,当树中不存在 关键字 等于给定值的 结点 时再进行插入。 新插入的结点一定是一个新添加的 叶子结点 ,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。 首先执行查找算法,找出被插结点的父亲结点。 判断被插结点是其父亲.原创 2021-07-23 10:26:43 · 497 阅读 · 0 评论 -
赫夫曼树(最优二叉树)
给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree),还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近术语路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路更多中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-12)结点的权及带权路径长度:若将树中结点赋给一个有着某种含义的数值,则这.原创 2021-07-17 21:30:00 · 392 阅读 · 0 评论 -
二叉树的遍历,顺序存储,线索化
定义二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分 。结论:前序:先根,再左,再右中序:先在,再根,再右后序:先在,再右,再根遍历前序 public void preOrder() { System.out.println(this.name); //递归向左子树前原创 2021-07-17 21:17:06 · 405 阅读 · 0 评论 -
数据结构和算法之回溯算法
简介每当我们遇到一个问题时,首先思考问题的类型,在根据已有知识去思考逻辑过程,切记不能一来就上代码回溯法(back tracking)(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。用回溯算法解决问题的一般步骤:1、 针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。2 、确定易于搜索的解空间结构,原创 2021-07-03 23:38:12 · 244 阅读 · 0 评论 -
简单易懂的快速排序
快速排序法基于:分治法,如同归并排序主要思想:使用一个简单的递归方法将序列 S 排序,通过分治法吧S分解为子序列,递归于每一个子序列进行快速排序,然后合并这些子序列主要分为3个步骤 :分解,递归,合并一)分解从S中选择一个特点的元素x,作为序列的中值,将S中的所有元素分解为left_mark 储存所有小于中值x的元素equal_mark 储存所有等于中值x的元素right_mark 储存所有大于中值x的元素如果 equal_mark只有一个元素就是-基准值自己x二) 解决子问题 :递归排原创 2020-08-28 14:08:12 · 221 阅读 · 1 评论