
算法
文章平均质量分 73
wudaijun
新博客地址:wudaijun.com,QQ:812915118,欢迎交流。
展开
-
位运算与加减法
位运算实现加法:int add1(int num1 ,int num2){ int sum, carry; do { sum = num1 ^ num2; carry = (num1 & num2) << 1; num1 = sum; num2 = carry; } while(num2 != 0); return num1; }i原创 2012-11-01 09:37:00 · 2799 阅读 · 0 评论 -
Anagrams by Stack
// DJ.W 2013.4.20 //问题描述 : Anagrams by Stack// http://acm.suse.edu.cn/index.php?mod=problem&id=1056//算法思路: 用回溯法搜索//开发环境: vs2008#include "stdafx.h"#include using namespace std;#include#i原创 2013-04-20 10:53:49 · 1102 阅读 · 0 评论 -
小数转分数
// 小数转分数.cpp : 定义控制台应用程序的入口点。///** DJ.W 2013.4.19* 问题描述:给定一个有限小数或无限循环小数,用分母最小的分数形式将其表示出来* 输入 :任意小数 循环节用()括起来 如: 1.33(3)* 输出 :4/3* 算法思想:《编程之美》P148* 提示; 设分数Y = 0.(c1c2c3...cm)* => Y = c原创 2013-04-19 19:29:54 · 1565 阅读 · 0 评论 -
数组分割问题
// 数组分割.cpp : 定义控制台应用程序的入口点。////问题描述:将一个有2N个元素的数组分为两个元素个数为N的子数组,要求两子数组的和最接近//思路:《编程之美》P202 用动态规划得到2N个元素中任意N个元素能得到的所有和。再找出其中最接近sum/2的一个 设为x// 最后再通过一个动态规划算法找出和为x且个数为N的子数组#include "stdafx.h"#inc原创 2013-03-21 11:53:17 · 1302 阅读 · 0 评论 -
外星人计数
// 外星人计数法.cpp : 定义控制台应用程序的入口点。//DJ.W 2013.3.30/*问题描述: 下面是外星人计数和人类计数的对应 外星人计数 人类计数 1 1 12 2 21 3 123 4 132 5 213 6 231 7 312 8 321 9 1234 10 .... ... 要求原创 2013-03-31 10:53:51 · 1301 阅读 · 0 评论 -
将邻接表表示的图转换为孩子兄弟法表示的二叉树
/* DJ.W 2012.12.06 代码功能: 将一个邻接表图转换为孩子兄弟法表示的二叉树*/#include #include using namespace std; //=====Queue=============================================================================================原创 2013-01-03 22:44:45 · 3789 阅读 · 0 评论 -
找出无序数组中最小的前k个数
/* DJ.W 2013.1.3 算法描述:找出一无序整型数组arr[n]中最小的前k个数 算法思路:为k个元素建一个大顶堆min[k],初始化为数组arr的前k个元素 调整这k个元素使其满足大顶堆性质 此时min[0]为大顶堆中最大的元素,依次用arr[j](k<=j<n)与min[0]相比较 如果arr[j]小于min[0] 则将min[0]换为arr[j]原创 2013-01-03 09:17:53 · 1756 阅读 · 0 评论 -
求最大公约数
#includeusing namespace std;//方法一 辗转相除法(问题规模递减得很快, 但求余效率低)// 在第一次调用之后 可以保证 a>bint gcd_1(int a, int b){ return b ? gcd_1(b, a%b) : a;}//方法二 辗转相减法(避免了方法一的求余低效率, 但是迭代次数更多)// 需要适当调整使得每一次处理时 a原创 2012-12-15 21:08:27 · 736 阅读 · 0 评论 -
找出二叉树中所有累加值为给定值的路径
在二元树中找出和为某一值的所有路径题目:输入一个整数和一棵二元树。 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。 例如 输入整数22和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10原创 2012-12-28 21:13:15 · 1039 阅读 · 0 评论 -
求数组最大连续元素之和
/*DJ.W 2012.12.27 代码功能: 输入: 一个整型数组 输出: 该数组能得到的最大连续元素和 如对输入 1 -2 -4 7 -6 9 最大连续元素和为10 (7 + (-6) + 9) 问题以及算法思想来自《编程珠玑(第二版)》P77 */#include using namespace std;#define max(a, b) (a>b? a:原创 2012-12-27 22:43:03 · 1252 阅读 · 0 评论 -
动态规划__合唱队形问题
问题描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1Ti+1>…>TK(1 输入格式 Input Format 输入的第一行是一个整数N(2 输出格式 Output F原创 2012-11-09 17:13:26 · 12710 阅读 · 1 评论 -
动态规划___数学三角形问题
从文本input,txt输入 将结果输出到output.txt//类里有递归和迭代两种版本#include#include #define MIN_NUM -99999#define max(a, b) (a>b?a:b)class NumTrigon{public: NumTrigon(const char* filename)原创 2012-11-01 09:52:04 · 933 阅读 · 0 评论 -
二分思想_求逆序对
对归并排序做一定的调整可以很方便的求出给定数组中的逆序对 思路: 对于数组A[1:n]中的逆序对数表示为N(A[1:n]) 则有N(A[1:n]) = 左部逆序对数N(A[1:n/2]) + 右部逆序对数N(A[n/2+1:n]) + 对左右两部分归并产生的逆序对数 在归并时 对于两个有序数组A[1:n/2] A[n/2+原创 2012-11-01 09:38:48 · 1051 阅读 · 0 评论 -
动态规划的一些整理
动态规划的特征和定义这里就不谈了,关键是要怎样通过代码来理解动态规划。这里收集了一些以前做过的动态规划典型问题。里面基本都有比较详细的注释以及当时对这些问题的一些理解和看法,并且对于所有的问题基本都有递归和迭代两种版本给大家更好的对比和理解。包括:1.斐比那契数列(递归,迭代)2.数学三角形问题(递归,迭代)3.0-1背包问题(包括递归版和两种迭代版,以及一个回溯算法版本)4.最优原创 2012-11-01 14:03:33 · 1216 阅读 · 0 评论 -
实现pop push min操作时间复杂度为O(1)的栈结构
要求:实现一个栈结构 使得pop push min(获得栈中最小元素)操作的时间复杂度为O(1)要实现min函数复杂度为O(1) 肯定不能遍历弹入的数据也不能简单维护一个小顶堆(小顶堆的维护需要lg(n)时间)这个时候可以利用栈先进先出的特性:考虑2 4 3 1 四个依次入栈的数字。在我们维护的min数据中,我们不需要保存1 2 3 4, 事实上,由于栈只能按照1 3 4 2的顺序原创 2012-12-27 00:13:44 · 8792 阅读 · 4 评论