
1.3 数据结构和算法
无幻
这个作者很懒,什么都没留下…
展开
-
数据结构----图(笔记)
图G由两个集合V和E组成,记为: G=(V,E) 其中: V是顶点的有穷非空集合, E是V中顶点偶对(称为边)的有穷集。 通常,也将图G的顶点集和边集分别记为V(G)和E(G)。E(G)可以是空集。若E(G)为空,则图G只有顶点而没有边。图有两种存储结构:邻接矩阵和邻接表 邻接矩阵: ① 用邻接矩阵表示顶点间的相邻关系原创 2009-07-28 16:58:00 · 8772 阅读 · 0 评论 -
大数运算模板
此模板只能处理正数的大数,包含四则运算、平方根、求末尾0个数、求长度等以及int型的组合排列。下面会有介绍模板的一些使用,就我目前所知道的使用方法。首先看下排列和组合的含义:排列: 组合: 模板如下:#include #include using namespace std;#define DIGIT 4 //四位隔开,即万进制#def原创 2009-08-08 09:33:00 · 2450 阅读 · 0 评论 -
判断互质数的简易方法
一、概念判断法 公约数只有1的两个数叫做互质的数。根据互质数的概念。可以对一组数进行判断。如,4和9的公约数只有1,所以它们是互质数。 二、规律判断法 根据互质数的定义,可总结出一些规律,利用这些规律可迅速判断一组数是否互质。 (1)两个不相同的质数一定是互质数。例如,19和13是互质数。 (2)两个连续的自然数一定是互质数。例如转载 2009-08-09 17:39:00 · 13758 阅读 · 1 评论 -
三种博弈问题
有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。转载 2009-08-14 09:33:00 · 1939 阅读 · 0 评论 -
[扩展欧几里德]的理解
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。扩展欧几里德算法是求a*x+b*y=gcd(a,b)的线性方程。查找了相关资料,下面是理解内容:我们令a>b①当b=0,显然gcd(a,b)=a,此时x=1,y任意;②当b!=0 假设a*x1+b*y1=gcd(a,b); b*x2+(a%b)*y2=gcd(b,a%b)=gcd(a,b) 则a*x1+原创 2009-08-17 11:20:00 · 1261 阅读 · 0 评论 -
最大网络流
1 基本概念和术语(1)网络 G是一个简单有向图,G=(V,E),V={1,2,…,n}。在V中指定一个顶点s,称为源和另一个顶点t,称为汇。有向图G的每一条边(v,w)∈E,对应有一个值cap(v,w)≥0,称为边的容原创 2009-11-18 10:28:00 · 3898 阅读 · 0 评论 -
棋盘覆盖问题
在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其它方格不同,则称该方格为一特殊方格,称该棋盘为一特殊棋盘。显然特殊方格在棋盘上出现的位置有 4^k 种情形。因而对任何 k>=0 ,有 4^k 种不同的特殊棋盘。下图所示的特殊棋盘为 k=2 时 16 个特殊棋盘中的一个。在棋盘覆盖问题中,要用下图中 4 中不同形态的 L 型骨牌覆盖一个给定的特殊棋牌上除特殊方格以外的所原创 2010-03-27 23:10:00 · 18252 阅读 · 4 评论 -
C语言算法速查手册
第1章 绪论 11.1 程序设计语言概述 11.1.1 机器语言 11.1.2 汇编语言 21.1.3 高级语言 21.1.4 C语言 31.2 C语言的优点和缺点 41.2.1 C语言的优点 41.2.2 C语言的缺点 61.3 算法概述 71.3.1 算法的基本特征 71.3.2 算法的复杂度 81.3.3 算法的准确性 101.3.4 算法的稳定性 ...原创 2010-04-24 17:57:00 · 8040 阅读 · 6 评论 -
itoa()函数,10进制转换到(2~36)进制
先看下itoa()的函数说明吧:功 能:把一整数转换为字符串 用 法:char *itoa(int value, char *string, int radix); 详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写. 参数: value: 待转化的整数。 radix:原创 2009-08-09 10:32:00 · 5696 阅读 · 3 评论 -
C++ 算法库(2) 修改内容的序列操作
修改内容的序列操作:copy将一个范围中的元素拷贝到新的位置处copy_backward将一个范围中的元素按逆序拷贝到新的位置处copy_if C++11将一个范围中满足给定条件的元素拷贝到新的位置处copy_n C++11拷贝 n 个元素到新的位置处fill将一个范围的元素原创 2014-01-22 19:35:25 · 2413 阅读 · 0 评论 -
C++ 算法库(1) 不修改内容的序列操作
不修改内容的序列操作:adjacent_find查找两个相邻的等价元素all_of C++11检测在给定范围中是否所有元素都满足给定的条件any_of C++11检测在给定范围中是否存在元素满足给定条件count返回值等价于给定值的元素的个数count_if返回值满足给定条件原创 2014-01-20 18:34:16 · 2235 阅读 · 0 评论 -
C++ 算法库(3) 划分操作
划分操作:is_partitioned C++11检测某个范围是否按指定谓词划分过partition将某个范围划分为两组partition_copy C++11拷贝指定范围的划分结果partition_point C++11返回被划分范围的划分点stable_partition原创 2014-01-22 20:16:21 · 2934 阅读 · 0 评论 -
C++ 算法库(5) 二分法查找操作
二分法查找操作:binary_search判断范围中是否存在值等价于给定值的元素equal_range返回范围中值等于给定值的元素组成的子范围lower_bound返回指向范围中第一个值大于或等于给定值的元素的迭代器upper_bound返回指向范围中第一个值大于给定值的元素的迭代器原创 2014-01-23 18:53:43 · 6398 阅读 · 0 评论 -
C++ 算法库(4) 排序操作
排序操作:is_sorted C++11检测指定范围是否已排序is_sorted_until C++11返回最大已排序子范围nth_element部份排序指定范围中的元素,使得范围按给定位置处的元素划分partial_sort部份排序partial_sort_copy拷贝部分原创 2014-01-23 18:52:00 · 2592 阅读 · 0 评论 -
任意进制间的转换
任意进制间的转换(2~36进制)上次写的2~9进制转换到10进制,因为都是整型的,处理输出输入都比较方便,这次来个比较普遍的。要用数组存储要转换的数字,结果返回整型的十进制数。函数如下:/************************************************************************//* a是要转换的数,bit是原本的进制(2~36)原创 2009-08-09 20:24:00 · 5847 阅读 · 0 评论 -
匈牙利算法
本文转自大牛博客:http://www.byvoid.com/blog/hungary/ 这是一种用增广路求二分图最大匹配的算法。它由匈牙利数学家Edmonds于1965年提出,因而得名。 定义 未盖点:设Vi是图G的一个顶点,如果Vi 不与任意一条属于匹配M的边相关联,就称Vi 是一个未盖点。 交错路:设P是图G的一条路,如果P的任意两条相邻的边一定是一条属于M而另一条不属转载 2009-08-07 10:13:00 · 17633 阅读 · 4 评论 -
STL函数模板(即算法)一览
查找算法adjacent_find:找出一个串中第一个不符合次序的地方find,find_if:找出第一个符合条件的元素find_first_of:在一个串中寻找第一个与另一个串中任意一个元素相等的元素search_n:在一个串中寻找一个元素第n次出现的地方count,count_if:一个串中符合条件的元素个数mismatch:找出两个串第一个不相等的地方equal:判断两个串的指定转载 2009-08-07 08:53:00 · 3354 阅读 · 0 评论 -
KMP算法----利用nextval[]数组
KMP算法是通过分析子串,预先计算每个位置发生不匹配的时候,所需GOTO的下一个比较位置,整理出来一个next数组,然后再上面的算法中使用。对next数组的改进将会加快分析匹配速度。#include using namespace std;void GetNextVal(char T[],int nextval[]){ int i=0; int j=-1; nextv原创 2009-07-28 10:45:00 · 2285 阅读 · 0 评论 -
邻接矩阵(有向图,无向图实现的差异)
对于相似的一个图,若是无向图,则如下: 若是有向图,则如下: 而具体实现代码,相差无几,自己要注意的是无向图是对称矩阵,有向图不一定是。#include using namespace std;#define MaxVertexNum 100#define QueueSize 30bool visited[MaxVertexNum];type原创 2009-07-30 10:46:00 · 7587 阅读 · 0 评论 -
最小生成树----Prim算法
最小生成树是数据结构中图的一种重要应用,它的要求是从一个带权无向完全图中选择n-1条边并使这个图仍然连通(也即得到了一棵生成树),同时还要考虑使树的权最小。 以下代码包含生成无向网图,prim算法计算最小生成树的完整步骤。请观看【动画演示prim算法】,验证程序是否正确。代码说明几点:lowcost[]用来保存集合V-U中各顶点与集合U中顶点最短边的权值,low原创 2009-07-31 08:33:00 · 2833 阅读 · 0 评论 -
图---邻接矩阵(建立,深度遍历,广度遍历)
图的存储方式可以用邻接矩阵来表示,我们假定顶点序号从0开始,即图G的顶点集的一般形式是V(G)={v0,vi,…,Vn-1}。以下代码测试过,为图的邻接矩阵表示方式。/************************************************************************//* 图的邻接矩阵存储结构原创 2009-07-28 20:01:00 · 17942 阅读 · 11 评论 -
最小生成树----Kruskal算法
最小生成树的另一种算法,比较适合处理稀疏图。算法思想:按权值的递增次序选择合适的边来构造最小生成树。以下代码包含无向带权图的建立,Kruskal算法的完整过程。请观看【动画演示Kruskal算法】,验证程序是否正确。代码说明:1.vest[]数组存放两个顶点间的连通分量2.结构体E[]数组是按权值从小到大排列的边集3.对E的排序采用了qsort排序,自定义的排序函数原创 2009-07-31 15:53:00 · 2667 阅读 · 1 评论 -
单源点最短路径----Dijkstra算法
对于给定的带权有向图G和源点v,求从v到G中其余各顶点的最短路径。该算法是一个按路径长度递增的次序产生最短路径的算法。以下代码包含生成有向带权图,Dijkstra算法的完整步骤。请参考【动画演示Dijkstra算法】。代码说明几点:1.dist[MaxVertexNum]; //元素dist[i]表示当前所找到的从源点v到终点vi的最短路径的长度2.path[MaxVert原创 2009-08-02 08:41:00 · 4396 阅读 · 5 评论 -
查找方法----二分查找
二分查找又称折半查找,它是一种效率较高的查找方法。 【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。 【优缺点】折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。 【算法思想】首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;原创 2009-08-06 08:07:00 · 4257 阅读 · 0 评论 -
高精度计算----加法运算
处理大数加法: 1.用数组来存储每位数,对每位数进行相加运算,要依加法原则,从低位开始运算。而数组是从高位开始存储的,所以要逆序处理运算。要处理进位和当前位超9处理。 2.这里的加法运算不包括负数计算,可以转换为相关的减法运算。测试程序效果如下:一下代码包含相加函数,测试的主函数,相加函数(附带注释)直接可以使用:#include "stdio.h"#include "st原创 2009-08-05 09:19:00 · 2109 阅读 · 0 评论 -
高精度计算----加法运算(续)
在上一贴的基础上,增加可以对浮点数进行运算,依旧是加法运算。补充的说明:1、相加函数不变,为了更能实现移植吧,写太多东西在一个函数里面看的也乱;2、增加两个函数,一个判断小数位数,一个对结果数组的处理简单思想:把浮点转换为正整型的,然后再对点进行处理(包括一些特定情况)程序测试的结果如下:以下代码包括原封不动的相加函数,还有上面提到的两个函数,代码具体已有注释,若有错误,原创 2009-08-05 11:03:00 · 1416 阅读 · 0 评论 -
高精度计算----减法运算
处理大数减法运算:1、首先要判断被减数与减数哪个更大,再相应的带入减法函数去处理。具体的比较可以使用字符串的相关知识去比较。2、相减要先对齐数组,依照减数的长度,执行相应的减法运算次数。3、不需要借位相减的话,直接减去;需要的话,向前借一位,若前一位是0,则再前借(此时前一位的0变为10)。测试程序效果如下: 以下代码包括相减函数,比较被减数减数函数,若有错误,请指出原创 2009-08-05 14:52:00 · 3472 阅读 · 0 评论 -
高精度计算----减法运算(续)
基于上一贴,修改减法运算适合于高精度浮点型计算。因为减法比加法难度大一点,考虑的地方也要多一些,可能代码有欠缺,欢迎指出。运算说明:1、相减函数依旧没改变,包括上一贴的判断被减数与减数的大小函数也没变。2、增加两个函数,取小数位数函数和结果处理(回归小数点)函数3、与加法浮点高精度运算相比,这里改变较多的是结果处理函数,加法加完后,位数不减反增,而且最多增一位。减法会消失掉好原创 2009-08-05 19:04:00 · 1772 阅读 · 0 评论 -
每对顶点间最短路径----Floyd算法
对于一个各边权值均大于零的有向图,对每一对顶点,求出vi与vj之间的最短路径和最短路径长度。以下代码包含有向图的建立,Floyd算法的实现以及输出最短路径和最短路径长度,具体过程请看【动画演示Floyd算法】。代码说明几点:1、A[][]数组初始化为各顶点间的原本距离,最后存储各顶点间的最短距离。2、path[][]数组保存最短路径,与当前迭代的次数有关。初始化都为-1,表示没有原创 2009-08-08 10:40:00 · 5707 阅读 · 1 评论 -
2~10进制内转换到10进制
2~10进制内转换到10进制转换是可以从最后一位开始的,每次我的第一直觉都是按公式从前面开始,发现很经常错。从后面开始比较简洁而且不易错误。/************************************************************************//* a是要转换的数,bit是原本的进制(2~10)原创 2009-08-09 09:20:00 · 1888 阅读 · 0 评论 -
图---邻接表(建立,深度遍历,广度遍历)
图的邻接表表示法类似于树的孩子链表表示法。对于图G中的每个顶点vi,该方法把所有邻接于vi的顶点vj链成一个带头结点的单链表,这个单链表就称为顶点vi的邻接表(Adjacency List)。以下代码测试过,为图的邻接表表示方式。/*******************************************************************原创 2009-07-28 21:50:00 · 47044 阅读 · 31 评论