数据结构与算法
文章平均质量分 77
copbint
种一棵树,最好的时间是十年前,其次是现在!!<br>
有问题交流与讨论可以直接加我微信"copbint",CSDN回复非常不及时。
很多东西记了只是方便自己复习的,如果觉得没啥帮助请轻喷。
展开
-
插入排序——直接插入排序
思路:对位置i上的元素排序(设为升序)时(设为Ai),假设从0~(i-1)位置上的元素都已经全部排好序。所以,只需要为Ai在已经排好序的元素中找到合适的位置,并将其插入即可。最朴素的插入算法是直接插入,即从i-1开始,如果Ai小于Ai-1,则交换这两个元素的位置。以此类推,直到比前一个元素大,或者已经被交换到了第一个位置,则结束。代码:package dataStructureAndAlg...原创 2019-07-07 14:08:05 · 311 阅读 · 0 评论 -
选择排序——简单选择排序
思路思路非常简单。就是第一轮循环选出最大的元素,第二轮循环选出第二大的元素。。。。代码package dataStructureAndAlgorithms;public class SelectSort_heapSort { public static void main(String args[]) { int[] array = { 4, 2, 8, 9, 5, 7, 6, ...原创 2019-07-08 08:30:57 · 220 阅读 · 0 评论 -
选择排序——堆排序
思路参考:https://download.csdn.net/download/qq_31567335/10356263什么是堆?堆是一颗完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。而且堆还必须满足以下性质:父节点大于等于左右子节点(大堆),或者父节点小于等于左右子节点(小堆),后面为了表述方便,在文章中只讨论大堆。由此可以看出大...原创 2019-07-08 08:23:58 · 259 阅读 · 0 评论 -
交换排序——冒泡排序
代码package dataStructureAndAlgorithms;public class SwapSort_bubbleSort { // 增序冒泡排序 public static void sort(int[] array) { int length = array.length; boolean endFlag = true; // i表示这一轮排序要将i位置上...原创 2019-07-07 16:11:16 · 206 阅读 · 0 评论 -
其他排序——分治排序
归并算法是一个非常经典的分治算法,和快速排序有些类似,都是将问题分解成规模更小的子问题,分别解决。但是快速排序的子问题求解完成之后就是最优解,无需进行处理。归并算法需要对分别排序完成的子序列进行合并操作。合并操作非常简单,定义如下:每次取数组a和b第一个元素中较小者放入新的队列,直到有个队列为空,然后将另一个队列中的元素全部放入新的队列。当问题分解成只剩下一个元素的子问题时,必然有序,成为问题分解...原创 2018-04-14 01:05:31 · 743 阅读 · 0 评论 -
动态规划——背包问题(java)
三、背包问题给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?思路请参考:https://blog.csdn.net/dapengbusi/article/details/7463968代码:package dataStructureAndAlgorithms;public class KnapsackProbl...原创 2018-04-13 01:46:38 · 601 阅读 · 0 评论 -
动态规划——字符串相似度/编辑距离问题(java)
二、字符串相似度/编辑距离(edit distance)对于序列S和T,它们之间距离定义为:对二者其一进行几次以下的操作(1)删去一个字符(2)插入一个字符(3)改变一个字符每进行一次操作,计数增加1。将S和T变为同一个字符串的最小计数即为它们的距离。给出相应算法。 问题分析:这个问题就不像硬币找零问题能非常直观的想到如何分解成规模更小的问题,而且如何表示子问题的结果也是一个问题。1. 求问题的最...原创 2018-04-13 01:45:06 · 1440 阅读 · 0 评论 -
图的存储方法(java)及图的深度优先搜索和广度优先搜索
本文大部分参考:数据结构与算法java 作者:周鹏 pdf版下载地址邻接矩阵法图的邻接矩阵( adjacent matrix) 表示法是使用数组来存储图结构的方法,也被称为数组表示法。它采用两个数组来表示图:一个是用于存储所有顶点信息的一维数组,另一个是用于存储图中顶点之间关联关系的二维数组,这个关联关系数组也被称为邻接矩阵。 假设图G=(V , E)有n个顶点,即V={v0,v1...原创 2018-04-18 01:17:37 · 342 阅读 · 0 评论 -
动态规划——硬币找零问题(java)
如果要求一个问题的最优解(通常是最大值或者最小值),而且该问题能够分解成若干个子问题,并且小问题之间也存在重叠的子问题,则考虑采用动态规划。使用动态规划特征:1. 求一个问题的最优解2. 大问题可以分解为子问题,子问题还有重叠的更小的子问题,即整体问题最优解取决于子问题的最优解(状态转移方程)。3. 从上往下分析问题,从下往上解决问题4. 讨论底层的边界问题例1...原创 2018-04-12 00:56:43 · 1825 阅读 · 4 评论 -
huffman编码详解与java代码实现
参考: https://download.csdn.net/download/qq_31567335/10356263huffman编码字符编码编码分为定长编码和不定长编码。定长编码实现简单,效率高。不定长编码是为了压缩数据而提出的编码方式:给使用频率高的字符短的编码。那么到底如何给字符编码,而使平均长度最短呢?huffman就是解决这个问题的。不定长编码...原创 2018-04-17 01:37:31 · 1938 阅读 · 0 评论 -
深度优先搜索和广度优先搜索理解及经典例题(java)
参考: https://download.csdn.net/download/qq_31567335/10356263简介深度优先搜索和广度优先搜索应用得最多的是对图的搜索。深度优先即是沿着一条路一直走到底,然后进行回溯。而广度优先则是优先搜索所有相邻的节点,再访问所有相邻节点的邻节点。 图的遍历之 深度优先搜索和广度优先搜索这篇文章中的两幅图做了非常清楚的描述: ...原创 2018-04-16 01:18:12 · 16599 阅读 · 0 评论 -
交换类排序——快速排序
参考:https://download.csdn.net/download/qq_31567335/10356263快速排序理解:快速排序是将分治法运用到排序问题中的一个典型例子,快速排序的基本思想是:通过一个枢轴(pivot)元素将 n 个元素的序列分为左、右两个子序列 Ll 和 Lr,其中子序列 Ll中的元素均比枢轴元素小,而子序列 Lr 中的元素均比枢轴元素大,然后对左、右子序列...原创 2018-04-10 02:51:06 · 267 阅读 · 0 评论 -
数据结构与算法-栈
栈是一种只需要一句话就能够描述的数据结构:先进后出。但是在实际实现过程中由于要过虑到自动扩容的问题,就变得复杂了很多。找到一篇不错的博客讲解java的stack实现原理的, 原文章:Java数据结构----栈(Stack)源码分析和个人简单实现扩容那一部分关于溢出的处理实在无法理解。贴一个stackoverflow上关于这个问题的讨论的链接:Difference between if (a - b...转载 2018-04-02 00:39:56 · 195 阅读 · 1 评论 -
数据结构与算法——ChangeLog
这段时间不知道学啥,加上公司有个考试会考数据结构和算法,就准备重新学一遍基础的数据结构和算法相关知识,以前也学过,但是学的不系统,也没做记录。希望这次能进行一个系统的学习并留下记录,方便日后翻看。2019/07/07公司又要组织考试了。继续学习。2019/07/08为了方便查看,每种算法都单独写一篇博客,之前的几篇博客弄到一起的都删除了。...原创 2018-03-25 22:01:08 · 245 阅读 · 0 评论 -
插入排序——折半插入排序
折半插入排序是基于直接插入排序的优化。直接插入排序将第i个元素插入时,通过折半查找的方式,来查找第i个元素合适的位置。推导过程当0~(i-1)位置上的元素都已经排序OK,现需要插入第i个元素,设其值为temp;令low=0, high=i, mid=(high+low)/2。那么temp可能插入的位置是:low~high。每一次循环对范围的缩小都要保持这个性质不变。分两种情况讨论:t...原创 2019-07-07 14:38:51 · 299 阅读 · 0 评论