Himpunan (set) adalah struktur data yang dapat menyimpan nilai-nilai tertentu tanpa mempertimbangkan urutannya. Himpunan menerapkan konsep matematika tentang kumpulan nilai yang unik dan tidak berurutan, serta mendukung operasi seperti penggabungan, irisan, perbedaan, dan subset. Himpunan pada C++ didefinisikan dalam pustaka standar dan dapat diimplementasikan menggunakan array.
2. Definisi
Himpunan (Set) adalah sebuah struktur data penyimpanan
yang dapat menyimpan nilai tertentu tanpa terpaut urutan.
Himpunan atau set ini merupakan implementasi dari
konsep pada definisi matematikanya yaitu finite set
3. Karakteristik Himpunan
Himpunan dapat tidak berisi atau himpunan kosong atau
memiliki isi (lebih dari 1).
Apabila himpunan diisi dengan sebuah nilai kemudian diisi
lagi dengan nilai yang sama, maka nilai tersebut tidak
disertakan karena sudah ada di dalam himpunan tersebut.
Himpunan ini menerima nilai yang unik dan tidak redundan
4. Operasi Himpunan
Sama seperti operasi himpunan pada matematika, struktur
data himpunan juga dapat memiliki operasi yang sama
seperti:
1. gabungan (union)
2. irisan (intersection)
3. perbedaan (difference)
4. bagian (subset)
5. Primitif Himpunan
Selain itu, terdapat juga operasi primitif yang merupakan
dasar pemeriksaan dari sebuah himpunan seperti:
1. is_element_of (apakah merupakan elemen)
2. is_empty (apakah himpunan kosong)
3. size (berapakah ukuran himpunan)
4. insert (menambahkan elemen pada himpunan)
6. Himpunan (Set) pada C++
Sebuah himpunan pada bahasa pemrograman C++ sudah
didefinisikan pada pustaka yang ada.
Jika ingin menggunakannya kita hanya perlu
menyertakannya dengan :
#include <set>
7. Multiset
Himpunan juga dapat berisi himpunan lainnya seperti
pada definisi pada matematika.
Akan tetapi tipe yang disimpan perlu sejenis atau
homogen dalam sebuah set.
8. TDA Set
Berikut ini adalah contoh struktur data himpunan
{ Contoh tipe himpunan bilangan bulat atau integer}
type Set : < Capacity : Integer,
Last : Integer,
S: array [1..Capacity] of integer >
Set menyimpan nilainya pada sebuah larik.
Terdapat capacity pada himpunan untuk menetapkan batasan
jumlah nilai yang dapat disimpan.
Selain itu terdapat Last yang menandakan indeks kosong
terakhir pada larik penampung nilai sehingga tidak perlu
pencarian indeks untuk menambah nilai baru.
9. Contoh Penggunaan Set
#include <iostream>
using namespace std;
typedef struct {
int capacity; // kapasitas dari sebuah himpunan
int last; // indeks kosong terakhir dari himpunan
int *S; // larik dinamis yang didefinisikan sebagai penampung
} Set;
...
10. Contoh Penggunaan Set
...
Set makeSet (int capacity) {
Set tempSet;
tempSet.capacity = capacity; // inisialisasi kapasitas set
tempSet.last = 0; // set kosong, indeks terakhirnya adalah 0
tempSet.S = new int[capacity]; // inisialisasi larik penampung set
return tempSet;
}
bool is_element_of (Set S, int val) {
// telusuri nilai dalam penampung
for (int i = 0; i < S.capacity; i++) {
if(S.S[i] == val)
return true; // jika ada, kembalikan true
}
return false; // tidak ditemukan, kembalikan false
}
...
11. Contoh Penggunaan Set
...
void insertSet(Set S, int val) {
if (S.last != S.capacity) { // jika belum penuh, isi
if (S.last == 0) { // jika set kosong, langsung isi
S.S[0] = val;
S.last += 1; // geser posisi last dengan ditambah
}
else { // jika set tidak kosong
if (!is_element_of(S, val)) { // periksa apakah elemen tidak ada
S.S[S.last] = val; // isi nilai pada posisi last
S.last += 1; // geser posisi last dengan ditambah
}
}
}
}
...
12. Contoh Penggunaan Set
...
int main() {
Set setKu = makeSet(5); // buat set dengan kapasitas 5
insertSet(setKu, 10); // sisipkan nilai
insertSet(setKu, 9);
insertSet(setKu, 10); // nilai 10 yang kedua tidak masuk karena sudah ada
cout << setKu.S[0] << " " << setKu.S[1] << " " << setKu.S[2];
return 0;
}