前言 话说新开的博客十分好用... 所以,我打算开一个坑,名曰[算法系列]. 什么意思--从名字泥应该就猜得出来... 废话不多说,进入正文~~ 正文 原理 首先,堆是一颗棵二叉树.. 其次,堆是一棵完全二叉树.. 然后,设有一关系 P(Type X, Type Y) 则,堆的每个元素 Element 满足: foreach Child ∈ Element.Childs do ASSERT( P(Element.value, Child.value) ); 说的明白点,就是每个元素和它的儿子有特…
[0]README 0.1)为什么有这篇文章?因为 Dijkstra算法的优先队列实现 涉及到了一种新的数据结构,即优先队列(二叉堆)的操作需要更改以适应这种新的数据结构,我们暂且吧它定义为Distance, 而不是单纯的int类型: 0.2)本文源代码均为原创, int类型的优先队列(二叉堆)的操作实现,参见http://blog.csdn.net/PacosonSWJTU/article/details/49498255, (并比较他们的打印结果,很有必要) [1]因为 Dijkstra算法…
二叉堆 1 二叉堆的定义 堆是一个完全二叉树结构(除了最底下一层,其他层全是完全平衡的),如果每个结点都大于它的两个孩子,那么这个堆是有序的. 二叉堆是一组能够用堆有序的完全二叉树排序的元素,并在数组中按照层级存储(不用数组的第一个位置) 2 二叉堆的性质 最大的元素在a[1] (root结点) 每个k的父亲在k/2 每个k的孩子在k*2和k*2+1 3 二叉堆的操作 3.1 上浮(孩子大于父亲)——对应插入操作 循环,每次比较自己和父亲,如果比父亲大就交换,直到root. 3.2 插入 先把元…
堆其实也是树结构(或者说基于树结构),一般可以用堆实现优先队列. 二叉堆 堆可以用于实现其他高层数据结构,比如优先队列 而要实现一个堆,可以借助二叉树,其实现称为: 二叉堆 (使用二叉树表示的堆). 但是二叉堆,需要满足一些特殊性质: 其一.二叉堆一定是一棵完全二叉树 (完全二叉树可以用数组表示,见下面) 完全二叉树缺失的部分一定是在右下方.(每层一定是从左到右的顺序优先存放) 完全二叉树的结构,可以简单理解成按层安放元素的.(所以数组是不错的底层实现) 其二.父节点一定比子节点大 (针对大顶堆…
数据结构与算法入门系列教程 (一)为啥要学习数据结构与算法 曾经我也以为自己很牛逼,工作中同事也觉得我还可以,领导也看得起我,啥啥啥都好,就这样过了几年,忽然发现自己学新东西没劲.时代都变了,而我还只是会写一些简单的业务代码,每天也只是复制来复制去的. 是时候改变了,所以这就是我来学习这些东西的原因. (二)Demo地址 C#的Demo,github地址如下:  https://github.com/gdoujkzz/DataStructureForCSharp (三)教程目录 入门不容易->先…
July   二零一一年一月 本文主要参考:算法导论 第二版.维基百科. 一.Dijkstra 算法的介绍 Dijkstra 算法,又叫迪科斯彻算法(Dijkstra),算法解决的是有向图中单个源点到其他顶点的最短路径问题.举例来说,如果图中的顶点表示城市,而边上的权重表示著城市间开车行经的距离,Dijkstra 算法可以用来找到两个城市之间的最短路径. 二.图文解析 Dijkstra 算法 ok,经过上文有点繁杂的信息,你还并不对此算法了如指掌,清晰透彻.没关系,咱们来幅图,就好了.请允许我再…
[JavaScript数据结构系列]00-开篇 码路工人 CoderMonkey 转载请注明作者与出处 ## 0. 开篇[JavaScript数据结构与算法] 大的计划,写以下两部分: 1[JavaScript数据结构系列] 2[JavaScript算法系列] 1.[JavaScript数据结构系列] 大家都知道,学习编程,基础很重要.数据结构,就是很其中重要的一项. 本系列是个人在学习过程中的记录总结实践分享,也希望对想要学习这方面的你,有所助益. 大白话模式开扯. 1.1 什么是数据结构 D…
1.正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项, 例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12 (1).设计一个函数void generate(int a,int b,int N ,int * Q)计算Q的前几项 (2).设计测试数据来验证函数程序在各种输入下的正确性. 感觉有点类似归并排序的Merge.有两个数组A.B. 数组A存放:3*1.3*2.3*3… 数组B存放:5*1.5*2.5*3… 有两个指针 i, j,…
一:查找 1.1 基本概念和术语 查找(Search)是在数据结构中确定是否存在关键码等于给定关键码的记录的过程.关键码有主关键码和次关键码.主关键码能够唯一区分各个不同的记录,次关键码通常不能唯一区分各个不同的记录.以主关键码进行的查找是最经常.也是最主要的查找.  查找有静态查找(Static Search)和动态查找(dynamic Search)两种.静态查找是指只在数据结构里查找是否存在关键码等于给定关键码的记录而不改变数据结构,动态查找是指在查找过程中插入数据结构中不存在的记录,或者…
[JavaScript数据结构系列]03-队列Queue 码路工人 CoderMonkey 转载请注明作者与出处 1. 认识队列Queue结构 队列,跟我们的日常生活非常贴近,我们前面举例了食堂排队打饭的例子,我们继续用这个例子来说明. 如上图所示, 第一个加入队列的为队列头 最后一个为队列尾 FIFO:先进先出,后进后出的原则 添加删除操作:只能添加到队尾,只能删除队列头 去银行办业务要先取号,然后等待叫号,一样一样的.(银行也有VIP,后面我们讲优先队列) 2. 队列的应用 JavaScri…