- 博客(10)
- 收藏
- 关注
原创 详述钢条切割问题--算法导论
我们知道Serling公司出售一段长度为i英寸的钢条的价格为(i=1,2,3......n)钢条的长度为整英寸。价格表样例如:钢条切割问题:给定一段长度为n英寸的钢条和一个价格表,求切割钢条的方案,使得销售收益最大。下面给出4英寸的不同切割方案:长度为n英寸的钢条有n-1个切割点,每个点都可选择切割与不切割,则共有2*2*2......*2*2(n-1个2相乘)=种切割方案。4英寸长度的钢条的最大收益切割为2+2,收益为10。我们从中可以知道。
2024-09-18 21:51:25
1216
1
原创 RED-BLACK TREES(红黑树)--算法导论
如果定义为黑色就违反了性质5每条路径的黑色结点个数相同。因为新节点的默认颜色是红色,因此如果。
2024-08-14 18:08:45
1652
原创 BINARY-SEARCH-TREES(二叉搜索树)
(类似地,先序遍历(preorder tree walk)中输出的根的关键字在其左右子树的关键字之前,而后序遍历(postorder tree walk)输出的根的关键字在其左右子树之后。如果所有的关键字互不相同,则一个结点x的后继是大于x.key的最小关键字的结点。如果x是这颗树中的最大关键字,则返回NULL。通过从树根开始沿着left孩子指针直到遇到一个NULL,我们总能在二叉搜索树中找到最小的元素,同理我们从树根开始沿着right孩子指针直到遇到NULL,我们总能在二叉搜索树中找到最大的元素。
2024-08-09 16:24:30
1039
原创 DIRECT-ADDRESS(直接寻址法) , HASH-TABLE(散列表) and HASH-FUNCTION(散列函数) OPEN-ADDRESSING(开放寻址法)--算法导论
许多应用都需要一种动态集合结构,它至少要支持INSERT,SEARCH,DELETE字典操作,例如,用于程序语言编译的编译器维护了一个符号表,其中元素的关键字为任意字符串,它与程序中的标识符相对应。散列表(hash table)是实现字典操作的一种有效的数据结构。尽管最坏的情况下,散列表中查找一个元素的时间与链表中查找的时间相同,达到了。然而在实际应用中,散列查找的性能是极好的。在一些合理的假设中,在散列表中查找一个元素的平均时间是O(1);
2024-08-08 02:54:57
1015
原创 COUNTING-SORT(计数排序) and
计数排序的基本思想:对每一个输入的元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放到它在输出数组中的位置上了。例如,如果有17个元素小于x,则x就应该在第18个输出位置上。我们假设个数组 A[0...n-1 ], A.length = n, k 为A中最大元素,我们还需要两个数组:B(0...n)存放排序的输出,C[0...k] 提供临时存储空间。计数排序假设n个输入元素(适用于小范围区间)中的每一个都是在0到k区间内的一个整数,其中k为某个整数。当k=O(n)时,排序的运行时间为。
2024-08-05 22:23:00
1747
原创 QUICKSORT(快速排序)--算法导论
挖坑法顾名思义就是挖坑伪代码:x = A[p] //选取A[p]作为主元t = p //坑的下标i = p+1j = rwhile( i!= j )=j ) //找小于等于主元的元素j = j - 1exchange A[ t ] with A[ j ] //找到后填入坑中。
2024-08-04 23:11:18
702
原创 最大子数组问题--算法导论
if sum > left-sum //找出和最大的组合,赋值给left-sum,并且将下标赋给max-left。求左边和右边的最大子数组是在递归中可以由求中间的最大子数组求出,看到后面的分解过程就会明白了,我们主要解决求中间的最大子数组问题。FIND-MAX-CROSSING-SUBARRAY(A, low ,mid , high) //输入数组和左中右的下标。//找到了左边和右边的最大组合,返回左边下标和右边小标以及找出的跨越中间的最大数组的值。//同左边的操作相同。
2024-08-03 21:02:07
1703
原创 MERGE_SORT(归并排序)--算法导论
合并的过程我们大致已经理解了,现在只需要将数组分解就可,由于合并操作必须是两组有序的数组,我们通过二分将原数组一直分割,分割成只有一个元素,分解的过程可使用递归和非递归两种方式。if L[i] <= R[j] //小的元素先进入,假设L先排完,循环不停止,R要排的元素和-根据上图的归并排序可知,相同的元素 2 (绿色和蓝色),在排完序后相对位置没有发生改变,左边的2依旧在左边,右边的2依旧在右边。假设一数组A,p,q,r为数组下标,p为靠左边的下标,q为中间下标,r为靠右边的下标。
2024-08-02 20:11:19
862
原创 INSERTION_SORT(插入排序)
如图,左手的牌是排序好的,右手的牌是将要进行排序的。i = j - 1 // i 为要插入的元素的前一个元素位置。while i > -1 and A[i] > key // 前面有序的元素都比key大插在第一个,或者找到。该算法像是在要匹配的元素位置挖一个坑,把前面比它大的元素往后填,最后把key放在正确的坑位。A[2]的插入方式跟上面情况相同,我们直接开始A[3]的排序。总的运行时间为:T(n)=
2024-08-02 12:07:49
777
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人