数据结构与算法
Jerry_xl
2015年毕业于哈尔滨工业大学
本科在企业智能实验室,进行情景感知相关学习
硕士在自然计算实验室,进行机器学习、并行深度计算平台相关研究和学习
目前在阿里巴巴-人工智能实验室-W实验室
展开
-
向二叉树中插入节点
就是为新插入的数据找一个适合的位置java 实现:public void insert(int el){IntBSTNode p=root,prev=null;while(p!=null){ prev=p;if(p.keyp=p.right;else p=p.left;} if(root==null){root=new IntBST原创 2012-03-04 10:49:55 · 777 阅读 · 0 评论 -
关于原地归并排序的进一步阐释——手摇法
自从看了别人的博客中的关于归并排序的O(1)空间复杂度的实现方式之后,觉得阐述的不是很明白,自己看了好久才看明白。至于具体代码和实现方式在上一篇转载的文章中已经写得蛮详细的了,又找了一篇论文看了看里面的难点——手摇法。在这里写一些自己的理解。所谓手摇法, 即是将两个需要交换的向量各自旋转, 成一个中间向量, 然后再旋转这个中间向量即可实现两个向量的交换. 比如这两个向量我们分别表示为(FS),原创 2012-05-07 19:27:08 · 1529 阅读 · 0 评论 -
原地归并算法(空间复杂度为O(1)的归并排序)
转:http://www.cppblog.com/converse/archive/2008/09/28/63008.html 归并排序算法(mergesort)是将一个序列划分为同样大小的两个子序列,然后对两个子序列分别进行排序,最后进行合并操作,将两个子序列合成有序的序列.在合成的过程中,一般的实现都需要开辟一块与原序列大小相同的空间,以进行合并操作,归并排序算法的示例在这里.转载 2012-05-07 15:23:06 · 7277 阅读 · 5 评论 -
单词搜索迷宫游戏
我们在杂志上,经常能够看到找单词的小游戏,在一个二维表格中,存在各种字母,我们可以从八个方向找单词。这个用计算机处理十分方便,但是,算法的好坏很重要,因为要是用蛮力算法实现,那么耗费的时间是不可想象的。这是数据结构与问题求解Java语言描述一书中给的实现思路完整代码如下,注释写的很明白了import java.io.BufferedReader;import java.io.Fil原创 2012-04-10 17:40:19 · 1395 阅读 · 0 评论 -
字符串 逆序
递归方法求解public static String reverseString(String x){ if(x==null || x.length() return reverseString(x.substring(1,x.length()))+ x.charAt(0);}原创 2012-04-04 22:24:32 · 481 阅读 · 0 评论 -
约瑟夫问题求解
据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假原创 2012-04-04 20:04:58 · 931 阅读 · 0 评论 -
几种排序算法的实现及简单分析
package test;public class first {/*普通的插入排序*/public void insertSort(int[] list) {int i, j;list[0] = -999;//相当于设置一个监视哨兵,不用判断是否越界,但要求数组从第二个数开始即i=1开始存储for (i = 1; i j = i;while (list原创 2012-03-12 17:04:52 · 390 阅读 · 0 评论 -
快速排序
快速排序Java代码 public class Quick { public static int[] Data = { 9, 8, 7, 4, 1, 12, 15, 63, 15, 20 }; public static void quick(int left, int right) { int i, j; int Pivot; int temp; i原创 2012-03-10 23:32:25 · 363 阅读 · 0 评论 -
基本排序算法
选择排序将要排序的对象分作两部份,一个是已排序的,一个是未排序的,从后端未排序部份选择一个最小值,并放入前端已排序部份的最后一个,例如:排序前:70 80 31 37 10 1 48 60 33 80[1] 80 31 37 10 70 48 60 33 80 选出最小值1[1 10] 31 37 80 70 48 60 33 80 选出最小值10[1 10 31] 3原创 2012-03-24 23:32:32 · 380 阅读 · 0 评论 -
Warshall算法求传递闭包
求一个邻接矩阵的传递闭包其实算法与Floyd算法大致相似,只是把最后的一行适当的调整就可以了void Warshall(A,C,n){for(int i=1;ifor(int j=1;j A[i][j]=C[i][j];for(k=1;kfor(i=1;i for(j=1;jA[i][j]=(A[i][k]逻辑乘A[k][j])逻辑加A[i][j];原创 2012-03-06 21:23:46 · 1348 阅读 · 0 评论 -
求闭包的Warshall算法
求一个邻接矩阵的传递闭包其实算法与Floyd算法大致相似,只是把最后的一行适当的调整就可以了void Warshall(A,C,n){for(int i=1;ifor(int j=1;j A[i][j]=C[i][j];for(k=1;kfor(i=1;i for(j=1;jA[i][j]=(A[i][k]逻辑乘A[k][j])逻辑加A[i][j];原创 2012-03-06 21:22:43 · 891 阅读 · 0 评论 -
求任意两点间的最短路径
求图中的任意两点间的最短距离,我们可以简单的n次调用Dijikstra方法,虽然算法的效率也是N的三次方,但是用Floyd算法更简洁,执行起来比前者更高效void Floyed(A,C,n){for(int i=1;ifor(int j=1;j A[i][j]=C[i][j];for(k=1;kfor(i=1;i for(j=1;jif(A[i][k]+A[原创 2012-03-06 21:18:18 · 1097 阅读 · 0 评论 -
单元最短路径
单元最短路径的最常用的算法就是Dijkstra算法,这是一种按照路径长度递增次序,逐步产生的贪心算法。假设图用邻接矩阵表示:大致思想就是将,顶点划分为两部分:S和V-S,每次从V-S中选择一个w加入s使得S中从原点出发到达其余的顶点最短,循环执行,直到V-S为空。伪代码:void Dijikstra(Grapic C){S={1};for(int i=2;i<=n;i++)D[i]=C[1][i]原创 2012-03-06 21:11:42 · 1014 阅读 · 0 评论 -
删除二叉树中的节点——归并删除法
实现的思想很简单:first:找到要删除的节点second:如果删除的节点没有右子树那么左子树链到父节点third:如果删除的节点没有左子树那么右子树链到父节点forth:如果删除的节点又左右孩子,那么可以归并删除节点后的子树:方法有两种一种是用删除节点的左子树的最右节点,指向删除节点的右子树,另一种是用删除节点的用字数的最左节点指向删除节点的左子树。Java 实现如下:p原创 2012-03-04 11:50:09 · 1393 阅读 · 0 评论 -
在二叉树中删除一个节点——归并删除法
实现的思想很简单:first:找到要删除的节点second:如果删除的节点没有右子树那么左子树链到父节点third:如果删除的节点没有左子树那么右子树链到父节点forth:如果删除的节点又左右孩子,那么可以归并删除节点后的子树:方法有两种一种是用删除节点的左子树的最右节点,指向删除节点的右子树,另一种是用删除节点的用字数的最左节点指向删除节点的左子树。Java 实现如下:p原创 2012-03-04 11:49:03 · 2886 阅读 · 0 评论 -
笔试面试中关于排序算法看这里就够了
排序算法应该是我们最为熟悉的算法,从最基础的《数据结构与算法》到《算法导论》都有涉及。在笔试和面试中,基本上都会有所涉及,统计百度、阿里、腾讯的近三年的算法、研发的笔试题中都有对排序算法的考察。虽然实际工作中让你写基础排序算法的可能性较少,但对于笔试和面试,你都需要牢牢掌握排序算法的如下相关知识:原理:必须清楚、简洁的回答原理相关问题;复杂度:掌握每个算法的时间复杂度;稳定性:要了解算法的稳定性原创 2016-07-31 12:05:06 · 4698 阅读 · 0 评论