導航:首頁 > 源碼編譯 > 貪心演算法安排活動

貪心演算法安排活動

發布時間:2022-07-15 06:09:34

① 活動安排問題,貪心演算法Greedyselector 卻總能求得整體的最優解,這個能用數學歸納法證明 求大俠指導

貪心演算法Greedyselector
第n + 1次select都比第 n 次更優
n 趨於 無限 的時候 總能得到最優解

② C語言程序問題——活動安排問題

題目出得不嚴密,題目要求是「計算安排的活動最多時會場使用時間」,但當「安排的活動最多」有多種安排方式,題目中卻沒說輸出這多種方式中的哪一種的會場使用時間。例如 :當有3項活動要安排,開始時間和結束時間分別是1 2、3 5、4 5,這時可以安排第一項和第二項活動,也可以安排第一項和第三項活動,前者的會場使用時間是5,後者是4,這時是輸出4還是5,題目中沒用指出。先假設測試數據不會出現上述情況,則利用貪心演算法求解活動安排問題是一種最常用的方法:#include<stdio.h>
#include<stdlib.h>
struct activity
{
int start;
int end;
}act[8501];
int comp(const void *p, const void *q)
{
struct activity *a=(struct activity *)p;
struct activity *b=(struct activity *)q;
return a->end-b->end;
}
int main()
{
int i,k,res,e;
while(scanf("%d",&k)!=EOF)
{
for(i=0;i<k;i++) scanf("%d%d",&act[i].start,&act[i].end);
qsort(act,k,sizeof(act[0]),comp);
res=act[0].end-act[0].start+1;
e=act[0].end;
for(i=1;i<k;i++)
{
if(act[i].start>e)
{
res+=act[i].end-act[i].start+1;
e=act[i].end;
}
}
printf("%d\n",res);
}
return 0;
}

③ 貪心演算法 活動安排問題

這道題的貪心演算法比較容易理解,我就不多說明了,只是提到一下演算法思路1、建立數學模型描述問題。我在這里將時間理解成一條直線,上面有若干個點,可能是某些活動的起始時間點,或終止時間點。在具體一下,如果編程來實現的話,將時間抽象成鏈表數組,數組下標代表其實時間,該下標對應的鏈表代表在這個時間起始的活動都有哪些,具體參照程序注釋。2、問題分解。為了安排更多的活動,那麼每次選取佔用時間最少的活動就好。那麼從一開始就選取結束時間最早的,然後尋找在這個時間點上起始的活動,以此類推就可以找出貪心解。程序代碼:#include<stdio.h>
struct inode //自定義的結構體
{
int end; //表示結束時間
inode *next; //指向下一個節點的指針
};int main()
{
inode start[10001],*pt;
int a,b,i,num=0; //num負責計數,i控制循環,a,b輸入時候使用
for(i=0;i<10001;i++) //初始化
{
start[i].next=NULL;
}
while(scanf("%d %d",&a,&b)) //輸入並建立數據結構
{
if(a==0&&b==0) break;
pt=new inode; //創建新的節點,然後將該節點插入相應的位置
pt->end=b;
pt->next=start[a].next;
start[a].next=pt;
}
i=0;
while(i<10001) //進行貪心演算法,i表示當前時間
{
if(start[i].next==NULL)
{
i++; //該時間無活動開始
}
else
{
int temp=10001; //臨時變數,存儲該鏈表中最早的終止時間
for(pt=start[i].next;pt!=NULL;pt=pt->next)
{
if(pt->end<temp)
{
temp=pt->end;
}
}
i=temp; //將當前時間設置成前一子問題的終止時間
num++;
}
}
printf("%d\n",num); //列印結果
return 0;
}代碼並不一定是最快速的,但是可以求出貪心解,如果你做的是ACM編程題目,不保證能AC注釋我盡力寫了,希望對你有幫助。

④ OJ貪心演算法,活動安排,求大神解答

按結束時間從小到大排序,之後從開始貪心即可

⑤ 貪心演算法

#include <stdio.h>

#define M 100

void main()

{

int i,j,k,temp,m,n;

int t[M]={2,14,4,16,6,5,3},p[M]={1,2,3,4,5,6,7},s[M],d[M]={0};

m=3;n=7;

for(i=0;i<7;i++)

for(j=0;j<7-i;j++)

if(t[j]<t[j+1])

{

temp=t[j];

t[j]=t[j+1];

t[j+1]=temp;

temp=p[j];

p[j]=p[j+1];

p[j+1]=temp;

}

for(i=0;i<m;i++) //求時間。

{

s[i]=p[i];

d[i]=t[i];

}

for(k=0;k<m;k++)

printf(" %d",d[k]);

printf("\n");

for(i=m;i<n;i++)

{

for(k=0;k<m-1;k++) //求最小。

{

temp=d[k];

if(temp>d[k+1])

{temp=d[k+1];j=k+1;}

}

printf("這是最小下標的: %d\n",j);

printf("最小的值: %d\n",temp);

for(k=0;k<m;k++)

printf(" %d",d[k]);

printf("\n");

//j=temp;

s[j]=s[j]+p[i];

d[j]=d[j]+t[i];

}

printf("\n");

for(k=0;k<7;k++)

printf(" %d",t[k]);

printf("\n");

for(k=0;k<7;k++)

printf(" %d",p[k]);

printf("\n");

for(k=0;k<m;k++)

printf(" %d",s[k]);

printf("\n");

for(k=0;k<m;k++)

printf(" %d",d[k]);

printf("\n");

}

⑥ 演算法分析與設計這門課程第四章貪心演算法的知識點有哪些

演算法分析與設計這門課第四章貪心演算法的知識點包含章節導引,第一節活動安排問題,第二節貪心演算法基本要素,第三節最優裝載,第四節單源最短路徑,第五節多機調度問題,課後練習,。

⑦ 貪心演算法之會場安排問題

三星演算法之間最好還是不要安排互相的問題,這樣不利於你們倆的關系的便有好。

⑧ 貪心演算法活動安排問題中....按結束時間的非減序排序是什麼意思

就是升序排序

⑨ 貪心演算法 會場或者活動安排

原題在哪裡?

閱讀全文

與貪心演算法安排活動相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:577
python員工信息登記表 瀏覽:375
高中美術pdf 瀏覽:158
java實現排列 瀏覽:511
javavector的用法 瀏覽:980
osi實現加密的三層 瀏覽:230
大眾寶來原廠中控如何安裝app 瀏覽:912
linux內核根文件系統 瀏覽:241
3d的命令面板不見了 瀏覽:524
武漢理工大學伺服器ip地址 瀏覽:147
亞馬遜雲伺服器登錄 瀏覽:523
安卓手機如何進行文件處理 瀏覽:70
mysql執行系統命令 瀏覽:929
php支持curlhttps 瀏覽:142
新預演算法責任 瀏覽:443
伺服器如何處理5萬人同時在線 瀏覽:249
哈夫曼編碼數據壓縮 瀏覽:424
鎖定伺服器是什麼意思 瀏覽:383
場景檢測演算法 瀏覽:616
解壓手機軟體觸屏 瀏覽:348