摘要:看了佳爷才有思路的,这也是算法导论的dp课后练习--贴代码,用内置数组ac了,而思路相同的vector并没有过,在本地的两个测试样例都没有问题,不知道哪里出错,还用vector试了一下不等长的二维数组,结果wa,这里开心(捂胸口状 ac vector实现
阅读全文
摘要:贴代码,总觉得这个和LCS十分的神似,特别是递推式,除了打印答案的判断那边要把m[i][j] == m[i + 1][j - 1] + 2换成s[i]==s[j]。考虑"noni"的情况,m[0][3]==m[1][2]+2,然而并不是打印s[0]和s[3],所以应该限制条件为s[i]==s[j],
阅读全文
摘要:感觉这个比较妙的主要是状态的定义,e[i][j]表示在k[i-1]和k[j+1]之间的关键字(全开区间)作为一颗有根树的最小搜索代价,w[i][j]表示在k[i-1]和k[j+1]之间的关键字(全开区间)的概率之和,同时也把e[i][i-1]和w[i][i-1]的情况包括进去了,即伪节点的概率,除了
阅读全文
摘要:lis的实现有三种,一种是简单的O(n^2)的dp,第二种是转化为lcs,用原序列排序后得到一个有序的序列,并求两序列的最长公共子序列。这种可以比较方便地打印出答案,复杂度也是O(n^2)。最后是维护一个为某个长度时该长度序列的最后一个数可取的最小值,用了二分查找将复杂度降到O(nlogn)。
阅读全文
摘要:标题有点累赘,好像无环就可以保证绝对简单了,下面给出代码的实现 LongestPath.h 这是借鉴某博客的,后面追根溯源找到了https://www.geeksforgeeks.org/find-longest-path-directed-acyclic-graph/ 一开始的想法是好好学习(照着
阅读全文
摘要:做过简单的测试,应该没什么大问题。想想算法导论这部分看了很久,又撸过AVL写起来还是有点小迷糊,也在迷糊中学了点东西。总之继续吧 Rb_tree.h test.cpp
阅读全文
摘要:勉强算CLRS的课后题,就贴在这了 想不到勉强看懂了算法导论红黑树代码和证明后撸个AVL看别人的代码(有错)都要撸6小时(算上简单的调试),贴代码,不想解释原理,欢迎怼错= AvlTree.h AvlTreeTest.cpp 只做了几组简单的测试,发现的小问题都改了,当然可能还有错,望告知,虚心接受
阅读全文
摘要:首先声明,我的代码基本是照着www.cnblogs.com/skywang12345/p/3638342.html打的,感谢分享。 不过我的疑问是在实现merge时提供的形参为何要加引用,一开始傻乎乎地觉得这样才能真正改动内部指针成员,知道去掉引用run了一把才知道不加引用也能实现合并,加引用除了减
阅读全文
摘要:qselect模拟快排查找某个顺序统计量(下面简称为key),事实上可以说是找出前i个较小的数。最后一次调用partition把小于key(假设元素互异)的元素都放到了key前面,不过是无序的,算法复杂度的期望是O(n)。
阅读全文
摘要:1 #include 2 #include 3 #include//the hearder file of shared_ptr 4 #include 5 #include 6 #include 7 #include 8 //#include 9 #include 10 11 using namespace std; 12 13 void cnt_sort(in...
阅读全文
摘要:排序算法之前都实现过,就当练练手吧。不过见识了快排的尾递归写法
阅读全文
摘要:之前其实就写过堆排序了,这次主要想用class封装起来试一试,C++小白写得比较简陋,多担待。 后面用最大堆模拟了一下k路归并,这是算法导论的一道思考题,经过别人的启发勉强实现了一下,感觉有想法就去做吧,别害怕啥,另外,看得懂的代码也不一定就真的敲得出来,还是要多code,不然就要被更多的人碾压了。
阅读全文
摘要:上面是基础部分的几个排序算法,当练练手,概率和随机算法看不太下去,以后再来(嘻
阅读全文