![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 74
数据结构和一些算法总结
心心念念的小鼠标
为梦想而疯狂!
展开
-
【算法总结】-蛮力,贪心,动态规划 话谈背包问题
最近在和小伙伴们研究背包问题,对于背包问题的存在,相信已经算是一个经典问题了。本篇我们则从多方面来对背包问题有一个宏观的了解。首先我们来简要描述一下何为背包问题?经典问题&...原创 2018-12-11 19:06:15 · 2254 阅读 · 0 评论 -
排序系列【比较排序系列之】堆排序
堆排序,顾名思义是通过直接选择排序衍生而来的。直接选择排序是直接从剩余记录中线性的查找最大记录的方法,并没有巧妙的利用前一轮查找所得到的信息,而堆排序,利用堆数据结构来保存剩余记录相对大小的信息,因而是更有效的选择排序。 堆分为最大堆和最小堆,本篇我们通过最大堆来实现我们的功能。 最大堆需要满足的条件: 堆中每个父节点中的数据项都要大于或等于其子节点中的数据项。 堆排序主要有两个步骤:...原创 2018-07-27 16:34:17 · 486 阅读 · 0 评论 -
排序系列【比较排序系列之】直接选择排序
选择排序其算法思想是:逐个找出第i小的记录,并将其放到数组的第i个位置。选择排序的关键在于如何从剩余的未排序记录中找出最小或者最大的那个值,本篇我们则针对线性查找方法-直接选择排序进行一定的了解。 比如如下数组【45,34,78,12,34’,32,29,64】比较状况如下图: 当i=0时,j=i+1;smallest默认为A【i】;for(j=i+1;jpublic static v...原创 2018-07-26 18:18:39 · 249 阅读 · 0 评论 -
排序系列【比较排序系列之】直接插入排序 VS shell排序
前两篇分别对直接插入排序和希尔排序分别进行了了解,本篇则分别利用随机值赋值的方式对两个排序进行比较,代码先赋值如下: 直接插入排序代码:public static void main(String[] args) { Test2 test2 = new Test2(); int[] array=new int[10]; //随机数赋值,只考虑随...原创 2018-07-24 13:59:38 · 251 阅读 · 0 评论 -
排序系列【比较排序系列之】直接插入排序
最近在和小伙伴们一起研究排序,排序分好多总,后期会做整体总结,本篇则主要对插入排序进行一个整理。插入排序(插入分选)的算法思想十分简单,就是对待排序的记录逐个进行处理,每个新纪录与同组那些已排好序的记录进行比较,然后插入到适当的位置用三个字总结就是- “ 多对一 ”关系的插入排序分好几种,比如二分插入排序,交换插入排序,直接插入排序,本篇我们重点总结最熟悉的“直接插入排序”。比如有一个数组【...原创 2018-07-16 17:49:22 · 261 阅读 · 0 评论 -
排序系列【比较排序系列之】冒泡排序
冒泡排序属于交换排序的一种典型的交换排序。交换排序的基本思想是:两两比较待排序的关键码,发现记录逆置则进行交换,知道没有逆置对位置。对于冒泡排序而言,则就是单纯的两两进行比较,知道不能再继续冒泡为止。 我们通过【45,34,78,12,34’,32,29,64】数组为例,进行讲解。 i值 过程 i=0 j=7 A【7】和A【6】;64>29,不逆置;j=6 A...原创 2018-07-27 17:42:06 · 298 阅读 · 1 评论 -
排序系列【比较排序系列之】shell排序
上篇我们对直接插入排序有了一定的了解,并且明确知道插入排序最佳排序算法则是O(n),且适合短序列的排序情况,本篇我们讲述的shell排序则有效的利用了插入排序的这两个性质。 shell排序的眼光:不同于直接插入排序的相邻记录之间的比较,而是着眼于那些不相邻的记录进行比较和移动,待比较到最后,当间距减少为1时,也就是整个序列接近于一个正序的状态,然后再对整个序列进行插入排序。 本篇我们采用数组长...原创 2018-07-23 18:08:37 · 762 阅读 · 0 评论 -
编程题 - 链表合并(递归)
题目:将两个有序链表合并为一个新的有序链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。比如两个链表: 1->3->4 2->5->6最后输出变成: 1->2->3->4->5->6思路:定义一个链表结构合并链表,一对一比较大小,将合并的链表放入新创建的链表中代码:/** * @description:链表结构 * @author: huoyajing * @time: 2021/6/6 6:01 下午 */原创 2021-10-12 09:02:25 · 140 阅读 · 0 评论 -
数据结构:什么是红黑树?为什么要用红黑树?
本篇主要谈谈对红黑树的理解,大家都晓得JDK8中的hashmap底层是数组+链表+红黑树实现的,当面试官问你:为啥要加上红黑树实现呢??那我们首先从概念来了解一下:一、什么是红黑树?红黑树是一个接近平衡的二叉查找树,也就是说二叉查找树的特性红黑树应该都具备,那么具备哪些特性呢?左子树小于根节点右子树大于根节点左右子树也分别为二叉查找树换句话就是有序的。那么有什么优点呢?比如我要插入2,该怎么插入呢?和5比较,<5,到左侧;和3比较,<3到左侧;和1比较,>1原创 2021-09-04 19:45:48 · 8658 阅读 · 3 评论 -
【算法总结】-字符串匹配技术(二)
上篇主要讲述了蛮力法和Horspool两种字符串匹配的方式,本篇则继续总结BM和KMP两种算法实现。三、BM算法四、KMP算法原创 2018-12-23 16:15:31 · 553 阅读 · 0 评论 -
动态索引-【B树】
谈到索引原理,无疑就谈到了B树,B+树,那么我们从他们的定义,由来再到细节一一进行了解。B树:B树由来:BST大家都了解是二叉搜索树的意思,但是二叉树他并非都是平衡的,严重失衡的情况下还有可能演化成线性表,从而降低了检索效率。要知道添加索引的主要原因是为了查询速度快,所以其平衡性是非常重要的。 如何保证多分树告诉上的平衡性,不让他退换成线性呢?这就是其B树的诞生缘由。在1970年...原创 2018-08-10 20:42:19 · 1176 阅读 · 0 评论