![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
张鑫的blog
CSer
展开
-
最大子数组问题
问题描述:输入一个具有n个元素的数组x,输出该数组中任何连续子数组中的最大和(为使问题定义更加完整,规定当所有元素均为负数时,总和最大的子数组是0)。该问题在算法导论和编程珠玑中都出现过,算法导论中给出的事采用分治策略,用递归法解决的:初始问题是要处理大小为n的数组,所以将它划分为两个大小近似相等的子数组,分别称为a和b。然后递归的找出a、b中元素总和最大的子数组,分别称为Max(a)和Max(b原创 2016-01-27 16:14:53 · 421 阅读 · 0 评论 -
优先级队列——PriorityQueue
优先级队列提起优先级队列,首先想到了操作系统中的作业调度算法的相关应用,还有就是解决 Top n (一个集合中最大或最小的n的元素)之类的问题。操作系统中的作业调度有短作业优先(SJF)、先来先服务(FCFS)、时间片轮转法、优先级法等。其中,优先级法可以近似看成是利用了优先级队列,根据作业的优先级来从作业队列中选择下一个将要执行的作业。而Top n之类的问题也是这样。优先级队列可以用 * 堆 *原创 2016-02-10 22:17:05 · 437 阅读 · 0 评论 -
二叉搜索树的搜索、插入、后继、删除
二叉搜索树二叉搜索树是以二叉树是形式表示的,这样就可以使用一个二叉链表来表示二叉搜索树了。对于任何结点x,其左子树的关键字的值不大于x.key,右子树的关键字不小于x.key。二叉搜索树支持Insert、Delete、Search、Maximum、MInimum、Predecessor(前驱结点)、Successor(后继结点)等操作。二叉搜索树的基本操作与树的高度成正比,对于一个有n个结点的完原创 2016-02-17 15:13:07 · 754 阅读 · 0 评论 -
计数排序——CountingSort
计数排序计数排序是线性排序的一种。能够在线性时间内完成给定序列的排序,但计数排序应用的场景就更加具体了。基本思想:对每一个输入的元素x,确定小于x的元素个数。这样就可以直接把x放到它在输出数组中的位置了。例如,有17个元素小于x,则x应在第18个输出位置上,但当有几个相同元素时,就要略加修改。下面是算法导论中给出的伪代码:COUNTING_SORT(A, B, k) let C[0...k原创 2016-02-03 22:15:44 · 422 阅读 · 0 评论 -
堆排序——HeapSort
堆排序:堆排序与归并排序的时间复杂度一样,同为O(nlogn),但与归并排序不同的是,堆排序具有空间原址性:任何时候都只需要常数个额外的空间存储临时数据。堆的定义:(二叉)堆是一个数组,可以被看成是一个近似的完全二叉树。树上的每个结点对应数组中的一个元素。除了最顶层外,树应该是充满的,且为从左向右填充。二叉堆通常分为两种:最大堆和最小堆。 最大堆:堆中的最大元素存放在根节点中,并且在任原创 2016-01-30 20:59:43 · 375 阅读 · 0 评论 -
快速排序——QuickSort
快速排序快排同归并排序一样,也利用了分治(Divide and Conquer)的思想。此外,快排还能够在原址进行排序(最多只需要常数个临时存储空间)。一个快速排序包括一下三个步骤:分解:将数组A[1…n]划分为两个(可能为空)子数组A[1…p-1]和A[p+1…n],使得A[1…p-1]中的所有元素都不大于A[p],A[p+1…n]中的所有元素都不小于A[p]。这里,下标p的计算是分解过程中的重要原创 2016-02-01 22:09:05 · 432 阅读 · 0 评论 -
分治法——归并排序(MergeSort)
分治法的思想:将原问题分解为几个规模较小单类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题来建立原问题的解。分治法法在每层递归时都有如下三个步骤:分解原问题为若干子问题,这些子问题是原问题的规模较小的实例解决这些子问题,递归求解子问题合并这些子问题的解成原问题的解归并排序完全遵循分治法:将待排序的具有n个元素的序列分别分解为含有n/2个元素的子序列。使用归并排序递归地排序两个子原创 2016-01-26 23:51:30 · 638 阅读 · 0 评论