![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法之美
sophistcxf
什么都略懂一点儿,生活更多彩一些
展开
-
二叉树的遍历
二叉树的遍历是否只有三种方法:递归,非递归(用栈),非递归(用指向父亲的指针)遍历的时候,本质上来说就是“必须要能回溯”原创 2012-07-12 09:34:15 · 282 阅读 · 0 评论 -
排序
本文分析常用的排序算法,以((4, 3, 5, 2, 1)为例。一、插入排序void InsertSort(int a[], int len){ int temp = 0; int i = 0; int j = 0; for(i = 0; i < len; i++) { temp = a[i]; for(j = i - 1; j >= 0; j--) {原创 2013-06-19 12:04:00 · 618 阅读 · 0 评论 -
[编程之美] 分层遍历二叉树
一、问题描述将一棵二叉树按层遍历,并将结点依次编号,如下面二叉树的分层遍历结果为:24 65 3 78 1并编程函数打印指定层结点,根结点为第0层。二、我先想到的是用队列来记录自身已经打印但子结点尚未打印的结点。但我并不知道每层应该应该出队多少个(否则需要使用另一个数据结构记录之,或者将NULL也压入队,加大了存储空间)。原创 2013-08-01 16:58:50 · 820 阅读 · 0 评论 -
[编程之美] 瓷砖覆盖地板
问题描述:用1*2的地板去覆盖N*M的地面,是否能正好覆盖。一、这个题本没什么难度。只要N或M其中之一为偶数,就可以正好覆盖;如果都为奇数,则不能覆盖。二、求用1*2的瓷砖覆盖2*M的地板有几种方式?第一块砖有两种放法,横放和纵放。用F(M)表示放法的个数。则F(M)=F(M-1)+F(M-2)。这是个斐波那契数列。易求。三、如果再扩展,用p*q瓷砖原创 2013-08-01 16:58:14 · 1722 阅读 · 0 评论 -
[算法导论]图的基本算法
一、图的数据结构图有两种表示方式:邻接矩阵和邻接表。1. 邻接矩阵以矩阵A(i,j)表示,设图有N个结点,结点为x1...xN,则A(i,j)为N*N矩阵。如果存在x(i)到x(j)的边,则A(i,j)=w,否则A(i,j)=0(w为权值,无权值情况下为1)。那么显然,邻接矩阵适用边较多的图(稠密图)。他的空间复杂度为O(V^2)(恒定的)。2. 邻接表邻接表是数组和链表的组合原创 2013-06-26 21:43:21 · 931 阅读 · 0 评论 -
最小生成树
一、什么叫最小生成树一个无向连通图G=(V,E),最小生成树就是联结所有顶点的边的权值和最小时的子图T,此时T无回路且连接所有的顶点,所以它必须是棵树。二、为什么要研究最小生成树问题《算法导论》上举了电子线路设计的例子。而在经济学、生物学中也常应用最小生成树。三、如何求一个无向连通图的最小生成树《算法导论》中提取讲解了两种得到最小生成树的算法,一是Kruskal算法,另一种是P原创 2013-06-24 19:12:35 · 3678 阅读 · 0 评论 -
[编程之美]求二进制表示中1的个数
问题描述:如何计算一个字节二进制表示中“1”的个数。1. 最简单的,对所有的位遍历一遍可以统计所有1的个数。但如何遍历是一个问题。一是除以2,一是移位。2. 最主要的是这个方法(巧的很)!写弄上代码,方便说明:int Count(Byte v){ int num = 0; while(v) { v &= (v-1);原创 2013-06-24 19:56:23 · 710 阅读 · 0 评论 -
兔子问题
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?分析1: 是否可以用STL中的pair。first是第几只兔子。second是兔子成长的月数。这个代价太大了,有很多的无用信息,比如我并不想知道第几只兔子,只想知道兔子的总数。兔子的成长月数也是多余信息,我只要知道他是否大于三个月。原创 2012-07-19 17:34:06 · 721 阅读 · 0 评论 -
链表的循环析构
当我们创建了一个链表后(或者树,图都是一样的)。我们做了很多Node* p = new Node(),p指针本身是可以在离开作用域时回收掉的,但是p所指向的内存块不行(这块内存是分配在堆上的)。我们在创建链表时并不知道什么时候不需要这个链表了,因而就不知道在什么地方delete。解决方法可以这样来做:在Node的析构函数中做这样的处理:~Node(){ if(pNex原创 2012-07-12 14:49:40 · 1547 阅读 · 2 评论 -
单源最短路径
一、什么叫单源最短路径一个有向图G=(V,E),从源点S到某点的所有路径中,权值和最小的为最短路径。S到图中所有点的最短路径形成最短路径树。(注意理解最短路径和最短路径树的不同, 最短路径是最短路径树的子集)。二、初始化操作INITIALIZE-SINGLE-SOURCE(G, s) for each vertex v∈V[G] do d[v] = ∞原创 2013-06-24 20:18:29 · 870 阅读 · 0 评论