数据结构
文章平均质量分 73
HGGshiwo
这个作者很懒,什么都没留下…
展开
-
ADS11 Approximation
Approximation Ratioapproximation ratio: 较优解和最优解的比值或者倒数的最大值小于它。ρ\rhoρ(n)-approximation algorithm:有近似率的算法。approximation scheme:较优解和最优解的比值是1+ϵ\epsilonϵPTAS: 复杂度n是多项式级别的。FPTAS: 复杂度n和1/ϵ1/\epsilon1/ϵ都是多项式级别的。Approximate Bin Packing将Si大小在0-1之间,bin的大小为1,问最原创 2021-06-30 22:02:27 · 223 阅读 · 0 评论 -
[题解]ADS12LocalSearch
1.In local search, if the optimization function has a constant value in a neighborhood, there will be a problem.T2.Greedy method is a special case of local search.F3.Random restarts can help a local search algorithm to better find global maxima that ar原创 2021-06-30 22:02:04 · 1233 阅读 · 0 评论 -
ADS12LocalSearch
Metropolis Algorithm在邻域中寻找,如果结果更优,则更新状态。如果结果不是更优,有一定概率更新状态。Vertex Cover Problem.找到最小子图S,使得图中所有的边至少有一个点在S中。随机删除或者增加一些点,如果cost变小,则将更新解集S,如果变大,则有一定概率更新解集。注意删除了点,边并没有消失,如果边的两个点都被删除,则是不允许的。Hopfield Neural Networks给图中的点进行标注state,1或者-1,如果边的权值小于0,则两个点倾向于相同的原创 2021-06-30 20:39:52 · 362 阅读 · 0 评论 -
[题解]ADS10 NP-Completeness
1.If L1 ≤p L2 and L2∈NP, then L1∈NP.T注意<=p等价于reduce to,复杂的如果是Np,那么简单的也是NP2.All NP-complete problems are NP problems.T3.All the languages can be decided by a non-deterministic machine.F不确定图灵机可以用来验证NP问题的解是否是正确的,确定图灵机可以用来求解P问题。NP hard问题无法通过不确定图灵机.原创 2021-06-30 20:38:45 · 2250 阅读 · 1 评论 -
[题解]Lecture 9. Greedy Algorithms
1.Greedy algorithm works only if the local optimum is equal to the global optimum.T,只有在局部解和全局解相等的时候可以用2.In a greedy algorithm, a decision made in one stage is not changed in a later stage.T,做出选择后不会改变...原创 2021-06-30 17:26:43 · 676 阅读 · 0 评论 -
[题解]Lecture 11. Approximatio
1.An approximation scheme that runs in O(N23ϵN^23\epsilonN23ϵ)for any fixed is a polynomial-time approximation scheme.T如果n是多项式就可以。2.An 1+ϵ1+\epsilon1+ϵ-approximation scheme of time complexity (n+1ϵ)3(n+\frac1\epsilon)^3(n+ϵ1)3 is a PTAS but not an F原创 2021-06-01 10:46:56 · 339 阅读 · 0 评论 -
ADS10 NP-Completeness
TURING MACHINE:Infinite Memory, finite stateNondeterministic Turing Machine: 可以自由选择下一步是什么Deterministic Turing Machine:下一步是什么是不确定的NP:任何解都可以在多项式时间内得到NP-Complete Problems:所有NP问题可以归约为NPC问题如果问题A可以在多项式时间中转换为问题B,问题B是NP,那么问题A是NPabstract problem: 是从问题集合I到解集合S原创 2021-05-25 08:47:03 · 121 阅读 · 0 评论 -
ADS09 Greedy Algorithms
只是局部最佳,不是全局最佳贪心策略:制定一个贪心策略,然后对当前的选项选一个,然后解决剩下的子问题。Activity Selection Problem给定两个数组,分别存储这第i个元素开始和结束的时间。求最多完成几个任务。方法:总是找最先结束的,但是不能覆盖已经在解集中的。复杂度O(NlogN)如果每件事有权值,则贪心错误,但是DP还是正确的。DP的递推式:c[1,j]=max{c[1,j-1],c[1,k(j)]+1}c是可以做的事情件数Huffman Codes要求给字符编码,字原创 2021-05-17 23:47:35 · 119 阅读 · 0 评论 -
ADS期中抱佛脚
1.avl tree:插入看根的三代,是RR还是LL还是RL还是LR,如果是LR的,则最下面的节点作为中间节点,如果是RR,则左右互换。要求通过左右子树到叶子的路径长度相差不超过12.splay tree:要求访问一次就换到根上插入或者访问如何换到根上:该节点往上看三代,如果是RL或者LR,则换到中间如果是LL或者RR,则倒过来连。子树的连接,全部看如何满足二叉树。复杂度总结:树复杂度avlO(logN)splay摊销均为O(logN)binominal原创 2021-05-09 20:55:40 · 148 阅读 · 0 评论 -
[题集]Lecture2.Red-Black Trees and B+ Trees
1.A 2-3 tree with 3 nonleaf nodes must have 18 keys at most.一个叶子节点最多放3个值,然后是两个节点指向3个叶子,然后是一个根指向两个节点。那么一共有2*3个叶子,一个叶子存放3个key,一共18个.注意key只算叶子上的。T2.In the red-black tree that results after successively inserting the keys 41; 38; 31; 12; 19; 8 into an initi原创 2021-05-03 23:05:55 · 2059 阅读 · 0 评论 -
[题集]Lecture3. Inverted File Index
1.In distributed indexing, document-partitioned strategy is to store on each node all the documents that contain the terms in a certain range.磁盘分区索引技术,每个节点存放部分索引,不是所有的。F2.When evaluating the performance of data retrieval, it is important to measure the r原创 2021-05-02 11:31:12 · 1718 阅读 · 1 评论 -
[题集]Lecture 5. Binomial Queue
1.Which of the following binomial trees can represent a binomial queue of size 42?A.B0 B1 B2 B3 B4 B5B.B1 B3 B5C.B1 B5D.B2 B442用二进制表示就是B2.Delete the minimum number from the given binomial queues in the following figure. Which one of the following sta原创 2021-05-01 21:26:09 · 1064 阅读 · 0 评论 -
[题集]Lecture 6. Backtracking
1.It is guaranteed that an exhaustive search can always find the solution in finite time.F就是遍历整个树的搜索。我猜可能是不一定能找到solution2.In the 4-queens problem, (x1, x2, x3, x4) correspond to the 4 queens’ column indices. During backtracking, (1, 3, 4, ?) will be che原创 2021-05-01 18:52:31 · 1505 阅读 · 1 评论 -
[题集]Lecture 8. Dynamic Programming
1.To solve a problem by dynamic programming instead of recursions, the key approach is to store the results of computations for the subproblems so that we only have to compute each different subproblem once. Those solutions can be stored in an array or a h原创 2021-05-01 18:09:01 · 841 阅读 · 0 评论 -
ADS08 Dynamic Programming
动态规划DP,就是用分治的方法,但是记录下小问题的解,减少重复计算。Fibonacci Numbers问题描述计算:T(N) = T(N-1) + T(N-2)解法1.令NextoLast = T(0), Next = T(1)2.计算T(i) = NextToLast + Next3.更新Next = NextToLast, NextToLast = T(i)4.重复N次。这个算法需要记录的只是最近的两次。复杂度为O(N)int Fibonacci ( int N ) {原创 2021-04-20 09:44:57 · 104 阅读 · 0 评论 -
理解回溯
解决的问题很难靠循环枚举解决(比如具有不确定的循环次数)循环解决效率太低可以用决策树表示算法理解回溯算法本质上是一个暴力DFS。DFS的对象是决策树。因此如果一个问题可以用决策树表示,那么可以用回溯解决。算法过程递归:使用函数DFS(node)1.如果node达到终止状态,进行验证。如果可行加入解集。退出。2.如果node未达到终止状态,执行DFS(sibling),sibling是DFS的所有未遍历过的兄弟。循环:使用栈1.将第一步所有可能入栈。2.如果栈空则退出,返回fals原创 2021-04-08 23:09:57 · 254 阅读 · 0 评论 -
ADS5 Binomial Queue
二项式队列1.对于Bk根节点孩子的数量:kkk节点的总数:2k2^k2k深度为d的节点的数量为:C(k,d)C(k,d)C(k,d)总的深度为:k+1k+1k+1构造Bk就是把两个Bk-1合并起来。父节点比孩子要小。2.n个节点用二项式树的组合表示:将n写作二进制数,二进制为1的位,说明需要一棵Bk比如13=1101,需要B0,B2,B33.FindMin遍历根的所有孩子,找到最小的4.Merge两个森林Merge:从低位开始,对应位的Bk Merge,变为Bk+1Bk的me原创 2021-03-28 11:25:30 · 124 阅读 · 0 评论 -
[题集]Lecture 4. Leftist Heaps and Skew Heaps
Lecture 4. Leftist Heaps and Skew Heaps1.A leftist heap with the null path length of the root being r must have at least 2r+1−12^{r+1}-12r+1−1 nodes T用递归:假如r成立,则对r+1,右路径r个点,则右子树有2r+1−12^{r+1}-12r+1−1个点。而左子树Npl至少也为r,则左子树的右路径至少r,则左子树至少2r+1−12^{r+1}-12r+1原创 2021-03-23 08:39:52 · 3092 阅读 · 0 评论 -
ADS4 Leftist Heaps and Skew Heaps
Leftist HeapsNpl(X)将树最外侧看成海岸线,离海岸线经过的节点数。Npl(leaf)=0Leftist Heap1.order property:要求满足父亲小于任何一个子节点。2.Structure Property:要求是二叉树即可3.leftist heap property:任意一个节点,左子节点的Npl大于等于右子节点A leftist tree with r nodes on the right path must have at least 2^r – 1 n原创 2021-03-20 21:04:02 · 422 阅读 · 0 评论 -
ADS3 Inverted File Index
Term-Document Incidence Matrix行代表关键词,列代表了第几个文档。如果关键词存在这个文档,则为1,否则为0.形成一个矩阵。Inverted File IndexIndex is a mechanism for locating a given term in a text.Inverted file contains a list of pointers (e.g. the number of a page) to all occurrences of that term原创 2021-03-13 20:03:15 · 259 阅读 · 0 评论 -
ADS2: Red-Black Trees and B+ Trees
红黑树对BST进行约束,使得树高在一定的复杂度之中。分为红黑节点,黑节点增加了对树的约束,红节点使得数据结构不是那么严格。规定根一定是黑的,空指针NIL一定是黑的。对黑节点的约束:对于每个点,从该点出发到达叶子经过的所有路径中黑节点个数必须相同对于红节点的约束:不能有连续的两个红节点判断判断能否成为红黑树:看每个节点到叶子的黑节点个数能否相等。注意其实所有的叶子都是一个external节点,且是黑的,实际上数的时候不考虑进去。由于3右侧到叶子黑节点为0,因此左侧为0,发现12是连续红节点,原创 2021-03-07 22:07:11 · 242 阅读 · 0 评论 -
快速判断BST节点大小
遇到AVL树或者红黑树做调整的时候,如果能够快速判断出节点的大小,无疑是十分有利的。鄙人想了一个方法是:1.最左侧的节点总是最小的,最右侧的节点总是最大的。2.判断出一个最大或者最小以后,将这个点删掉,它的子节点代替它的位置。3.重复1直到所有的节点都判断完成。注意如果子树水平方向画的时候不要超过根,就是左子树画在根的左侧,右子树画在根的右侧。看一个例子:可以得到最小的是D可以得到D<B,再将B删掉以后把E接上去依次可以得到:D<B<H<E<A<F原创 2021-03-05 23:27:29 · 106 阅读 · 0 评论 -
ADS1:AVL Trees, Splay Trees, and Amortized Analysis
AVL树:struct property:BST,满足左节点小于根小于右节点,子树为BSTorder property:要求左子树和右子树的高度之差不超过2高度:空子树高度为-1,1个节点高度为01.高度计算高度为h的最小节点数:左侧为nh−1n_{h-1}nh−1,右侧为nh−2n_{h-2}nh−2或者互换,因此递推式为:nh=nh−1+nn−2+1n_h=n_{h-1}+n_{n-2}+1nh=nh−1+nn−2+1结果为:nh=Fh+2−1n_h=F_{h+2}-1nh=Fh原创 2021-03-05 20:59:44 · 385 阅读 · 0 评论 -
诚信守则答案
H-1本人有义务保护好自己的帐号和密码。I have a responsibility to protect my account number and password.H-18【真实案例】学生A把自己独立完成的作业代码放到开源社区,第二年被学生B抄袭。A和B都应被判作弊。【Real Case】Student A completed his homework independently, and released his code as open source. The next year, s原创 2021-03-02 16:31:42 · 2724 阅读 · 1 评论 -
数据结构考前总结
1.算法分析1.O(N)是上界,Ω(N)为下界,Θ(N)为常数倍2.列表1.链表中的二分法复杂度大于O(NlogN)3.栈和队列1.prefix和infix和postfix是树的三种遍历方式,变量在叶子结点,而运算符号在非叶子结点。index->postfix:遇到字母直接输出,遇到符号:要求栈顶的优先级是最高的,如果不满足,就出栈,直到满足为止。然后该符号入栈。括号的优先级栈外最高,栈内最低。遇到右括号,出栈直到左括号4.二叉树1.二叉树最方便的方法就是画一个特例验证2.二叉搜索原创 2021-01-30 08:38:38 · 739 阅读 · 1 评论 -
数据结构1:算法复杂度分析
复杂度分析声明的赋值度: 无每条赋值的复杂度:1每条判断的复杂度:1判断的分支:计算所有情况中复杂度较大者返回return的复杂度:1但是注意若一个函数中有多个return ,执行时只执行其中一个,只能算一次。若返回return中仍有表达式,不算复杂度float rsum ( float list[ ], int n ){ /* add a list of numbers */ if ( n ) //判断 1 return rsu原创 2020-10-25 12:12:20 · 6660 阅读 · 5 评论 -
数据结构2 List
Array操作时间复杂度查找第K个O(1)插入O(N)删除O(N)Linked List操作时间复杂度查找第K个O(N)插入O(1)删除O(1)数据结构:结点内部存放数据和下一个结点的指针,结点没有名字,只能通过指针访问。(有名字的是结点的指针)结点两种方法可行typedef struct Node* Nodeptr;struct Node{ int element; Nodeptr next;};原创 2020-10-25 16:51:18 · 2686 阅读 · 0 评论 -
数据结构3 Stack and Queue
数列实现栈struct StackRecord { int Capacity ; /* size of stack,栈的大小 */ int TopOfStack; /* the top pointer ,栈顶位置,-1表示空栈*/ ElementType *Array; /* array for stack elements,存放栈的元素的数组 */ } ; 存放栈的大小,栈顶位置,栈的数组push,pop前都必须要检查是原创 2020-10-25 17:37:03 · 3827 阅读 · 0 评论 -
数据结构4 Tree
Tree的定义tree中没有Loop,故每一个结点都是subtree,所以访问多按照递归。n个Tree结点,有n-1条边。degree of node:结点孩子的个数degree of Tree:所有结点中最大的degree of nodeparent:一个拥有子树的结点chird:子节点sibling:拥有相同的parentleaf :没有childpath:从一个结点到另一个结点的路径length of path :一个路径经过的边depth:root到该结点的路径长度(由于根在最原创 2020-10-25 18:56:02 · 5122 阅读 · 3 评论 -
数据结构5 Binary Search Tree
Binary Search Tree定义1.是二叉树2.左孩子<根<右孩子3.左右子树都是BST操作1.寻找元素X递归法:Position Find( ElementType X, SearchTree T ) { if ( T == NULL ) return NULL; /* not found in an empty tree */ if ( X < T->Element ) /* if smaller原创 2020-11-22 18:59:32 · 8259 阅读 · 0 评论 -
数据结构6 Heap
定义1.是一个二叉树2.是满二叉树,但是如果多出来元素,必须在最后一层左侧依次开始填充3.任意一个结点到叶子结点,必须是递减(max heap)或者递增(min heap)的,性质1.堆可以用一个数组来存储,用level order遍历后存放。第0个元素是空的,然后按照1+2+4+…的方式存放0123456…空ABCDEF…2.对于第i个元素父节点是i/2左孩子是i*2右孩子是i*2+13.堆顶是最大或者最小的元素操作1.插入元原创 2020-11-22 21:51:00 · 3104 阅读 · 0 评论 -
数据结构7 Disjoint Set
定义如果K中元素k和M中元素m满足二元关系kRm,则说明K和M是同类集。对于元素i,用a[i]记录它的根,若a[i]=0,则说明它是根。根就是集合的一个代表,若与根是同类,则元素就在该集合中。操作...原创 2020-11-28 21:40:14 · 3199 阅读 · 0 评论 -
数据结构8 Graph
定义不能有自环,无向图任意两个顶点之间不能有两条边Complete graph:完全图,拥有最大的边数无向图 E=C(V,2)有向图 E=2C(V,2)connected:联通,任意两个顶点都有一条路径相连。Strongly connected:强联通,对于有向图,任意两个顶点必须有路径使得v->w,w->v边数最小的联通图是树,E=V-1Simple path:路径中的点是不同的。Connected Component:联通分量,即一个图中联通的部分。degree:度数,一原创 2020-11-28 19:46:45 · 5873 阅读 · 1 评论 -
数据结构9 最短路径
定义1.假如一条边有权重,或者称为距离,要求某一个点(称为源点)到某个点的最短距离。实现1.无权图广度优先算法这个算法的思路是在当前长度为i的时候,访问所有距离源点为i且之前没有被遍历的点。可以确定这些点离源点的最短距离就是i,否则之前就应该被经过了。因此与其相邻未被经过的点的最短距离是i+1。这个算法用距离无穷表示之前没有遍历,又用kown来表示,感觉多写了。void Unweighted( Table T ){ int CurrDist; Vertex V, W;原创 2020-12-01 19:46:18 · 1066 阅读 · 1 评论 -
数据结构10 Network Flow Problems
问题描述:在一个有向图中,给定源点和目标点,给定每一条边能通过的流量,求通过源点最大的流量。解法:Gf:流量图,Gr:余量图初始时Gf为空,Gr和G相同。1.选择路径:在图Gr任意选择一条源点到目标点的路径,2.更新Gf:在Gf中添加该路径,路径的流量由最小流量确定3.更新Gr:如果路径中的一部分为为a->b,整条路径的最小流量为q,a->b本身的流量为p,则Gr中添加b->a,流量为q,a->b流量更新为p-q(如果为0就删去a->b)4.重复1,原创 2021-01-10 11:51:58 · 4452 阅读 · 0 评论 -
数据结构11 DFS&Insert Sort
DFS按照深度优先遍历一张图无向图:input:源点根V1.visit[V]=True2.对于所有与V邻接的点,if ( !visited[ W ] ) DFS( W );复杂度为O(E+V)articulation point:删除后联通分量会增加biconnected graph :G是联通的,且没有衔接点biconnected component:最大的双连通子图寻找衔接点:1.使用DFS生成树,但是不在树中的边需要用虚线加入到树中(back...原创 2021-01-10 18:39:00 · 4799 阅读 · 0 评论 -
数据结构12 SellSort&MergeSort
Shellsort1.确定一个递减的序列2.对于序列第i个元素hi,从数组的头开始到尾,总是对j,j+hi,j+2hi,...排序3.对于整个序列,重复2最差情况O(N^2),如果使用希尔递增,最坏和平均都可以减小到O(N)和O(N^2)之间的一个值Heapsort1.对于数组,对第n/2个元素到第1个元素执行PercDown操作(总是选一个最小的孩子和它交换,直到叶子或者孩子都比它大)2.将最小的元素删除,最后一个元素放入堆顶,进行PercDown操作3.把删除的元.原创 2021-01-10 17:48:52 · 3360 阅读 · 0 评论 -
数据结构13 Quick Sort&Bucket Sort
Quick Sort3-mid算法:Qsort输入left,right1.对三个元素:a[left],a[right],a[(left+right)/2]进行排序,如果中间值为a[k],则pivot = a[k]2.Swap(&a[k],&a[right-1])3.i从left开始寻找大于pivot的元素,j从right-1寻找小于pivot的元素4.若i<j,S(&a[i],&a[j]),否则退出5.Swap(&a[i],&a原创 2021-01-10 20:41:57 · 7077 阅读 · 0 评论 -
7-1 ZigZagging on a Tree (11分)
Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and inorder traversal sequences. And it is a simple standard routine to print the numbers in level-order. However原创 2020-10-20 12:56:44 · 1952 阅读 · 0 评论 -
Bonus-1 Merging Linked Lists (20分)
Given two singly linked lists L. If n≥2m, you are supposed to reverse and merge the shorter one into the longer one to obtain a list like a ⋯. For example, given one list being 6→7 and the other one 1→2→3→4→5, you must output 1→2→7→3→4→6→5.Input Specifi原创 2020-10-01 21:33:15 · 766 阅读 · 4 评论