随笔分类 - 《算法导论》
摘要:一般散列表都与B+树进行比较,包括在信息检索中也是。确定某条边是否存在需要O(1).不足:(1)散列冲突。(2)哈希函数需要不断变化以适应需求。另外:B+树。(见第18章)与散列表相比的不足:(1)插入需要O(lgn)(2)树要保持平衡。(原文点此,索引目录。感谢xiazdong君 && Google酱。这里是偶尔做做搬运工的水果君(^_^) )
阅读全文
摘要:主对角线:出度+入度其他:arr[i][j]=-n,则i与j之间有n条边.证明:(原文点此,索引目录。感谢xiazdong君 && Google酱。这里是偶尔做做搬运工的水果君(^_^) )
阅读全文
摘要:思路:设置两个游标i指向行,j指向列,如果arr[i][j]==1,则i=max{i+1,j},j++;如果arr[i][j]==0,则j=max{i+1,j+1}。伪代码:has_universal_sink() for i=1 to N //对角线检查是否全是0 if A[i][i]==1 return false; i=1,j=2 while(i<=N && j<=N) if(A[i][j]==1) i=max{i+1,j} j++ else ...
阅读全文
摘要:一、邻接矩阵实现思路:如果是邻接矩阵存储,设邻接矩阵为A,则A*A即为平方图,只需要矩阵相乘即可;伪代码:for i=1 to n for j=1 to n for k=1 to n result[i][j]+=matrix[i][k]*matrix[k][j];算法复杂度两个n维数组相乘,因此复杂度为O(V^3),当然可以通过Strassen算法稍加改进.扩展:这种方法的作用是比如求u到v路径长度为k的路径数目,只需要求A^k,然后[u][v]即可。算法正确性分析命题:给定两点i,j,i,j路径长度为r的路径数目等于A^r[i][j].数学归纳法证明,当n=1时,A[i][j]表...
阅读全文
摘要:思路:重开一个新图,按着邻接列表的顺序从上到下遍历,每遍历一行链表前,清空visited数组,如果没有访问过这个元素,则加入新图,如果已经访问过了(重边),则不动。伪代码:复杂度:O(V+E)for each u 属于 Vertex visited[u] = false;
for u 属于 Vertex visited[u] = true; for v 属于 Adj[u] if(!visited[v]) Adj1[u].insert(v); visited[v] = true; for v 属于 Adj[u] visited[v]=fals...
阅读全文
摘要:链表如图:矩阵: 1 2 3 4 5 6 7
1 0 1 1 0 0 0 0
2 1 0 0 1 1 0 0
3 1 0 0 0 0 1 1
4 0 1 0 0 0 0 0
5 0 1 0 0 0 0 0
6 0 0 1 0 0 0 0
7 0 0 1 0 0 0 0(原文点此,索引目录。感谢xiazdong君 && Google酱。这里是偶尔做做搬运工的水果君(^_^) )
阅读全文
摘要:开始学习《算法导论》了,虽然是本大部头,可能很难一下子看完,我还是会慢慢地研究的。课后的习题和思考有些是很有挑战性的题目,我等蒻菜很难独立解决。然后发现了Google上有挺全的algorithmssolution的site(目测by xiazdong大神)。但竟然要FQ实在是难以接受。于是我决定开坑!把它们慢慢地搬运过来,当然这之中我会从中学习并好好研究的。我会慢慢更新搬运过来的地址的,这是一个大坑,请容我慢慢填。Chapter 22.1-1(入度和出度)Chapter 22.1-2(邻接矩阵与链表)Chapter 22.1-3(转置图)Chapter 22.1-4(去除重边)Chapter
阅读全文
摘要:(搬运)《算法导论》习题解答 Chapter 22.1-1(入度和出度)思路:遍历邻接列表即可;伪代码:for u 属于 Vertex for v属于 Adj[u] outdegree[u]++; indegree[v]++;源代码:package C22; import java.util.Iterator; public class C1_1 { static int[] indegree; static int[] outdegree; static Adjacent_List g; public static void main(St...
阅读全文