自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (2)
  • 问答 (2)
  • 收藏
  • 关注

原创 编写一个将输入复制到输出的程序,并将其中的一个或多个连续的空格用一个空格代替

#include int main(){ int c; int inspace=0; while((c=getchar())!=EOF) { if(c==' ') { if(inspace==0)//,如果c为空格,只有在inspace为0时才输出字符c { inspace=1; putchar(c); } } i

2013-09-20 10:02:53 1086

原创 贪心算法解决部分背包问题 在O(lgn)时间内

//16.2-6 部分背包问题#include using namespace std;struct Object//物品信息结构体{ int weight;//物品重量 int value;//物品价值 float num;//可以装入的物品数量 int avl;//物品的单位价值};void swap(Object *p,Object *q)//交换两个元素{ Ob

2013-09-19 19:00:58 2639

原创 算法导论答案 16.2-4

//16.2-4#include using namespace std;#define N 6int x[N+1]={0,10,40,60,90,120,140},f[N+1]={0};//f用于标记某一站是否加油,x[i]表示第i个加油站距离起始点的距离void Greedy_Select(int x[],int f[])//选择在哪一个加油站停车{ int n=30;//邮箱

2013-09-19 10:51:11 4099

原创 算法导论答案 16.2-2 0-1背包问题的动态规划算法

//16.2-2 动态规划算法求解0-1背包问题#include using namespace std;#define W 50#define N 3int v[N+1]={0,60,100,120};//物品价值int w[N+1]={0,10,20,30};//物品重量int c[N+1][W+1]={0};//c[i][j]表示在剩余容量为j的情况下,对于物品1.....

2013-09-18 10:20:16 2190

原创 算法导论 16.1-1活动选择问题的动态规划算法 答案

//16.1-1 活动选择问题的动态规划算法#include #include #define N 11void dynamic_activity_selector(int *s,int *f,int c[N+1][N+1],int ret[N+1][N+1]);void trace_route(int ret[N+1][N+1],int i,int j);void dynam

2013-09-17 11:01:31 3107 1

原创 算法导论 第16章 活动选择问题的递归和迭代贪心算法

