算法数据结构
文章平均质量分 54
雪狐晨光
流水落花春去也
展开
-
DAG图的解释
(Directed Acyclic Graph),数据结构中的术语。原创 2023-05-24 10:54:37 · 618 阅读 · 0 评论 -
分治策略(算法)
分治策略在分治策略中我们递归的求解一个问题,在每层递归中应用如下三个步骤: 分解:将问题划分成为一些子问题的形式,子问题形式与原问题一样,只是规模更小。 解决:递归的求解子问题。如果问题的规模足够小,则停止递归,直接求解。 合并:将子问题的解组合形成原问题的解。使用分治策略解决问题的例子最大字数组的和求解案例的Java实现原创 2015-12-21 10:38:44 · 800 阅读 · 2 评论 -
排序和顺序统计量(算法导论)
排序的简单笔记和总结~原创 2015-12-22 18:48:00 · 2420 阅读 · 2 评论 -
数据结构(Java)——图的基础算法
图是由结点和结点之间的连接构成。术语:图的结点就是顶点(v),结点之间的链接就是边(e)。 无向图是一种边为无序结点对的图。 有向图是一种边为有序结点对的图。原创 2015-12-02 14:54:07 · 683 阅读 · 0 评论 -
高效算法之贪心算法(第16章)
类似于动态规划,贪心算法通常用于最优化问题,我们做出一组选择来达到最优解。贪心算法的思想是每步选择都追求局部最优。一个最简单的例子是找零问题,为了最小化找零的硬币数量,我们反复选择不大于剩余金额的最大面额的硬币。贪心算法对很多问题都能够获得最优解,而且速度比动态规划快很多。但是,我们并不能简单的判断贪心算法是否有效。贪心算法并不保证得到最优解,但对很多问题确实可以求的最优解。原创 2016-03-15 22:15:21 · 638 阅读 · 0 评论 -
中位数和顺序统计量(第9章)
学习由n个不同的树的集合中选择第i个顺序统计量的问题。 输入:一个包含nn个(互异的)数的集合AA,1≤i≤n1 \leq i \leq n的整数i。 输出:元素x∈Ax \in A,并且 AA中恰好有i个元素小于它。原创 2016-03-03 16:36:59 · 682 阅读 · 0 评论 -
最小生成树:Kruskal算法 和 Prim算法(第23章)
一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树。Kruskal算法 和 Prim算法都是使用贪心策略来解决最小生成树的问题。原创 2016-03-17 21:22:51 · 484 阅读 · 0 评论 -
高效算法之动态规划(第15章)
动态规划通常用来解决最优化问题,在这类问题中,我们通常做出一组选择来表达最优解。在做出这个选择的同时,通常会生成与原问题形式相同的子问题。当多于一个选择子集都生成相同的子问题时,动态规划技术通常很有效,其关键技术就是对每一个这样的子问题都保存其解,当其重复出现的时候即可避免重复求解。这种思想可以将指数时间的算法转换为多项式时间的算法。原创 2016-03-07 21:54:14 · 345 阅读 · 0 评论 -
动态规划之矩阵链乘法(第15章)
适合应用动态规方法的求解最优化问题应该具备两个要素:最优子结构和子问题重叠。使用动态规划方法求解最优化问题的第一步就是刻画最优解的结构。如果一个问题的最优解包含子问题的最优解,我们就成此类问题具有-最优解结构-性质。矩阵链乘法的程序设计思路很好的契合了动态规划的特点。原创 2016-03-09 11:04:33 · 618 阅读 · 0 评论 -
动态规划之最长公共子序列
最长公共子序列的问题常用于解决字符串的相似度,是一个非常实用的算法,作为码农,此算法是我们的必备基本功。最长公共子串(Longest Common Substirng)和最长公共子序列(Longest Common Subsequence,LCS)的区别为:子串是串的一个连续的部分,子序列则是从不改变序列顺序的基础上。原创 2016-03-10 18:10:15 · 503 阅读 · 0 评论 -
动态规划之最优二叉搜索树
利用最优二叉搜索树来实现树的搜索代价最小。原创 2016-03-11 15:24:20 · 13453 阅读 · 3 评论 -
散列表的学习和探讨(算法导论第11章)
许多的应用需要一个动态的集合结构,它至少支持INSERT、SEARCH和DELETE的字典操作。散列表是实现了字典操作的一种有效数据结构。尽管最坏情况下散列表查找一个元素的时间与链表的查找时间相同,达到了O(n)。散列表是普通数据概念的推广。由于对于普通数组可以直接寻址,数组能够提供对元素的快速访问但难于扩展;链表易于扩展但不能对其元素进行快速访问。原创 2016-02-28 21:58:10 · 581 阅读 · 2 评论 -
数据结构(Java)——查找和排序(1)
查找是这样一个过程,即在某个项目组中寻找某一指定目标元素,或者确定该组中并不存在该目标元素。 对其进行查找的项目的组有时也成为查找池。 两种常见的查找方式:线性查找和二分查找。 为了能够查找某一对象,我们就必须将一个对象跟另一个对象进行比较。我们对这些算法的实现就是对某个Comparable对象的数组进行查找。因此,所涉及的元素实现了Comparable接口且彼此是可比较的。原创 2015-11-19 09:58:20 · 922 阅读 · 1 评论 -
汉密尔顿路径(哈密顿路径)解析
哈密顿路径也称作哈密顿链,指在一个图中沿边访问每个顶点恰好一次的路径原创 2016-11-22 11:33:44 · 29075 阅读 · 0 评论 -
数据结构(Java)——查找和排序(4)
基数排序堆排序希尔排序原创 2015-11-19 22:46:19 · 339 阅读 · 0 评论 -
数据结构(Java)——堆的应用
- 如果一个堆是平衡的,即所有的叶子都位于层h或h-1,其中h为log2n且n是树中的元素数目,以及所有层h中的叶子都位于树的左边,那么该堆就是完全的。 - 一个完全堆是平衡的并且添加删除算法保持了该堆的平衡性。 - add操作必须确定插入点的双亲,这样能够将该结点的某一个孩子指针设定为指向新结点。数组实现不一定需要确定新结点的双亲,因为数组实现是拥有count位置来定位的。 - 数组实现的堆的插入和删除都是原创 2015-12-01 20:14:42 · 565 阅读 · 0 评论 -
数据结构(Java)——优先队列和堆
堆就是具有两个附加属性的二叉树。 【1】它是一棵完全树; 【2】对每一结点,它小于和等于其左孩子和右孩子。 上述定义描述的是最小堆。一个堆也可以是最大堆,其中结点大于或者小于它的左右孩子。原创 2015-11-26 16:23:43 · 382 阅读 · 0 评论 -
数据结构(Java)——查找和排序(5)
低头要有勇气,抬头要有底气。堆排序的增加理解: 由于前面对于堆排序有些疑问存在,因此今天我再一次研究了一下堆排序的算法和设计思想。1.构建大根堆的算法设计根据二叉树的性质我们可以得非叶节点最大序号值为size/2 。 因此我们根据一个数据构建大根堆的算法就是: 【1】首先将当前的数组作为一个完全二叉树保存 【2】从最后一个非叶节点进行构建大顶堆 【3】循环 -》 利用判定和递归进行构建大原创 2015-11-21 15:52:24 · 341 阅读 · 0 评论 -
数据结构(Java)——队列的实例
A collection designed for holding elements prior to processing. Besides basic Collection operations, queues provide additional insertion, extraction, and inspection operations. Each of these methods exists in t原创 2015-11-17 09:59:11 · 491 阅读 · 0 评论 -
数据结构(Java)——栈的实现总结
栈是一种线性集合,其元素的添加和删除都是在同一端进行的。我们称栈是LIFO的方式处理的。栈的基本实现方式有两种,数组实现和链表实现。原创 2015-11-14 19:02:29 · 524 阅读 · 0 评论 -
数据结构(Java)——队列的实现
队列是一种线性集合,其元素从一端加入,从另一端删除。因此队列是按照先进先出方式处理的,从队列中删除元素的次序与往队列里放置元素的的次序是一样的。由于队列是一种线性集合,因此可以像处理栈一样,把队列实现成一种LinearNode对象的链表。原创 2015-11-16 19:19:07 · 913 阅读 · 0 评论 -
数据结构(Java)——树的入门学习
平衡树:对平衡的定义有很多种,粗略的来说,如果树的叶子都位于同一层或者至少彼此相差不超过一层,那么就称之为平衡的。完全树:如果某树树平衡的,且底层的所有叶子都位于树的左边,则认为该树是完全的。满树:如果一棵n元树的所有叶子都位于同一层,而且每一个结点要么是叶子,要么就正好拥有n个孩子,则称此树是满的。原创 2015-11-21 19:50:21 · 484 阅读 · 0 评论 -
数据结构(Java)——二叉树的应用
二叉树的应用案例:表达式求解的二叉树求解方法,背部疼痛诊断-专家系统的一个小Model。原创 2015-11-23 14:36:29 · 2975 阅读 · 0 评论 -
数据结构(Java)——列表的实现
链表是一种实现策略,使用引用在对象之间创建链接。列表集合 是一种概念性的表示方法,其思想是使事物以线性列表的方式进行组织,就像栈和队列一样,列表也可以使用数组和链表来实现。列表集合没有内在的容量大小,它可以随着需要而增大。列表集合更一般化,可以在列表的中间和末端添加和删除元素。列表可以分为有序列表、无序列表、索引列表。原创 2015-11-17 14:01:17 · 1169 阅读 · 0 评论 -
数据结构(Java)——迭代器Iterator
迭代器是一个对象,允许用户每次获得和使用集合中的一个元素,它与某个集合一同使用,但是它是一个单独的对象。迭代器是有助于实现某个集合的一种机制。 在java中,迭代器提供了一种标准方法,可以一次访问集合中的每一个元素,这是一种通用的操作。迭代器是一个对象,允许用户每次获取和使用集合中的一个元素。原创 2015-11-17 17:12:45 · 663 阅读 · 0 评论 -
数据结构(Java)——迭代器和列表的实例
Java集合API提供的列表类主要是支持索引列表。在一定程度上,这些类同无序列表是重叠的。JavaAPI中没有实现事实上的有序列表。【1】ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。【2】对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。【3】对于新增和删除操作add和remove,LinedList比较原创 2015-11-17 21:43:15 · 644 阅读 · 0 评论 -
数据结构(Java)——递归
递归是一种功能强大的编程技术,能为某些问题提供优雅的解决方案。在各种数据结构的实现以及数据的查找和排序的处理中,递归特别有用。 递归是一种编程技术,它利用一个方法来调用自身来满足整个作用。能够递归编程取决于能否递归的思考。 任何递归定义都必须有一个非递归部分,这个非递归部分称为基本情形,它使得递归最终会终止。 数学和数学公式常常会递归的表示。深刻理解递归,对于编程和解决一些逻辑上直接求解十分复杂的问题十分有效。原创 2015-11-18 20:15:04 · 583 阅读 · 0 评论 -
数据结构(Java)——查找和排序(2)
基础的排序算法Java实现。原创 2015-11-19 13:27:10 · 465 阅读 · 0 评论 -
数据结构(Java)——查找和排序(3)
一些高级排序算法的Java实现:快速排序和归并排序【1】快速排序的算法是首先执行找中心点,中间大两边小的分割开,然后不断的将列表规模变小,小的在左,大的在右的原则一直不变。这样慢慢的随着列表越变越小就能够实现全部有序。【2】归并排序的算法是首先将列表递归的一份为二,知道每一个子列表只有一个元素,然后在就近将两个子列表有序合并,列表规模慢慢扩大,这就实现了局部有序到整体有序的过渡。原创 2015-11-19 20:08:09 · 527 阅读 · 1 评论 -
数据结构(Java)——二叉查找树
二叉查找树是带有附加属性的二叉树,即对树中的每个结点,其做孩子都要小于父结点,而父结点又要小于等于其右孩子。二叉查找数是对二叉树定义的扩展,前面的[二叉树的实现](http://blog.csdn.net/zhangyifei521/article/details/49967121) 中我们的对二叉树做了一个简单的实现,其中使用BinaryTreeNode类来表示树中每个结点。每个BinaryTreeNode对象要原创 2015-11-24 11:13:46 · 364 阅读 · 0 评论 -
数据结构(Java)——Set和Map的应用
1.Set定义为一种无重复元素的集合概念。Set集合是对象的唯一集合,通常用于确定某个元素是否是集合的成员。 2.Map集合是创建了关键字与值之间关系的集合。给定关键字,MAP集合提供了检索其值 的高效方式。MAP集合的关键字必须是唯一的。给定关键字Map集合提供了检索其值的高效方式。Map集合的关键字必须是唯一的,每个关键字只对应于一个值。然而这并不一定是一对一的映射关系,多个关键字可能映射到同一个对象原创 2015-12-02 13:38:31 · 449 阅读 · 0 评论 -
数据结构(Java)——栈的实例
栈的应用实例原创 2015-11-15 19:37:50 · 665 阅读 · 1 评论