线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。
对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。
使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O...
分类:
其他好文 时间:
2015-08-20 17:01:26
阅读次数:
160
栈、队列、链表都有他们各自的好处,同样的也有弊端的存在。
如果我想要一个有序的数组和链表这个当然很好实现。现在我要在这几个数据结构中查找一个值。先说数组,因为是有序的通过二分查找很快的就可以找到。查找的效率还是很高的,但如果要是插入呢,为了保证有序,我要先找到插入位置,然后再将比插入数字大的数字依次向后移动;这时的第一反应就是链表!他打插入速度很快,只要改变指针的指向就可以了。但是链表大查找要从头开始找啊。只有知道了前一个元素的地址才能知道下一个地址。所以链表查找起来又费劲了。这时候就有人引进了...
分类:
编程语言 时间:
2015-08-20 13:12:44
阅读次数:
132
首先介绍一下什么是二分法查找。
顾名思义二分法即多次将待查数组的长度折半,但前提条件时待查找数组中的数据需要是已经排序好了的数据。
主要思想:
对于待查找数组arr[low,high],其中high=arr.length-1,待查找元素des
(1)确定数组中间位置mid=(low+high)/2
(2)将查找值des与arr[mid]进行比较,若相等,则直接返回该位置;否则确定新的查找位置,继续二分查找。区域确定如下:如果arr[mid]>des由数组的有序性可知
arr[mid,mid+1..........
分类:
编程语言 时间:
2015-08-20 13:09:32
阅读次数:
118
数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法...
分类:
编程语言 时间:
2015-08-18 21:25:37
阅读次数:
255
题目描述:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
输入:
每个测试案例包括3行:
第一行为1个整数n(1
第二行包含n个整数,表示栈的压入顺序。
第三行包含...
分类:
其他好文 时间:
2015-08-17 12:12:43
阅读次数:
89
数据结构之---C语言实现最小生成树之kruskal(克鲁斯卡尔)算法...
分类:
编程语言 时间:
2015-08-14 13:47:57
阅读次数:
120
数据结构之---C语言实现最小生成树之prim(普里姆)算法...
分类:
编程语言 时间:
2015-08-12 01:21:47
阅读次数:
227
现在做的是JavaWeb方面的项目,所以一直以来没怎么弄过算法数据结构之类的东西。感觉自己跟计算机科学之间的距离越来越远。因为自己现在捣鼓的东西跟那东西不掺一点边。整天看的东西也就是项目能够用到的前台框架,后台用的也是现有的开源技术。研究,已经谈不上了。也许是自己懒散惯了,渐渐迷失了自己的方向,也....
分类:
其他好文 时间:
2015-08-11 20:41:05
阅读次数:
97
ACM 所有算法
数据结构
栈,队列,链表
哈希表,哈希数组
堆,优先队列
双端队列
可并堆
左偏堆
二叉查找树
Treap
伸展树
并查集
集合计数问题
二分图的识别
平衡二叉树
二叉排序树
线段树
一维线段树
二维线段树
树状数组
一维树状数组
N维树状数组
字典树
后缀数组,后缀树
块状链表
哈夫曼树
桶,跳跃表...
分类:
编程语言 时间:
2015-08-11 16:13:16
阅读次数:
357
归并排序以O(NlogN)最坏时间运行,而说使用的比较次数几乎是最优的,它是递归算法的一个很好的实现。这个算法中基本的操作是合并俩个已排序的表,因为这俩个表是已排序的,说以如果将输出放到第三个表中时该算法可以通过对输入数据一趟排序来完成。基本的合并算法是取俩个输入数组A和B,一个输出数组C,以及三个计数器Aptr,Bptr,Cptr,它们的位置于对应数组的开端。A[Aptr]和B[Bptr]中的较...
分类:
编程语言 时间:
2015-08-09 12:39:51
阅读次数:
143