
数据结构与算法
Geek_sun
为梦想而努力。
展开
-
链式前向星
Nodes from the RootTime Limit : 3000/1000ms (Java/Other)Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 40Accepted Submission(s) : 9Font:Times New Roman|Verdana|Georgia...原创 2020-02-29 21:51:19 · 337 阅读 · 0 评论 -
数据结构-树的前序,中序,后序,层序遍历(java)
中序遍历(递归实现)public void traversal(TreeNode root){ if(root != null){ //中序遍历: 左、中、右 traversal(root.left); System.out.println(root.val); traversal(root.right); }...原创 2019-04-21 08:49:49 · 329 阅读 · 0 评论 -
Interview Questions: Union–Find (ungraded)
最近在学coursera上的算法课程。下面是课后习题的答案。1.Social network connectivity.Given a social network containingnnmembers and a log file containingmmtimestamps at which times pairs of members formed friendships...原创 2019-08-14 09:54:38 · 1317 阅读 · 2 评论 -
union-find算法
quick-find算法public class UF { private int[] id; //分量id private int count; //分量数量 public UF(int N){ count = N; id = new int[N]; for(int i = 0;i < N;i++){...原创 2019-08-13 16:43:52 · 241 阅读 · 0 评论 -
基本排序算法
选择排序实现原理首先找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。特点运行时间与输入无关。为了找出最小的元素而扫描一遍数组并不能为下一遍扫描提供什么有用信息。 数据移动是最少的。每次交换都会改变两个数组元素的值,因此...原创 2019-09-13 14:54:46 · 249 阅读 · 0 评论 -
归并排序
归并:即将两个有序的数组归并成一个更大的有序数组。原地归并的抽象方法该方法用两个指针分别比较数组左右两边的元素大小。该方法创建了一个新的数组用来储存原来数组的信息。 public static void merge(Comparable[] a, int lo, int mid, int hi){ int[] aux = new int[a.length]; ...原创 2019-09-14 19:29:16 · 284 阅读 · 0 评论 -
动态规划
题目来源于up主正月点灯笼https://www.bilibili.com/video/av16544031ex1图中每一个矩形代表一个任务,每个任务都得在某个时间段内完成,同一时间段只能完成一个任务。完成每个任务后可以得到奖励,求最大的奖励。prev[i]为最接近i的那个可以完成的任务,与起始时间最接近的第i个任务的最优解=第i个任务不选的情况下第七个任务的最优解与选了第...原创 2019-09-15 11:23:57 · 283 阅读 · 0 评论 -
基本排序算法之快速排序
快速排序是一种分治的排序算法。它将一个数组分为两个数组,将两部分独立地排序。快速排序递归地将子数组a[lo..hi]排序,先用partition()方法将a[j]放到一个合适的位置,然后再用递归调用将其他位置的元素排序。该方法的关键在于切分,这个过程使得数组满足下面三个条件:1.对于某个j,a[j]已经排定;2.a[lo]到a[j - 1]中的所有元素都不大于a[j];3.a[...原创 2019-09-21 19:24:30 · 187 阅读 · 0 评论 -
优先队列
定义普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。堆的定义数据结构二叉堆能够很好地实现优先队列的基本操作。在二叉堆的数组中,每个元素都要保证大于等于另两个特定位置的元素。相应地,这...原创 2019-09-22 16:18:18 · 337 阅读 · 0 评论 -
蛮力法解决01背包问题
蛮力法:设计算法求解背包问题,并编程实现。背包问题: 给定重量分别为,价值分别为的n件物品,和一个承重为W的背包。求这些物品中一个最有价值的子集,并能装到背包中。背包问题的蛮力解法是穷举这些物品的所有子集,找出能够装到背包中的所有子集,并在这些子集中找出价值最大的子集。实验:编写程序,实现背包问题的蛮力算法。并针对以下两个实例,求出能装到背包中的价值最大的子集。要求输出:最优可...原创 2018-09-26 09:35:34 · 17056 阅读 · 6 评论 -
BF KMP以及改进后的KMP
推荐大家看着三篇博客https://blog.youkuaiyun.com/v_july_v/article/details/7041827https://www.cnblogs.com/yjiyjige/p/3263858.htmlhttps://www.cnblogs.com/tangzhengyue/p/4315393.htmlBF#include <iostream>...原创 2018-09-12 22:28:27 · 299 阅读 · 0 评论 -
最短路径——Dijkstra算法
/*0 1 100 3 300 4 1003 4 603 2 201 2 502 4 10*///Geeksun 2018.06.20#include <iostream>#include <String>using namespace std;const int maxSize = 10;const int maxNum = 99999;c...原创 2018-06-20 17:36:25 · 309 阅读 · 0 评论 -
孩子兄弟法建树
//Geeksun 2018.05.13#include <iostream>#include <queue>using namespace std;struct TNode{ char data; struct TNode* firstchild; struct TNode* rightsib;};class Tree{public: Tree(...原创 2018-05-13 10:15:10 · 1684 阅读 · 1 评论 -
关于二叉树的几个基本操作
//输入样例 AB#D##C## 详情见扩展二叉树#include <iostream>using namespace std;enum flag{Child = 0,Thread = 1};//两种枚举类型,表示该节点的指针是指向下一个节点,还是作为线索。struct node{ char data; struct node *leftChild, *rightChil...原创 2018-05-13 10:42:43 · 439 阅读 · 0 评论 -
用数组实现哈夫曼编码
昨天我们班了一场小型的c++数据结构考试,然后博主平时上课也算认真学了吧,但是课后却没有去及时巩固,复习。有许多代码当时能敲出来,却因为缺乏重复的练习,因此敲代码的速度特别慢,而且许多地方都有一些bug。导致昨天有个很简单的huffman编码的问题我都没有解决。所以,今天我又花了一个小时的时间把这个题目再写了一遍,虽然一个小时还是比较长,但是毕竟是我自己独立完成的,没有看任何之前的代码,我也算满意...原创 2018-05-26 09:21:49 · 1395 阅读 · 1 评论 -
用邻接表构造图并遍历
/*输入格式0 10 20 32 31 02 03 03 2*/#include <iostream>using namespace std;const int maxSize = 10;//图的最大容量为10struct ArcNode{ int adjvex;//邻接域 ArcNode* next;};struct VertexN...原创 2018-05-29 15:39:58 · 431 阅读 · 0 评论 -
用邻接矩阵构造图并遍历
/*输入格式0 10 20 32 3*/#include <iostream>using namespace std;const int maxSize = 10;class MyGraph{public: MyGraph(int a[],int n,int e); ~MyGraph(){}; void DFSTraverse(int ...原创 2018-05-29 16:26:33 · 541 阅读 · 0 评论 -
最小生成树——prim算法
/*0 1 340 2 460 5 191 4 124 5 263 4 382 3 172 5 253 5 25*///Geeksun 2018.06.14#include <iostream>#include <string>using namespace std;const int maxSize = 10;const int maxN...原创 2018-06-14 16:43:23 · 261 阅读 · 0 评论 -
最小生成树——Kruskal算法
/*1 4 122 3 170 5 192 5 253 5 254 5 260 1 343 4 380 2 46*///Geeksun 2018.06.14#include <iostream>using namespace std;const int maxSize = 10;struct EdgeType{ int from,to; ...原创 2018-06-14 17:32:12 · 387 阅读 · 0 评论 -
关于删除二叉树子树的两种操作
/*一、 名称:删除二叉树中以x为根的子树 说明:此程序的大部分内容,注释都解释的较为详细了。在这里需要提及一点的是此处递归函数flag传递的不是上篇中讲的引用,而是普通的变量,因为在向下传递参数(当前结点是否是x的信息)的过程中只要传递给对应的子树,并不需要传递给整个树的结点。在下一篇会做个关于递归传递参数的总结。*///递归删除二叉树中以x为根的子树,(flag为标志)int ...原创 2018-05-10 21:00:56 · 5993 阅读 · 0 评论