สองชุดเป็นชุดที่ไม่ปะติดปะต่อเมื่อไม่มีองค์ประกอบร่วมกัน กล่าวอีกนัยหนึ่ง หากเราได้จุดตัดของสองเซต เราก็จะได้เซตว่าง
วิธีการนั้นง่าย ในอัลกอริธึมนี้ ให้สองชุด เราคิดว่าทั้งสองชุดได้รับการจัดเรียงแล้ว รายการจะถูกเปรียบเทียบระหว่างสองชุด เมื่อมีการจับคู่ก็จะไม่ใช่ชุดที่ไม่ปะติดปะต่อกัน เมื่อไม่มีรายการใดที่ตรงกัน จะเป็นชุดที่ไม่ปะติดปะต่อกัน
อินพุตและเอาต์พุต
Input: Two sets: set1: {15, 12, 36, 21, 14} set2: {7, 89, 56, 32} Output: Both sets are disjoint
อัลกอริทึม
isDisjoint(set1, set2)
ป้อนข้อมูล :สองชุด
ผลลัพธ์: เป็นจริงเมื่อทั้งสองชุดไม่ปะติดปะต่อกัน
Begin i1 := start of first set i2 := start of second set while i1 in set1 and i2 in set 2, do if set1[i1] < set2[i2], then i1 := i1 + 1 else if set2[i2] < set1[i1], then i2 := i2 + 1 else return false done return true End
ตัวอย่าง
#include<iostream> #include<set> using namespace std; bool isDisjoint(set<int> set1, set<int> set2) { set<int>::iterator i1, i2; i1 = set1.begin(); i2 = set2.begin(); //initialize iterators with first element while(i1 != set1.end() && i2 != set2.end()) { //when both set have some elements to check if(*i1 < *i2) i1++; //when item of first set is less than second set else if(*i2 < *i1) i2++; //when item of second set is less than first set else return false; //if items are matched, sets are not disjoint } return true; } int main() { set<int> set1, set2; int n1, n2; cout << "Enter number of elements in set 1: "; cin >>n1; while(n1 != set1.size()) { //duplicate items will be discarded int item; cout << "Enter element: "; cin >> item; set1.insert(item); } cout << "Enter number of elements in set 2: "; cin >>n2; while(n2 != set2.size()) { int item; cout << "Enter element: "; cin >> item; set2.insert(item); } if(isDisjoint(set1, set2)) cout << "Both sets are disjoint"; else cout << "Sets are not disjoint"; }
ผลลัพธ์
Enter number of elements in set 1: 5 Enter element: 15 Enter element: 12 Enter element: 36 Enter element: 21 Enter element: 14 Enter number of elements in set 2: 4 Enter element: 7 Enter element: 89 Enter element: 56 Enter element: 32 Both sets are disjoint