
数据结构与算法
ks_zhe
Thread.sleep();
展开
-
常用算法之动态规划算法(背包问题的求解)
动态规划算法介绍:1.动态规划(Dynamic Programming)算法的核心思想是将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法2.动态规划算法和分治算法类似,基本思想也是将待求解的问题分解成若干个子问题,先求解子问题,然后从子问题中求解出原问题的解3.和分治算法不同的是,用动态规划求解的问题,分解的子问题往往不是独立的(下一个阶段的求解是建立在上一个阶段的基础上)...原创 2019-12-20 15:02:25 · 622 阅读 · 0 评论 -
常用算法之分治算法(如何解决汉诺塔问题)
1.什么是分治算法“分治”从字面上解释就是“分而治之”,将一个复杂的问题分解成为两个或者更多的相同或者相似的子问题,再把子问题分成更小的子问题,直到最后的子问题简单到可以直接求解,原问题的解就是子问题解的合并。复杂问题 -> 子问题 -> 更小的子问题(足以解决)2.分治算法的基本步骤1.分解:将原问题分解为若干个规模较小,相互独立,和原问题形式相同子问题2....原创 2019-12-19 15:06:40 · 799 阅读 · 0 评论 -
数据结构小白之浅析二叉排序树(bst)
1.什么是二叉排序树二叉排序树(binary sort tree),简称为bst,是一种无论是查询还是添加都相对较快速的数据结构。相比于数组而言:*未排序的数组: 可以直接在数组的尾部进行添加数据,但是查找的速度慢*排序的数组: 可以使用二分查找的方法,查找的速度快,但是为了保证数组的有序性,在添加数据的过程中的速度偏慢相比于链表而言:*无论链表是否是有序的,链表添加的速度...原创 2019-12-05 17:43:09 · 1003 阅读 · 0 评论 -
数据结构小白之堆排序
谈谈堆排序堆排序是利用堆这一数据结构设计的排序算法,是一种选择排序。它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。什么是堆?堆是由以下两种不同性质的完全二叉树组成:(1):每个节点的值大于等于其左右孩子节点值称为大顶堆 (arr[i]>=arr[2*i+1] && arr[i]>=arr[a*i+2])(2): 每个节点小于...原创 2019-11-26 16:15:14 · 363 阅读 · 0 评论 -
数据结构小白之顺序二叉树
1.什么是顺序二叉树从数据存储而言,数据存储的方式和树的存储方式可以进行相互的转换,即: 数组可以转换为树,而树可以转换为数组2.顺序二叉树的特点. 顺序二叉树一般只考虑完全二叉树. 顺序二叉树第n个元素的左子节点为2*n+1. 顺序二叉树第n个元素的右子节点为2*n+2. 顺序二叉树第n个元素的父节点为(n-1)/2康康图解:3.如何进行数组和顺序...原创 2019-11-23 15:18:20 · 1510 阅读 · 0 评论 -
数据结构小白之二叉树的遍历和查找
1.存储方式的分析1.1 数组储存方式的分析优点: 通过下标的访问,速度快,还可以使用二分法提高检索的速度缺点: 如果要检索某个值,或者插入值。整个数组就会进行移动,从而造成较低的效率。同时如果需要扩容的话,从底层而言,每一次数组的扩容就要重新进行创建一个新的数组(参考ArrayList,底层维护了一个object类型的数组,所以它的添加操作效率不是很高)1.2 链表存储方式...原创 2019-11-19 15:34:55 · 366 阅读 · 0 评论 -
数据结构小白之哈希表
1.什么是哈希表?哈希表(也称散列表),是根据关键码值而直接进行访问的数据结构。通过关键码映射到表中的位置来访问记录,加快查找速度通俗点来说: 哈希表一般来说分为两种:(1): 由数组和链表组成,每个数组对应着链表,可以说通过操作哈希表就可以同时操作多个链表(简单哈希表)(2): 由数组和二叉树组成,通过操作哈希表就可以同时操作多个二叉树(稍微复杂一点的哈希表)注:本次...原创 2019-11-16 22:02:50 · 386 阅读 · 0 评论 -
数据结构小白之斐波那契查找
1.斐波那契数列的简单介绍(摘自百度)斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F...原创 2019-11-14 17:22:04 · 353 阅读 · 0 评论 -
数据结构小白之基础查找算法(线性查找,二分查找,基数查找)
1.线性查找的思路线性查找是一种最简单粗暴的查找法了,采用逐一比对的方式进行对数组的遍历,如果发现了匹配值,返回数组下标即可package com.liz.seq_search;public class SeqSearchDemo { private static int count=0; public static void main(String[] args) ...原创 2019-11-12 15:57:19 · 388 阅读 · 0 评论 -
数据结构小白之基数排序
1.基数排序简单介绍基数排序是通过分析元素的各个位置的具体值,将要排序的元素分配到某些桶中,达到排序的效果它是稳定性的排序,是使用空间来换取时间的经典例子它是桶排序的扩展2.基数排序的思想在每次排序的时候,创建序号为0-9的10个桶,将所有待比较的数值统一为同样的数位长度,数位较短的数前面补0,然后从最低位开始,依次进行排序。这样从最低位直到最高位排序完成之后,数列就变成...原创 2019-11-10 16:50:12 · 853 阅读 · 0 评论 -
数据结构小白之归并排序
1.分治分治就是"分而治之",就是把一个复杂的问题进行不断的拆分,拆成两个或者若干个相同或者相似的子问题,然后再把子问题分成更小的子问题.. 最后分到子问题可以单独求解2.归并排序分:首先将一个无序的数组拆分成若干部分(在此处的思路就是拆分成单个数为止)治:然后将分离的数进行合并(合并的过程中进行比较排序),最后得到两个有序的序列最后再通过一些思路将两个有序序列进行合并,...原创 2019-11-06 21:06:45 · 201 阅读 · 0 评论 -
数据结构小白之快速排序
1.快速排序思想:1.这是对冒泡排序的一种改进,首先去寻找一个分割点,然后将待排序的数字分成两部分(在分割点的左边比他小,分割点的右边比他大)2.然后再使用相同的方法,将分割开的这两个部分再次进行快速排序(我调我自己...)3.即可完成排序任务2.参考图示(from 韩顺平 图解java数据结构)3.举个栗子:3-1:首先准备一个数组 int...原创 2019-11-04 16:34:27 · 219 阅读 · 0 评论 -
数据结构小白之选择排序算法
1.选择排序1.1 思路先准备一个数组 int[]arr={101,119,34,1}从欲排序的数据中,按照指定的规则选出某一元素,再按照规定交换位置后达到排序的目的规则:第一次从arr[0]-arr[n-1]中选取最小值,和arr[0]交换第二次从arr[1]-arr[n-1]中选取最小值,和arr[1]交换第三次从arr[2]-arr[n-1]中选取最小值,和arr...原创 2019-11-02 19:21:08 · 168 阅读 · 0 评论 -
数据结构小白之插入排序算法
1.插入排序1.1 思路将n个需要排序的元素看成两个部分,一个是有序部分,一个是无序部分,开始的时候有序表只有一个元素,无序表有n-1个元素排序过程中每次从无序表中取出元素,然后插入到有序表的适当位置,从而成为新的有序表(类似排队,如果先叫几位同学按照学号排队站好,然后让其他同学按照那几位同学的位置为准,继续排队,这样的话比杂乱无章要快得多)1.2 举个栗子假设需要将...原创 2019-11-02 18:55:49 · 306 阅读 · 0 评论 -
数据结构小白之冒泡排序算法
1.冒泡排序1-1:思路冒泡排序的每一轮从杂乱无章的数组头部开始,每两个元素之间进行交换,直到这一轮当中最大或者最小的元素放在数组的尾部然后去不断重复这个过程ps:冒泡排序的核心在于双循环的编写,外层循环用来进行数组的遍历,内层循环用来进行数据的交换1-2:举个栗子假设存在数组{5,3,2,4,1},如何根据冒泡排序的特点写出算法呢?一步一步来吧....*先创...原创 2019-11-02 18:32:50 · 251 阅读 · 0 评论 -
数据结构小白之递归及其简单应用
递归的含义递归简单来说,就是“我调我自己”,从方法上而言,就是方法自己调用自己,递归有助于解决复杂的问题,同时使得代码可以更加简洁。举个栗子public class demo1 { public static void main(String[] args) { test(5); } //顺序输出 public static void...原创 2019-10-28 17:28:26 · 273 阅读 · 0 评论 -
栈的原理以及应用(制作一个简单的计算器)
说在前面其实有一段时间没有更新了,主要是这段时间学习了很多很多的新东西。现在也渐渐做一些整理栈(stack)1.基础介绍1.栈是一种先入后出(FILO)的有序列表2.栈是限制线性表中元素插入和删除只能在线性表同一侧进行的一种特殊线性表,允许插入和删除的一端称为变化的一端,称为栈顶。另一端为固定的一端,称为栈底3.根据栈的定义可知,先放进去的在栈底,最后放入的在栈顶,而删除元素正好相反...原创 2019-10-26 16:06:37 · 901 阅读 · 0 评论 -
如何解决约瑟夫问题?
1.Josephu问题问题介绍:设编号为1,2,3...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人出列,依次类推如何解决约瑟夫问题?构建环形链表+处理算法思路:使用一个不带头结点的循环链表来处理问题,先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m...原创 2019-07-18 11:41:58 · 265 阅读 · 0 评论 -
数据结构小白之双向链表
说在前面之前整理过一篇关于单向链表的资料:https://blog.youkuaiyun.com/Lzinner/article/details/94838953,双向链表和单向链表十分类似,所以这一篇有不少东西会借鉴上一篇的内容单向链表的缺点分析:1.单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后去查找2.单向链表不能进行自我删除,需要借助辅助节点(借助temp 就是待删除节点的前一...原创 2019-07-06 11:27:16 · 302 阅读 · 0 评论 -
数据结构小白之单向链表
链表(Linked List)介绍链表是有序的列表,在内存中存储如下:简单介绍:1.链表以节点的方式来存储,属于链式存储2.每个节点包括data域和next域3.链表的各个节点不一定是连续存放的4.链表分为带头节点和不带头节点的,根据实际的需求而定单向链表介绍1.逻辑结构:2.单链表的创建思路:建立一个class,用来创建单向链表的节点class HeroNode { ...原创 2019-07-06 11:12:36 · 218 阅读 · 0 评论 -
数据结构小白之队列与环形队列的模拟
队列的简单介绍:*队列是一个有序列表,可以使用数组或者链表来实现*队列遵循先入先出的原则。先存入队列的数据要先取出,后存入的后取出使用数组来模拟队列说明实现思路示意图代码1.说明*队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明入下图所示,其中maxSize是队列的最大容量*由于队列的输入输出分别从前后端来处理,所以需要两个变量front和rear分别...原创 2019-07-03 11:36:19 · 235 阅读 · 0 评论 -
数据结构小白之稀疏数组
说在前面: 这部分笔记是边学习韩顺平老师的图解数据结构与算法边整理出来的,其中也加入了一些拙见,希望2019的暑假可以让自己的编程基础更加扎实。稀疏数组:概念应用实例代码:二维数组转稀疏数组代码:稀疏数组转二维数组概念:当一个数组中的大部分元素为0时,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。在稀疏数组的首行保存了原始数据的行和列以及有几个不同的值,后面几行提供...原创 2019-07-03 11:15:09 · 455 阅读 · 0 评论