![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法笔记
JayInnn
玉不琢,不成器;人不学,不知道
展开
-
(二叉)堆操作
堆操作实验目的(一)建堆:将数组A[1..n]变成一个最大堆。(二)堆排序:将一个堆中的元素按递减排序输出。(三)用插入方法建堆:堆大小从1到n每次插入一个元素到堆中,直到n个元素入堆。 实验原理(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。树上的每一个结点对应数组中的一个元素。除了最底层外,该树是完全充满的,而且是从左向右填充。表示堆的数组A包括两个属性:A.length(通常)给出数...原创 2018-05-18 09:08:37 · 346 阅读 · 0 评论 -
快速排序与随机快速排序
快速排序与随机快速排序问题描述 实现对数组的普通快速排序与随机快速排序。实验要求(1)实现上述两个算法 (2)统计算法的运行时间(3)分析性能差异,作出总结算法原理(一)快速排序 通过使用分治思想对快速排序算法进行描述。下面对一个典型的子数组A[p…r]进行快速排序的三步分治过程: 分解:数组A[p…r]被划分为两个(可能为空)子数组A[p…q-1]和A[q+1…r],使得A[p...原创 2018-05-13 11:30:08 · 4926 阅读 · 0 评论 -
背包问题
背包问题问题描述(一)0-1背包问题:一个正在抢劫商店的小偷发现了n个商品,第i个商品价值vi美元,重wi磅,vi和wi都是整数。这个小偷希望拿走价值尽量高的商品,但他的背包最多容纳W磅重的商品,W是一个整数。他应该拿哪些商品呢?(我们称这个问题是0-1背包问题,因为对每个商品,小偷要么把它完整拿走,要么把它留下;他不能只拿走一个商品的一部分,或者把一个商品拿走多次。) (二)部分背包问题:设定与...原创 2018-07-10 20:42:05 · 399 阅读 · 0 评论 -
二叉树操作
二叉树操作实验目的实现如下二叉树操作,Input:1-n的数组(1)通过插入操作建立二叉树(2)实现查找、最大/小关键字查询(3)从1到n的依次删除 实验原理二叉搜索树上的基本操作所花费的时间与这棵树的高度成正比。二叉搜索树可以使用一个链表数据结构来表示,其中每个结点都是一个对象。每个结点包含属性key,left,right,p,它们分别指向结点的关键字,左孩子,右孩子和双亲。如果某个孩子结点和父...原创 2018-07-10 20:44:49 · 628 阅读 · 0 评论 -
红黑树操作
红黑树操作实验目的通过插入操作建立一个红黑树,输入为1…n的数,同时将每次插入后的树信息打印出来。 实验原理红黑树是一棵二叉搜索树,它在每个结点上增加了一个存储位来表示结点的颜色,可以是RED或BLACK。通过对任何一条从根到叶子的简单路径上各个结点的颜色约束,红黑树确保没有一条路径比其他路径长出2倍,因而是近似于平衡的。树中每个结点有五个属性:color,key,left,right和p;通过添...原创 2018-07-10 20:47:30 · 248 阅读 · 0 评论 -
红黑树删除操作
红黑树删除操作实验目的实现红黑树的删除操作:基于之前建立的红黑树,编写红黑树删除程序删除给定的一个结点。 实验原理与n个结点的红黑树上的其他基本操作一样,删除一个结点要花费O(lgn)时间。当要删除一个结点z时,可以分为两种情况:(1)当z的子结点少于2个时,z从树中删除,并让y成为z;(2)当z有两个子结点时,y应该是z的后继,并且y将移至树中的z位置,在结点被移除或者在树中移动之前,必须记住y...原创 2018-07-10 20:49:54 · 538 阅读 · 0 评论 -
八皇后问题
八皇后问题是这样一个问题:将八个皇后摆在一张8*8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇后,一共有多少种摆法,其中皇后是最强大的一枚棋子,可以吃掉与其在同一行、列和斜线的敌方棋子? 经典解法:回溯法 void queen(int row){ if(row==n) total++; else for(int col=0;col!=n;col...转载 2018-07-21 10:02:24 · 792 阅读 · 0 评论 -
二叉树深度优先遍历和广度优先遍历
对于一颗二叉树,深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。以上面二叉树为例,深度优先搜索的顺序为:ABDECFG。怎么实现这个顺序呢 ?深度优先搜索二叉树是先访问根结点,然后遍历左子树接着是遍历右子树,因此我们可以利用堆栈的先进后出的特点,现将右子树压栈,再将左子树压栈,这样左子树就位于栈顶,可以保证结点的左子树先与右子树被遍历。 ...转载 2018-07-21 10:05:39 · 208 阅读 · 0 评论 -
链表表示的两数相加
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 代码一: public L...原创 2018-08-17 18:11:03 · 189 阅读 · 0 评论