算法设计与分析
macower
这个作者很懒,什么都没留下…
展开
-
动态规划法压缩矩阵
<br /> <br />/*动态规划法压缩矩阵核心思想:先将面压缩成线 然后用线压缩成点 在线的压缩中 动态约束条件:2<=i<= aLength ; 1.1对于任意 dp[i-1]< 0 都有 dp[i] = a[i]; 1.2 对于任意dp[i-1]>0 都有 dp[i] = dp[i-1]+a[i]; 这个是线的压缩动态方程 在面中 对应的有 任意i行到j行的数据压缩成一行 并存于数组b中 在将b数组按照1.1 ,1.2的方程进行线性原创 2010-07-15 15:36:00 · 633 阅读 · 0 评论 -
滑雪问题
<br />#include <iostream>#include <stdio.h>using namespace std;int f[101][101];int a[101][101];int n = 0;int maxvalue(int a ,int b){ return (a>b)?a:b;}int dp(int i,int j){ int left = 1; int rigth = 1; int up = 1;原创 2010-07-15 15:53:00 · 760 阅读 · 0 评论 -
DNA 基因的匹配
<br />/*/* Name: DNA 基因的匹配 Copyright: mahan Author: CoolPrince Date: 16-07-09 16:19 Description: DNA 基因的匹配问题实质最原始的模型是求解最大字符串匹配度 在本题中运用的动态规划思想的 一个基因的选择与否来源与三种情况 1:来源于 a 以及b 2:来源于 a 以及加的 模糊的'-' 基因 3:来源于 b 以及加的 模糊的'-' 基因 比较原创 2010-07-15 15:52:00 · 3641 阅读 · 0 评论 -
动态规划 背包问题
<br />#include <iostream>using namespace std;int n;int num[11];int v[11];int maxcost;int fun(int ,int);int main() { while(cin>>maxcost) { cin>>n; for(int i =1;i<=n;i++) cin>>num[i]>>v[i];原创 2010-07-15 15:46:00 · 492 阅读 · 0 评论 -
石头合并---动态规划详解
<br /> 思想来源:1:floyd2:隔板法3:动态规划<br />问题分析:1:只能是相邻两个石头才能合并2:操场是圆形的3:合并后的石头组成一个新的石堆4:要求求解最优的合并方式使得得分最大<br /> 根据题意 什么才叫得分?<br />得分是合并的石头形成新的石堆的石头的数目,合并一个对应的得分就加上新合并的石堆石头的数目,最后求解的分的总和<br />算法选择<br />•蛮力法 时间复杂度大效率低下•贪心法 石头的堆数目相近的比较多时处理复杂 并且难以的到最优解•动态规划 下面将介绍<br原创 2010-07-15 15:44:00 · 2276 阅读 · 0 评论 -
归并排序
<br /><br />/*<br />示例二:归并排序<br />具体步骤: 1:分开 2:求解子问题 3:合并<br />其核心设计思想就是分治法:<br />在归并排序当中,首先是将其问题变小为其1/2然后分别从左右两侧继续<br />进行分化,将排序后的重新置换为原来的数组,这样才能使其有序,<br />在排序的比较当中也是通过分段处理来进行s--t 以m为枢轴,进行如果没有比较完毕<br />则进行数据的追加以保证数据在排序的分方法里面有序,这便是归并排序的具体<br />算法实现<br />*/原创 2010-07-15 15:34:00 · 368 阅读 · 0 评论 -
KMP
<br />/*vc6.0实现KMP算法主要是为了求解最大匹配的字符串及其长度主要思想就是将已经匹配的字符串进行模式匹配。这样比单个的比较的次数少一些。author:macower*/#include <iostream>#include <string>using namespace std;int max = 0;int loc = 0;void KMP(string a ,string b);int main(){ string a; s原创 2010-07-15 15:33:00 · 575 阅读 · 0 评论 -
快速排序
<br />#include <iostream>using namespace std;int array[100];void swap(int &a ,int &b){int t;t = a;a = b;b = t;}int part(int i ,int j);void quicksort(int i ,int j);int main(){int n = 0;cin>>n;int counter = 0;while(n--){ci原创 2010-07-15 15:35:00 · 422 阅读 · 0 评论 -
最大子段和的动态规划解法
<br />/* 最大子段和的动态规划解法1; 2000ms */#include <iostream>using namespace std;int sums(int i,int j);int deal(short a[],int n);int k = 0;int x = 0;short a[100001];int main(){ int t; int n; scanf("%d",&t); for(int j原创 2010-07-15 15:47:00 · 641 阅读 · 0 评论 -
堆刷选排序
<br />#include <iostream>using namespace std;void createHeap(int a[]);void sortHeap(int a[],int n);int main(){ int n ; cin>>n; int *a = new int[n+1]; a[0] = 0; for(int i = 1;i<=n;i++) cin>>a[i]; return 0;}void sortHeap(int a[],原创 2010-07-15 15:39:00 · 466 阅读 · 0 评论 -
Prim算法
<br />/*算法核心标记点集合 将其分成两个部分 一个部分是已经访问另一个部分是没有访问在已经访问的点中找到与其邻接的路径最短的点反复查找直到所有的点查找完毕主要算法是 贪心法--邻接点*/#include <iostream>#include <fstream>using namespace std;const int MAX = 99999;void print(int n,int m);void prim(int n,int g[100][100]原创 2010-07-15 15:38:00 · 463 阅读 · 0 评论 -
Java程序员必知的8大排序
看到一个简单的好东西,顺了过来 8种排序之间的关系: 1, 直接插入排序(1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。(2)实例(3)用java实现 package com.njue; public转载 2012-08-27 09:20:25 · 817 阅读 · 0 评论