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

ช่วงเวลา Disjoint สูงสุดใน C ++


คำอธิบาย

กำหนดชุดของช่วง N ภารกิจคือการค้นหาชุดสูงสุดของช่วงที่ไม่ปะติดปะต่อกันระหว่างกัน สองช่วง [i, j] &[k,l] เรียกว่าไม่ปะติดปะต่อกันหากไม่มีจุดร่วมกัน

หากช่วงเวลาคือ {{10, 20} {23, 35}, {15, 21}, {37, 41}} คู่ที่ไม่ทับซ้อนกันสูงสุดจะเป็น −

{10, 20}{23, 35}{37, 41}

โปรดทราบว่าเราไม่สามารถรวม {15, 21} ได้ เนื่องจากจะทับซ้อนกับ {10, 20}

อัลกอริทึม

<ก่อน>1. จัดเรียงช่วงเวลาตามจุดสิ้นสุด2. ข้ามช่วงทั้งหมด หากเราได้ช่วงเวลาที่ทับซ้อนกันสองช่วง ให้เลือกช่วงเวลาที่มีจุดสิ้นสุดที่ต่ำกว่า การเลือกช่วงเวลาดังกล่าวจะช่วยให้มั่นใจได้ว่าช่วงต่างๆ จะสามารถรองรับได้โดยไม่ทับซ้อนกัน3 ทำซ้ำขั้นตอนเดียวกันสำหรับช่วงเวลาทั้งหมดและพิมพ์ช่วงเวลาทั้งหมดที่ตรงตามเกณฑ์เหล่านี้

ตัวอย่าง

#include ใช้เนมสเปซ std;bool sortFun(pair &a, pair &b){ return (a.second > ช่วงเวลา){ sort(intervals.begin(), intervals.end(), sortFun); ศาล <<"{" <<ช่วง[0].แรก <<", " <<ช่วง[0].วินาที <<"}\n"; int r1 =ช่วงเวลา[0].วินาที; สำหรับ (int i =1; i  r1) { cout <<"{" <> ช่วงเวลา ={ {10, 20}, {23, 35}, {15, 21}, {37, 41} }; cout <<"คู่ที่ไม่ปะติดปะต่อกันสูงสุดคือ:\n"; getMaxDisjointInterval (ช่วงเวลา); คืนค่า 0;}

ผลลัพธ์

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -

คู่ที่ไม่ปะติดปะต่อกันสูงสุดคือ:{10, 20}{23, 35}{37, 41}