Algorithm
lishuhuakai
这个作者很懒,什么都没留下…
展开
-
子集生成算法
子集生成算法属于暴力法中一类非常重要的算法.题目描述给定一个集合,请写一个算法,得到其所有的子集.这里假定该集合不存在重复的元素.举个栗子,给定集合[1, 2, 3], 你返回这样一堆子集:[], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]如果我们将集合中每个数对应的位置对应到所在位向量法根据离散数学的知识,我们可以知道,一个长度为 n 的集合的原创 2017-07-09 01:03:07 · 2336 阅读 · 1 评论 -
N皇后问题的位移解法
N皇后问题以八皇后为例,在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,皇后可以在其所在位置的对应的行,列,对角线,反脚线上发动攻击,请问一共有多少种摆法.如果我们将这里的8拓展一下,变成N,那么这个问题就变成了N皇后问题. 算法 下面是算法的高级伪码描述,这里用一个N*N的矩阵来存储棋盘: 1. 算法开始, 清空棋盘,当前行设为第一行,当前列设为第一列; 2. 在当前行,当原创 2017-03-03 20:25:01 · 862 阅读 · 0 评论 -
匈牙利算法!二分图匹配!
匈牙利算法链接:USACO 4.2.2 The Perfect Stall 完美的牛栏 stall4这是一种用增广路求二分图最大匹配的算法。它由匈牙利数学家Edmonds于1965年提出,因而得名。 定义 未盖点:设Vi是图G的一个顶点,如果Vi 不与任意一条属于匹配M的边相关联,就称Vi 是一个未盖点。交错路:设P是图G的一条路,如果P的任意两条相邻的转载 2012-10-29 13:10:21 · 4069 阅读 · 0 评论 -
扩展的欧几里德算法
关于的扩展的欧几里德算法: 扩展欧几里德定理 对于与不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数。那么存在整数 x,y 使得 gcd(a,b)=ax+by。现在我们要求求出这个x和y,以及最大公约数,怎么办?下面给你解答!关于代码的实现:总体来说,有两种方式,以下一一概述:1.递推法:具体代码实现如下:#incl原创 2012-12-05 21:32:04 · 1387 阅读 · 0 评论 -
关于大整数包的设计!
C/C++中的int类型能表示的范围是-2E31-2E31–1。unsigned类型能表示的范围是0-2E32–1,即 0-4294967295。所以,int和unsigned类型变量,都不能保存超过10位的整数。有时我们需要参与运算的数,可能会远远不止10 位,例如,可能需要保留小数点后面100位(比如求π的值),那么,即便使用能表示很大数值范围的double变量,但是由于double变量只有6原创 2013-05-25 00:17:48 · 5814 阅读 · 3 评论 -
求最近点对算法分析
问题描述: 在应用中,常用诸如点、圆等简单的几何对象代表现实世界中的实体。在涉及这些几何对象的问题中,常需要了解其邻域中其他几何对象的信息。例如,在空中交通控制问题中,若将飞机作为空间中移动的一个点来看待,则具有最大碰撞危险的2架飞机,就是这个空间中最接近的一对点。这类问题是计算几何学中研究的基本问题之一。下面我们着重考虑平面上的最接近点对问题。 最接近点对问题的提法是:给定平转载 2013-06-20 09:53:53 · 16337 阅读 · 4 评论 -
汉诺塔问题以及递归
汉诺塔问题我最初接触汉诺塔问题大概是在高三的时候,那个时候的数学试卷出了这么一道题目,记得当初觉得这道题目很有趣,自己翻前覆后想了很多,但是终究还是没有想出个所以然来,或许在那个时候,这道题目在老师和学霸的眼里就是那么简单,不过对于那个时候的我来说,还是很有难度的一道题,当然今天不是,今天几行代码就搞定了。问题的描述 现在有三根连在一起的柱子,为了方便,我们标记他们为A,B,C。A柱子上从上到下原创 2015-10-01 23:54:48 · 1804 阅读 · 0 评论 -
如何实现STL中的next_permutation函数?
问题,实现 STL 中的 next_permutation() .回答来自stackoverflow:先让我们来看一些排列:1 2 3 41 2 4 31 3 2 41 3 4 21 4 2 31 4 3 22 1 3 4...我们如何从一个排列转移到下一个排列呢?首先,让我们用另外一个角度来看待这个问题.如果将排列中每个元素视作一个数字(当然这里就是数字,但是元素是’a’, ‘b’的翻译 2017-08-13 17:40:01 · 981 阅读 · 0 评论 -
二叉树的遍历
二叉树的遍历二叉树是一种常见的数据结构,对于这种结构的操纵一定要烂熟于心,这篇文章想记录一下的,是二叉树的遍历操作.实现的方式二叉树的遍历,事实上有两种是实现方法,一种是递归,这种方法过分简单,所以这里不会讲,第二种方式是非递归,你可能会问,既然递归实现这么简单,我们为什么还要非递归版本的实现,这个问题很好,这个实际上和递归的内存开销有关,每一次递归,程序便要堆栈,每次堆栈,便会占用比非递归昂贵得多原创 2017-08-13 17:37:00 · 643 阅读 · 5 评论 -
lower_bound以及upper_bound
lower_bound以及upper_boundSTL中实现了这两个算法,但是代码看起来非常晦涩,如果要快速写出这两个算法的话,参照STL的实现,恐怕会非常费劲.这里,我提供一种非常简洁的实现.代码仅供参考.lower_bound给定一个有序数组 vals, 寻找 vals 中第一个为 k 的值的下标,没有找到的话,返回 -1. 举个栗子, vals = [0, 1, 1, 1, 2, 3], 那原创 2017-08-21 23:07:44 · 648 阅读 · 0 评论