檢查給定的兩個集合是否是 disjoint 集合?
當兩個集合沒有公共元素時,它們是 disjoint 集合。換句話說,如果我們得到兩個集合的交集,那麼我們將會得到空集。
該方法很簡單,在這個演算法中,給定了兩個集合。我們假設這兩個集合已經被排序,在兩個集合之間比較項。當匹配時,它不是一個 disjoint 集合,當沒有項匹配時,它們是 disjoint 集合。
輸入和輸出
Input:
Two sets:
set1: {15, 12, 36, 21, 14}
set2: {7, 89, 56, 32}
Output:
Both sets are disjoint演算法
isDisjoint(set1, set2)
輸入:兩個集合。
輸出:當兩個集合都是 disjoint 集合時為 True。
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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP