算法
二叉树
这个作者很懒,什么都没留下…
展开
-
汉诺塔问题:64个盘子,3个基座A、B、C,编程打印处移动过程
思路:利用递归分三步走 1. 将n个盘子从a移到b,c作为辅助 2. 将第n个盘子从a移到b 3. 将c中的n-1个盘子移到b,a作为辅助#include <iostream>using namespace std;//将n个盘子从a移到b,c作为辅助void hanoi(int n, char a, char b, char c){ if(n>0)原创 2016-03-30 15:59:04 · 8482 阅读 · 0 评论 -
正则表达式的匹配
模式中的字符’.’表示任一字符,而‘*’表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串“aaa”与模式“a.a”和“ab*ac*a”匹配,但与“aa.a”及“ab*a”均不匹配。分析:分两种情况 a). 当模式中的第二个字符不是’*’时问题要简单很多。如果字符串中的第一个字符和模式中的第一个字符相匹配,那么在字符串和模式上都向后移动一个字符,原创 2016-09-16 21:49:11 · 457 阅读 · 0 评论 -
不用算术运算符实现两个数的加法。
(1)先不考虑进位,按位计算各位累加(用抑或实现),得值a; (2)然后计算进位,并将进位的值左移,得值b,若b为0,则a就是加法运算的结果,若b不为0,则a+b即得结果(递归调用该函数);int add_no_arithm(int a, int b){ if (0 == b) return a; //当没有进位时 int sum = a^b; int carry = (原创 2016-08-25 11:03:06 · 1710 阅读 · 0 评论 -
最小的k个数
输入n个整数,找出其中最小的k个数。例如输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 解法一: 基于partion函数来解决这个问题。如果基于数组的第k个数字来调整,使得比第k个数字小的所有数字都位于数组的左边,比第k个数字大的所有数字都位于数组的右边。这样调整之后,位于数组中左边的k个数字就是最小的k个数字(这k个数字不一定是排序的)。 C++代码:#in原创 2016-07-14 19:27:19 · 882 阅读 · 0 评论 -
求一组数的所有组合。
**算法思路:**n个数能够构成长度为1的组合、长度为2的组合、……、长度为n的组合。在求n个数的长度为m(m>=1 && m<=n)的组合时,我们把这n个数分成两部分:第一个数和其余的所有数。如果组合里包含第一个数,则下一步在剩余的数中选取m-1个数;如果组合里不包含第一个数,则下一步在剩余的n-1个数中选取m个数。这两个子问题都可以用递归的方式解决。#include <iostream>#in原创 2016-07-14 16:42:50 · 2707 阅读 · 0 评论 -
Letter Combinations of a Phone Number
Given a digit string, return all possible letter combinations that the number could represent.A mapping of digit to letters (just like on the telephone buttons) is given below. Input:Digit string “23”原创 2016-03-29 11:56:21 · 342 阅读 · 0 评论 -
STL中计算排列组合关系的算法
算法思想:首先,从最尾端开始往前寻找两个相邻的元素,令第一个元素为*i,第二个元素为*ii,且满足 *i < *ii 。找到这样一组相邻元素后,再从最尾端开始往前检验,找出第一个大于*i的元素,令为*j,将i,j元素对调,再将ii之后的所有元素颠倒排列。此即所求之“下一个”排列组合。STL中函数名称为next_permutation,这里改为next_permutate,下面是具体实现:temp原创 2016-03-26 13:36:36 · 1425 阅读 · 0 评论 -
游戏问题
12个小朋友手拉手站成一个圆圈,从某一个小朋友开始报数,报到7的那个小朋友退到圈外,然后他的下一位重新报“1”。这样继续下去,直到最后只剩下一个小朋友。求解这个小朋友站在什么位置上。#include <iostream>using namespace std;int main(){ int state[12]; for (int i=0;i<12;++i) {原创 2016-04-01 18:49:02 · 688 阅读 · 0 评论 -
高精度整数相加减
include include using namespace std; string _sub(string s1, string s2);inline int compareData(const string &s1,const string &s2) { if (s1.length()>s2.length()) return 1; else if(s1.length()原创 2016-04-01 16:18:23 · 745 阅读 · 0 评论 -
m阶B+树与m阶B树的主要差异在于:
在B+树中,具有n个关键字的结点只含有n棵子树,即每个关键字对应一棵子树;而在B树中,具有n个关键字的结点含有(n+1)棵子树。在B+树中,每个结点(非根结点)关键字个数n的范围是[m/2向上取整,m](根结点:1<=n<=m),在B树中,每个结点(非根结点)关键字个数n的范围是[m/2向上取整-1,m-1](根结点:1<=n<=m-1)。在B+树中,叶结点包含信息,所有非叶结点仅起到索引作用,原创 2016-08-04 11:45:18 · 4127 阅读 · 0 评论