問題を解決する貪欲なアルゴリズム (C 言語)

記事ディレクトリ


序文

問題解決:
貪欲な方法でアクティビティ スケジューリング問題を解く
[問題の説明] あるリソースを使用する必要がある 11 個のアクティビティからなる集合 S、S={1,...,11} があるとします。このリソースは、常に 1 つのアクティビティによってのみ占有できます。アクティビティ i には開始時刻 bi と終了時刻 ei (bi<ei) があり、最も早いアクティビティ実行時刻が 0 であると仮定すると、その実行時刻は ei-bi です。
アクティビティの実行が開始されると、実行が完了するまで中断できません。アクティビティ i とアクティビティ j が bi≧ej または bj≧ei である場合、2 つのアクティビティは互換性があると言われます。
たとえば、次の表の n=11 アクティビティの場合、
設計アルゴリズムは、配置されたすべてのアクティビティの数が最大になるように、最適なアクティビティ配置スキームを探します。
ここに画像の説明を挿入


1. 実験手順と結果

コード:

#include<stdio.h>
#include<string.h>

int n;
int b[100];
int e[100];
int cnt=0;
int B[100];
int E[100];

void solve();
void output();
void fun();

int main()
{
    
       int j;
    memset(B,0,sizeof(B));
    memset(E,0,sizeof(E));
	printf("请输入活动的数量:\n");
	scanf("%d",&n);
	fun();
	printf("请输入活动起始时间:\n");
	for(j=0;j<n;j++)
	{
    
    
		printf("请输入第%d个活动起始时间: ",j+1);
		scanf("%d",&b[j]);
	}
	fun();
	printf("请输入活动结束时间:\n");
	for(j=0;j<n;j++)
	{
    
    
		printf("请输入第%d个活动结束时间: ",j+1);
		scanf("%d",&e[j]);
	}
	fun();
	printf("活动名称:");
	for(j=0;j<n;j++)
	{
    
    
		printf("%3d",j+1);
	}
	printf("\n起始时间:");
	for(j=0;j<n;j++)
	{
    
    
		printf("%3d",b[j]);
	}
	printf("\n结束时间:");
	for(j=0;j<n;j++)
	{
    
    
		printf("%3d",e[j]);
	}
	printf("\n");
	fun();
    solve();
    output();
    return 0;
}
void solve()
{
    
    
    int i,j=0;
    B[0]=b[0];
    E[0]=e[0];
    for(i=0;i<=n;i++){
    
    
        if(b[i]>=e[j]){
    
    
            j=i;
            cnt++;
            B[cnt]=b[j];
            E[cnt]=e[j];
        }
    }
}
void output()
{
    
    
    int i;
    printf("求解结果为:\n");
    printf("选取的活动为:\n");
    for(i=0;i<=cnt;i++){
    
    
        printf("第%d个活动:[%d,%d]\n",B[i],E[i]);
    }
    printf("\n共选取%d个活动\n",cnt+1);
}
void fun()
{
    
    
	printf("      ******************************************\n");
}

結果は次のとおりです。
ここに画像の説明を挿入

要約する

この実験は比較的簡単に実装できます. 2 つの配列を作成することにより, 開始時刻と終了時刻をそれぞれ記録し, 貪欲なアルゴリズムを設定します.構造体を使用する効率を大幅に低下させる入れ込みは、それらの効果をグローバル変数と空の配列に置き換えますが、同時に、アクティビティの終了時刻をインクリメンタルにソートする効果がないためです。リビジョンには、長所と短所があります。学習する前に使用を検討できます。このプログラムのソート アルゴリズムは改善する価値があります。
ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_51759592/article/details/125864613