- 博客(8)
- 收藏
- 关注
原创 回溯法(子集树)----- 装载问题
一,问题描述 有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船上,其中集装箱i的重量为wi,且w1+w2+...+wn 装载问题要求确定,是否有一个合理的装载方案可将这n个集装箱装上2艘轮船。如果有,找出一种装载方案。 例如,当n=3,c1=c2=50,且w=[10,40,40]时,可将集装箱1和集装箱2装上一艘轮船,而将集装箱3装在第二艘轮
2010-05-27 17:30:00 9599 1
原创 分治法 --- 大整数的乘法
大整数的乘法 在计算机中,长整形(long int)变量的范围是-2147483648至2147483647,因此若用长整形变量做乘法运算,乘积最多不能超过10位数。即便用双精度(double)变量,也仅能保证16位有效数字的精度。在某些需要更高精度的乘法运算场合,需要用别的办法来实现运算。 比较容易想到的是做多位数乘法时列竖式进行计算的方法,只要写出模拟这
2010-05-26 16:48:00 50760 10
原创 动态规划 ------- 最长公共子序列
一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切说,若给定序列 X={x1,x2,....,xm},则另一序列Z ={z1,z2,....,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,...,ik}使得对于所有j=1,2,...,k有:zj = xij 。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3
2010-05-25 17:12:00 1542
原创 分治策略----快速排序
快速排序算法是基于分治策略的另一个排序算法。其基本思想是:对输入的子数组a[p:r],按以下三个步骤进行排序。 (1) 分解(Divide):以a[p]为基准元素将a[p:r]划分成3段a[p:q-1],a[q]和a[q+1:r],使得a[p:q-1]中任何一个元素小于等于a[q],而a[q+1:r]中任何一个元素大于等于a[q]。下标q在划分过程中确定。(2) 递归求解(Conquer)
2010-05-23 11:46:00 1448
原创 动态规划 ------0-1背包问题
0-1背包问题:给定n种物品和一个背包。物品i的重量为wi , 其价值为vi,背包的容量为c 。问如何选择装入背包的物品时,使得装入背包中物品的总价值最大? 在选择装入背包的物品时,对每种物品i只有两种选择,即装入或不装入。不能装入物品i多次或部分。 void Knapsack(int *v,int c,int *w,int n,int **m){ int jM
2010-05-22 11:24:00 655
原创 递归与分治策略-----合并排序
合并排序算法是用分治策略实现对n个元素进行排序的算法。 基本思想:将带排序元素分成大小大致相同的两个子集合,分别对两个子集合进行合并排序,最终将排好序的子集合合并成所要求的的排好序的集合。 递归算法: template void MergeSort(Type a[],int left,int right) {
2010-05-20 14:35:00 1699
原创 回溯法 ------n后问题 续
迭代回溯:省去O(n)递归栈空间 Class Queen{ private: bool Place(int k); void Backtrack(int t); int n, //皇后个个数 *x; // 当前解 long sum; //当前已找到的可行方案};
2010-05-19 10:05:00 903
原创 回溯法 -----n后问题
Class Queen{ private: bool Place(int k); void Backtrack(int t); int n, //皇后个个数 *x; // 当前解 long sum; //当前已找到的可行方案 }; bool Queen::Place
2010-05-18 13:51:00 2880
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人