/*//递归贪心算法求解活动选择问题#include using namespace std;#define N 11int s[N+1]={0,1,3,0,5,3,5,6,8,8,2,12};int f[N+1]={0,4,5,6,7,8,9,10,11,12,13,14};int a[N+1];void Recursive_Activity_Selector(int s[

2013-09-17 09:15:30 1481

原创 算法导论思考题答案 思考题15-2 整齐打印

解决思路: 由问题描述可知道,我们需要做的就是n个单词分成若干份,这与矩阵连乘问题有相似之处。行尾的额外空格符数量M-j+i-∑lk(iM-(j-i)-∑lk,其中j-i是表示该行各个单词之间相隔的空格数量。我们设lc[i,j]是第i个单词到第j个单词的额外空格符数量的立方,即是(M-j+i-∑lk)3(ilc[i,j]=∞,当M-j+i-∑lklc[i,j]=0,当M-j

2013-09-16 18:56:57 1826

原创 算法导论答案 思考题15-1 双欧几里德旅行商问题

解题思路:根据简化后的双调欧几里得旅行问题的性质,将点集依据各点x坐标单调递增来进行编号,我们设b[i,j]是最短双调闭合旅程P(i,j)的长度(iP(i,j)是指从点P[i]开始,严格地向左走(即是每次经过的点的x坐标都比前一个点的x坐标要小),直到最左点P[1],然后再严格向右走,直到终点P[j]为止,在从P[i]到P[j]过程中的点有且只经过一次。设distance[i,j]是点

2013-09-16 11:06:24 1388

原创 算法导论15.5 最优二叉查找树

//15.5最优二叉查找树# includeusing namespace std;#define N 5double e[N+2][N+2]={0},w[N+2][N+2]={0};int root[N+2][N+2]={0};void Optimal_Bst(double p[],double q[],int n)//{ int i,j,l,r; double t; f

2013-09-11 11:11:48 1001

原创 算法导论15.4-5 答案

//15.4-5请给出一个O(n的平方)的算法,使之能找出一个n个数的序列中最长的单调递增子序列#include #include using namespace std;int c[10][10];int b[10][10];#define x 10#define y 10int A[10]={0,2,4,5,9,8,7,6,8,9};int partition(int A

2013-09-10 10:40:48 2238

原创 算法导论15.4 最长公共子序列

//15.4最长公共子序列#include #include using namespace std;int c[8][7];int b[8][7];#define x 8#define y 7void Lcs_Length(char s1[x],char s2[y])//求解最长公共序列{ int i,j; for(i=1;i<x;++i) c[i][0]=0; f

2013-09-05 11:08:06 803

原创 15.2 矩阵链乘法

//15.2矩阵链乘法# include using namespace std;#define Length 7int P[7],M[7][7],S[7][7];void Input()//输入矩阵的维数{ int i; for(i=0;i<7;++i) cin>>P[i];}void Matrix_Chain_Order()//求矩阵的链乘法序列{ int i

2013-09-03 20:32:59 462

原创 算法导论15.1 装配线调度问题

//15.1装配线调度问题#include using namespace std;#define I 2#define J 6int a[I+1][J+1],e[I+1],x[I+1],t[I+1][J+1],n=J;int f[I+1][J+1],l[I+1][J+1],rf,rl;void Input()//输入{ int i,j; for(i=1;i<=I;++i

2013-09-03 10:02:16 1004

原创 算法导论12.1-3答案

//12.1-3 给出一个非递归的中序树遍历算法#include using namespace std;//二叉树结点的结构体struct node{ int key;//值 node *left;//指向左孩子 node *right;//指向右孩子 node(){}//默认构造函数 node(int x):key(x),left(NULL),right(NULL){}/

2013-08-28 11:39:14 1007

原创 算法导论11.1-4答案

//11.1-4#include #include int Search(int Array[],int Stack[],int x){ int p=Array[x]; if(p>0&&p<Stack[0]&&x==Stack[p]) return p; return 0;}int Insert(int Array[],int Stack[],int x){ int

2013-08-25 11:56:13 934

原创 算法导论10.2-7答案

//10.2-7请给出一个O(n)时间的非递归过程,它对含n个元素的单链表的链进行逆转。除了链表本身占用的空间外,该过程应仅使用固定量的存储空间#include #include #define NULL 0typedef struct CirList{ int Element; CirList *Next;}*Cl;Cl InitCirList(){ Cl list;

2013-08-24 18:43:20 915

原创 算法导论10.2-6答案

//10.2-6 动态集合Union以两个不相交的集合S1和S2作为输入,输出集合S=S1US2包含了S1和S2的所有元素。该操作常常会破坏S1和S2。//说明应如何选用一种合适的表数据结构,以便支持在O(1)时间内的UNION操作。方法是在链表中设置尾指针,然后将其中一个链表的尾指针连接到另一个链表的表头#include #include typedef struct CirList

2013-08-23 23:28:09 1088

原创 10.2-5 用环形单链表来实现字典操作INSERT、DELETE和SEARCH,并给出它们的运行时间 算法导论答案

//10.2-5 用环形单链表来实现字典操作INSERT、DELETE和SEARCH,并给出它们的运行时间#include #include typedef struct CirList{ int Element; CirList *Next;}*Cl;Cl InitCirList(){ Cl list; list=(Cl)malloc(sizeof(struct Cir

2013-08-23 22:12:56 1025

原创 用一个单链表L实现一个栈 要求PUSH和POP操作的时间仍为O(1) 算法导论10.2-2答案

#include #include #define NULL 0typedef struct Stack *S1;typedef struct Node{ int Element; Node *next;}Snode,*node;struct Stack{ Snode *top;};S1 InitStack(){ S1 s; s=(S1)malloc(sizeo

2013-08-23 19:41:11 2832 2

原创 用两个队列实现一个栈 算法导论10.1-7答案

//用两个队列实现一个栈#include #include typedef struct Queue *Qu;struct Queue{ int Front; int Rear; int *Array; int size;};Qu InitQueue(int size){ Qu Q; Q=(Qu)malloc(sizeof(struct Queue)); Q->F

2013-08-23 17:32:24 867

原创 算法导论10.1-2答案

//10.1-2 说明如何用一个数组A[1...n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢。注意PUSH和POP操作的时间应为O(1)#include #include struct Stack;typedef struct Stack *St;#define N 10struct Stack{ int Left_Top; int Right_Top;

2013-08-22 22:34:31 1436

原创 从一个数组中找出第k小元素的随机化算法 c语言实现 算法导论第九章

//Randomized_select,select a particular number from an array in linear time#include #include void swap(int *p,int *q)//交换元素{int temp;temp=*p;*p=*q;*q=temp;}int Random(int p,int r)/

2013-08-05 21:45:44 1586

原创 同时找出数组的最大值和最小值,要求时间复杂度为o(n)

#include void max_min(int A[],int n,int& max,int& min){int i;if(n%2==0){if(A[0]>A[1]){max=A[0];min=A[1];}else{max=A[1];min=A[0];}for(i=2;i{if(A[i]>A[i+1]){i

2013-08-05 20:31:21 7232

原创 基数排序 C语言实现

//Radix_Sort#include  #include /*被排序元素的最大位数,4则意味着只能排序#define WIDTH 4 #define MAXK 10  //位数划分基于的基数,10表示为10进制划分void radixSort(int a[], int n) {int i;void innerCountingSort(int a[],

2013-08-04 23:01:17 1178 1

原创 堆排序C语言实现 算法导论

//Heap_sort#include int Left(int i)//return left child{return 2*i+1;}int Right(int i)//return right child{return 2*i+2;}void swap(int *p1,int *p2){int temp;te

2013-08-04 17:11:05 640

原创 快速排序的随机化算法

//快速排序的随机化算法#include #include #define N 10//Exchange the valuevoid swap(int *p,int *q){int temp;temp=*p;*p=*q;*q=temp;}//generate a random number between p and qint rando

2013-07-30 22:17:50 613

原创 用斯特拉森算法求解矩阵乘法

#include #define  N  2//matrix + matrixvoid plus( int t[N/2][N/2], int r[N/2][N/2], int s[N/2][N/2] ){int i, j;for( i = 0; i {for( j = 0; j {t[i][j] = r[i][j] + s[i][j];}

2013-07-30 12:07:20 2274

原创 利用矩阵求解fibonacci数列 时间复杂度为O(lgn)

//利用矩阵求解fibonacci数列#include #include ///////////////////////////////////////////////////////////////////////// A 2 by 2 matrix////////////////////////////////////////////////////////////////

2013-07-30 10:46:22 894

原创 寻找逆序对的算法,要求运行时间为O(nlgn),算法导论答案

#include int merge_inversion(int A[],int p,int q,int r){int n1,n2,i,j,k,num=0;n1=q-p+1;n2=r-q;int L[10],R[10];for(i=0;i!=n1;++i)L[i]=A[p+i];for(j=0;j!=n2;++j)R[j]=A[q+j+1];L[n1]=

2013-07-23 23:54:41 1046

原创 删除有序数组中重复元素的一个非常简洁的算法

#include int removeDuplicate( int* source, const int size ){    int curPos = 1;    for( int i = 1; i         if( source[i] != source[i-1] ) source[curPos++] = source[i];    return size

2013-07-22 22:52:09 1003

原创 算法导论课后题 2.3-7答案

题目:请给出一个运行时间为O ( n lg n ) 的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。解决该问题的算法如下:1.对S中的元素进行排序(需要运行时间为O ( n lg n ) 的算法);2.构造一个集合S'={{ z : z = x − y }.(其中x我们要判断的元素,y为S中的所有元素);3.对S'中的元素进

2013-07-22 22:33:26 1206

原创 算法导论2.3-5答案 分别采用递归与非递归方式实现二分查找 c++实现

//2.3-5 采用递归方式的二分查找,注意输入的数组是有顺序的#include #include using namespace std;vector::size_type Binary_Search(vector A,int key,vector::size_type first,vector::size_type last){if(first>last)r

2013-07-20 10:51:41 861

原创 归并排序 (不采用哨兵) 算法导论2.3-2答案

# include#define NULL 0void mergearray(int a[], int first, int mid, int last, int temp[])  {      int i = first, j = mid + 1;      int m = mid,   n = last;      int k = 0;            w

2013-07-19 16:35:35 1305

原创 算法导论第二版2.2-2 答案

#include #include using namespace std;int main(){vector A;int x;coutwhile(cin>>x)A.push_back(x);for(vector::size_type i=0;i{int m=i;for(vector::size_type j=i+1;j{if

2013-07-19 09:37:42 1284

原创 算法导论第二版 习题2.1-4答案

#include #define n 5void main(){int A[n]={0,1,1,0,1},B[n]={0,0,1,1,0};int C[n+1]={0};for(int i=0;i{if((A[i]+B[i]+C[i])==2){C[i+1]=1;C[i]=0;}elseif((A[i]+B[i]+C[i])==3)

2013-07-18 20:24:41 1453

原创 理解何时执行哪个构造函数和复制控制成员

C++ Primer第四版习题13.14 理解复制控制成员和构造函数的一个良好方式是定义一个简单的类,该类具有这些成员,每个成员打印自己的名字:struct Exmpl {   Exmpl() {std::cout    Exmpl(const Exmpl&)   { std::cout    //...};编写一个像Exmpl这样的类,给出复制控制成员和其他构造函

2013-07-12 21:10:23 800

原创 基数排序

//为什么不从高位到低位排序,首先输入的所有的数中的各个数的位数不一定相同,只通过对高位进行一次排序是不行的,#include using namespace std;const int base=10;//struct wx{        int num;        wx *next;        wx()        {

2013-06-05 22:30:28 721

原创 计数排序

//计数排序# includevoid Count_Sort(int A[],int len,int B[],int k){int c[10];for(int i=0;i{c[i]=0;}//c[i]包含等于i的元素个数for(int j=1;j{c[A[j]]=c[A[j]]+1;}//c[i]为包含小于或等于i的元素个数for(i=1

2013-06-04 21:24:01 476

原创 桶排序

#include    2 #include    3    4 using namespace std;   5    6 struct Node   7 {   8     double value;   9     Node *next;  10 };  11 //桶排序主程序  12 void bucketSort(double* arr, in

2013-06-03 22:12:34 591

原创 容器迭代器失效问题

众所周知当使用一个容器的insert或者erase函数通过迭代器插入或删除元素"可能"会导致迭代器失效,因此很多建议都是让我们获取insert或者erase返回的迭代器,以便用重新获取新的有效的迭代器进行正确的操作:view plaincopy to clipboardprint?iter=vec.insert(iter);   iter=vec.erase(iter);

2013-05-29 10:47:20 752 1

c程序设计题解与上机指导

c语言程序设计 上机指导 谭浩强 习题代码 有用的

2013-04-25

算法导论答案

算法导论 第四版 中文版 答案 经典算法书 不错的 可以看看

2013-04-25

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除