算法
不知心动
这个作者很懒,什么都没留下…
展开
-
图的基本实现和DJS算法(Java实现)
图图是一种各个数据对象间存在多对多关系的数据结构图的接口Interfacepublic interface IGraph { void createGraph();//创建图 int getVexNum();//统计顶点数 int getArcNum();//统计边数 Object getVex(int v) throws Exception;//返回v位置对应的顶点 int locateVex(Object vex);//查找vex在图中的位置 int firstAdjVex(int v原创 2021-12-13 23:28:29 · 834 阅读 · 0 评论 -
AOV网中的拓扑排序(Java实现)
拓扑排序问题引入在实际生活中,有很多的活动安排是存在先后顺序的关系的,要先做完一件事才能做后面一件事,或者说通过这样安排达到的效果会更好,就像大学当中的课程安排,举个栗子,计算机专业的同学一般是先学了离散数学以后再学数据结构,因为在离散数学中需要学习树,图的相关概念和一些相关的算法(也就是离散数学中的解题),那么如何解决活动的安排问题呢?拓扑排序是一个很好的选择AOV网用顶点表示活动,用边表示活动之间的先行关系的有向网即Activity on vertex networkAOV网特点:AOV网原创 2021-12-07 20:51:15 · 584 阅读 · 0 评论 -
队列及优先队列(Java实现)
引入在我们的日常生活中,有许多排队的情形,像在食堂排队打饭,在购票窗口排队购票等等,像这种满足成员元素先进先出特性的问题可以抽象成队列问题(不考虑队尾或者队伍中间的人由于种种因素中途离开的情形),那么什么是队列呢?队列(Queue)队列也是线性表的一种,和栈一样是一种特殊的线性表,只不过队列满足的特点是先进先出(FIFO或者FCFS–>First Come First Service),而后者的特点是先进后出(FILO)。ADT作为一个队列,它要实现的基本功能如下:置空,判空,获取队列长度,原创 2021-10-24 21:21:02 · 670 阅读 · 0 评论 -
栈的应用之分隔符匹配问题(Java实现)
问题引入在Java的表达式中分隔符有左分隔符("(","{","[","/*")和 右分隔符(")","}","]","/"),那么我们应该怎样编写一个程序来判断一个字符串表达式中的分隔符是否完全匹配呢?算法分析在解决分隔符匹配问题中常见的错误思想:通过两个计数器分别记录左分隔符和右分隔符的个数,如果扫描完字符串两个计数器记录的值相等则认为分隔符是匹配的。通过这种算法得到的结果其实很有可能是错误的,因为这种算法并没有考虑分隔符匹配具有的先后性,像"))(("这样的字符串得到的结果也会是匹配的,但是很原创 2021-10-16 12:22:14 · 421 阅读 · 1 评论 -
Java堆排序浅析
堆排序:堆排序的基本思想:将一组数据建成一个堆(以大顶堆为例:每个父节点都比左右孩子上的数大 ),然后将堆顶(序列中最大的数)与序列最后一位的元素换位,再对换位后的堆(堆的大小也就是序列长度 -1)进行调整,使之始终满足大顶堆结构,直到序列长度为1结束。复杂度:时间复杂度:最好,最坏,平均都是O(nlgn) :建堆时间复杂度为O(n):过于复杂,这里不作深究,有兴趣的朋友可以自己搜索,堆的调整时间复杂度O(lgn):每次进行堆的调整涉及左孩子和右孩子两个数据空间复杂度:需要额外常数级:O(1)的空原创 2021-04-10 21:31:04 · 258 阅读 · 1 评论 -
Java希尔排序浅析
希尔排序:希尔排序又叫缩小增量排序,是插入排序的一种(或者说是插入排序的改进版)。算法描述:希尔排序通过将一组数据按照一定的增量对数据进行分组,对分组后的每组数据进行插入排序,实现了相隔较远的数据之间的排序,在不断进行插入排序的过程中,整组数据越来越接近有序,最后增量为1时,就是一次完整的插入排序了。可能有人会问,既然都是插入排序,为什么还要特地将希尔排序分出来呢?这是因为插入排序在对一组有序程度越高的数据进行排序时效率越高,所以希尔排序的时间复杂度突破了O(n2),而且希尔排序的时间复杂度会随着增量取原创 2021-04-07 12:36:24 · 750 阅读 · 9 评论 -
Java实现快速排序
快速排序是一种比较高效的比较类排序算法,相比冒泡排序,快排中的每一轮比较是跳跃式的,为什么说是跳跃式的比较呢?这个问题待会再细说。快速排序的基本思想是:通过一轮比较将基数定位(一般按从小到大),并将数据一分为二,基数前面的数均比基数小,基数后面的数均比基数大,之后再对这两组数据分别继续进行比较。这就回到了刚才的问题:冒泡排序每一轮比较只是将比较区相邻两个数进行比较,对比较区最大的数据定位(大数沉淀,小数冒泡,一般按从小到大排序),而快速排序每一轮比较定位的基数的位置是可以不具有特殊性的,而且实现了将数据二.原创 2021-04-05 22:39:22 · 290 阅读 · 3 评论