【数据结构和算法】
键盘上的钢琴师_v5
厚积而薄发,谋定而后动
展开
-
Java集合之Set集合
声明:此文是阅读李刚老师的Java疯狂系列图书中Set集合部分后做的笔记和针对性补充,整理成文便于日后回顾。Java的集合体系大致分为四种Set: 无序、不可重复;List: 有序、可重复;Queue: 队列;Map: 映射关系;由多个key-value对组成,类似于关联数组,所有key的集合符合Set集合特性Java的集合类主要由两个接口派生:Col原创 2015-09-30 16:09:16 · 842 阅读 · 0 评论 -
数据结构——图
提示:以下内容不适合零基础人员,仅供笔者复习之用。一、图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成, 通常表示为: G(V,E), 其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。线性结构中,元素仅有线性关系,每个元素只有一个直接前驱和直接后继;树形结构中,数据元素(结点)之间有着明显的层次关系,每层上的元素可能和下一层中多个元素原创 2017-06-30 15:03:12 · 24585 阅读 · 15 评论 -
排序算法总结(插入、Shell、选择、堆排序、冒泡、快速、归并、基数)
排序是编程的基础,在程序中会经常使用,好的排序方法可以帮助你提高程序运行的效率,所以学好排序,打好基础,对于程序的优化会手到擒来。无论你的技术多么强,如果没有基础也强不到哪去。 不多说了,我们直接进入今天的主题。 总有人说排序很难,但是我总觉得很简单,我们只原创 2016-04-28 10:04:07 · 1600 阅读 · 0 评论 -
查找算法总结(顺序、折半、分块、二叉排序树)
一、基本概念:1、 列表:待搜索的数据集合。2、 关键字:要查找的那个数据。3、 查找,检索:一种算法过程。给出一个key值(关键字),在含有若干个结点的序列中找出它。4、 查找表:同一类型的数据元素的集合。5、 静态查找表:查询某个元素、检索指定元素的属性。6、 动态查找表:查找后插入、删除。7、 查找成功:当某个元素的key值等于给定值k,返回该元素的原创 2016-11-11 17:30:05 · 9450 阅读 · 0 评论 -
数据结构——树
提示:以下内容不适合零基础人员,仅供笔者复习之用。概要:树是n (n≥0) 个结点的有限集。 n=0 时称为空树。在任意一棵非空树中:有旦仅有一个特定的称为根(Root) 的结点; 当n>1 时,其余结点可分为m(m>0) 个互不相交的有限集T1、 T2、 ……、 Tm, 其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。一、一些概念:度:结点拥原创 2017-06-09 17:21:15 · 1806 阅读 · 1 评论 -
数据结构——串(朴素的模式匹配算法、KMP模式匹配算法)
提示:以下内容不适合零基础人员,仅供笔者复习之用。概要:串是由零个或多个字符组成的有限序列,又名叫字符串。一、串的比较 给定两个串,s = "a1a2.....an",t="b1b2....bm",当满足以下条件之一时,sn。例如,s="hap",t="happy",就有s存在某个k。例如,s="happen",t="happy",因为两串前4个字母均原创 2017-04-20 16:03:45 · 24328 阅读 · 5 评论 -
数据结构——栈与队列(顺序栈、链栈、循环队列、链队列)
提示:以下内容不适合零基础人员,仅供笔者复习之用。概要:栈是限定仅在表尾进行插入和删除操作的线性表。队列是只允许在一端进行插入操作、而在另一端进行删除操作的线性表。一、栈1. 定义 栈是限定仅在表尾进行插入和删除操作的线性表。(又称后进先出的线性表)2. 抽象数据类型3. 栈的顺序存储结构及实现#define MAXSIZE 2原创 2017-04-16 17:34:49 · 2290 阅读 · 2 评论 -
递归和迭代
一、对比相同点:递归和迭代都是循环的一种。不同点: 1、程序结构不同递归是重复调用函数自身实现循环。迭代是函数内某段代码实现循环。 其中,迭代与普通循环的区别是:迭代时,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。 2、算法结束方式不同 递归循环中,原创 2017-04-13 14:35:21 · 19243 阅读 · 4 评论 -
数据结构——线性表 (顺序表、单链表、静态链表、循环链表、双向链表)
线性表---顺序存储结构---链式存储结构(单链表、静态链表、循环链表、双向链表)原创 2017-04-12 16:06:27 · 10352 阅读 · 3 评论 -
算法的时间复杂度和空间复杂度计算
一、算法的时间复杂度定义在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度。记作:T(n)=O(f(n))。它表示随问题n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中,f(n)是问题规模n的某个函数。这样用大写O()来体现算法时原创 2017-03-27 16:16:38 · 58112 阅读 · 18 评论 -
854计算机基础——备考建议+近年考点汇总
备考资料包:(【哈工大计算机考研真题+哈工大内部资料】1991-2016HITCS考研初试真题及答案+部分其中期末考题)https://download.csdn.net/download/daijin888888/10719371备考建议:计算机组成原理部分:第一章、计算机系统概论(不太重要)主机框图 P20 图1.11存储器位数、指令字长、机器字长、存储字长,这是最...原创 2016-12-05 14:03:17 · 11283 阅读 · 2 评论 -
算法系列—回溯法
关键字:深度优先搜索一、基本概念: 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点原创 2016-11-10 18:42:55 · 728 阅读 · 0 评论 -
算法系列—动态规划法
关键字:子问题不独立、子问题结果存储、空间换时间一、基本概念: 和分治法一样,动态规划(dynamicprogramming)是通过组合子问题而解决整个问题的解。 分治法是将问题划分成一些独立的子问题,递归地求解各子问题,然后合并子问题的解。动态规划适用于子问题不独立的情况,也就是各子问题包含公共的子问题。此时,分治法会做许多不必要的工作,即重复地求原创 2016-11-10 16:23:40 · 656 阅读 · 0 评论 -
算法系列—分治法
关键字:相同子问题、递归、合并一、基本概念: 所谓分治法是指,把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……二、算法思想和策略: 分治法的设计思想是:将一原创 2016-11-10 14:13:03 · 715 阅读 · 0 评论 -
算法系列—贪心算法
引言 贪婪是一种人类本能的东西,贪心算法也是最接近人类日常思维的一种解题策略。比如,找零钱问题: 假设提供了数目不限的面值为25美分、10美分、5美分、1美分的硬币。一个小孩买了价值少于1美元的糖,并将1美元交给售货员,售货员希望用最少的硬币数找钱给小孩。假设小孩买了33美分的糖果。(需要找钱67美分) 找钱的方法:25+25+10+5+1+1.原创 2016-11-10 10:53:06 · 2239 阅读 · 0 评论 -
图的深度优先搜索(DFS)和广度优先搜索(BFS)及其Java实现
一、背景知识:1、图的表示方法:邻接矩阵(二维数组)、邻接表(链表数组【链表的链表】)。2、图的搜索方法:深度优先搜索(DFS)和广度优先搜索(BFS)。3、深度优先搜索(DFS): (1)用栈记录下一步的走向。访问一个顶点的过程中要做三件事: ①访问顶点 ②顶点入栈,以便记住它原创 2018-05-24 17:29:37 · 19199 阅读 · 5 评论