Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C สำหรับปัญหาการเลือกกิจกรรม


ปัญหาการเลือกกิจกรรมเป็นปัญหาที่เราได้รับชุดกิจกรรมพร้อมเวลาเริ่มต้นและสิ้นสุด และเราจำเป็นต้องค้นหากิจกรรมทั้งหมดที่บุคคลสามารถทำกิจกรรมเดียวในแต่ละครั้งได้

ปัญหานี้กำหนดอัลกอริธึมที่โลภเพื่อเลือกกิจกรรมถัดไปที่จะดำเนินการ มาทำความเข้าใจอัลกอริทึมที่โลภ . กันก่อน .

อัลกอริทึมโลภ เป็นอัลกอริธึมที่พยายามค้นหาวิธีแก้ไขปัญหาโดยค้นหาวิธีแก้ปัญหาทีละขั้นตอน สำหรับการเลือกขั้นตอนต่อไป อัลกอริธึมยังเลือกขั้นตอนที่น่าจะเป็นไปได้มากที่สุด กล่าวคือ สามารถนำไปสู่โซลูชันที่ปรับให้เหมาะสมทันทีเมื่อเปรียบเทียบกับการพักผ่อน อัลกอริธึมที่โลภใช้เพื่อแก้ปัญหาการปรับให้เหมาะสมในขณะที่พยายามค้นหาโซลูชันที่เหมาะสมที่สุดสำหรับขั้นตอนกลางถัดไปที่นำไปสู่วิธีแก้ปัญหาที่เหมาะสมที่สุดสำหรับปัญหาทั้งหมด

แม้ว่าอัลกอริธึมที่โลภจะเป็นทางออกที่ดี แต่มีปัญหาบางอย่างที่ไม่สามารถนำมาใช้ได้ ตัวอย่างเช่น 0-1 เป้ไม่สามารถแก้ไขได้โดยใช้อัลกอริธึมโลภ

อัลกอริทึม

อัลกอริทึมโลภมาตรฐานบางอย่างคือ -

1) Dijkstrata’s Shortest Path
2) Minimum Spanning Tree (MST) {prim’s and kruskal’s}
3) Huffman coding

ปัญหาการเลือกไม่ใช้งาน เราได้รับ n ปัญหาเกี่ยวกับเวลาเริ่มต้นและสิ้นสุด และเราจำเป็นต้องเลือกจำนวนกิจกรรมสูงสุดที่แต่ละคนสามารถทำได้ โดยกำหนดให้เขาทำกิจกรรมเดียวในช่วงเวลาหนึ่งได้

มี 3 กิจกรรม เรียงตามลำดับเวลาจบ

Start = [1 , 5 , 12 ]
End = [10, 13, 23]

ที่นี่บุคคลจะสามารถทำกิจกรรมได้ไม่เกินสองกิจกรรม กิจกรรมที่ดำเนินการได้คือ [0, 2]

ตัวอย่าง

#include<stdio.h>
int main(){
   int start[] = {1 , 5 , 12};
   int finish[] = {10, 13, 23};
   int activities = sizeof(start)/sizeof(start[0]);
   int i, j;
   printf ("Following activities are selected \t");
   i = 0;
   printf("%d\t", i);
   for (j = 1; j < activities; j++){
      if (start[j] >= finish[i]){
         printf ("%d ", j);
         i = j;
      }
   }
   return 0;
}

ผลลัพธ์

Following activities are selected 0 2