贪心方法-带有限期和收益的单位时间的作业排序贪心算法和背包问题

参考《计算机算法基础》华中科技大学版

 

1. 带有限期和收益的单位时间的作业排序贪心算法

/* 带有限期和收益的单位时间的作业排序贪心算法 */ #include /*算法1,复杂度O(n*n)*/ void JS(int d[], int J[], int n, int &k) { /*终止时,d[J[i]]<=d[J[i+1]]*/ int i,j,r; d[0] = J[0] = 0; k = 1; J[1] = 1; for(i=2; i<=n; i++) { r = k; while(d[J[r]] > d[i] && d[J[r]] != r) r--; if(d[J[r]] <= d[i] && d[i]>r) { for(j=k; j>r; j--) J[i+1] = J[i]; J[r+1] = i; k++; } } } /*算法2,复杂度O(n)*/ void FJS(int d[], int J[], int n, int &k) { int i,j,f[100]; for(i=0; i<=n; i++) { f[i] = i; P[i] = -1; } k = 0; for(i=1; i<=n; i++) { if(n>d[i]) j = d[i]; else j = n; while(f[j]!=j) j = f[j]; if(f[j]!=0) { k++; J[k] = i; f[j] = f[j-1]; } } } void sort(int p[], int d[], int m) { int temp; int i,j,k; for(i=0; i

 

2. 背包问题

/* 贪心算法设计的核心是—选择能产生问题最优解的最优量度标准 背包问题 */ #include void sort(float p[], float w[], int m) { float p_m[100],temp; int i,j,k; for(i=0; i cu) break; x[i] = 1; cu -= w[i]; } if(i

你可能感兴趣的:(数据结构与算法)