Menggunakan BitArray Class

advertisement
STRUKTUR DATA DAN
KOMPUTASI LUNAK
BITARRAY CLASS
by:
Bagus Prabandaru (2210106070)
Yanu Perwira Adi Putra (2210106039)
MOTIVATING PROBLEM
- Menentukan Bilangan Prima Menggunakan Metode
Filter Eratosthenes
metode yang menyisihkan bilangan dari kelipatan bilangan
sebelumnya sampai yang tersisa adalah bilangan prima.
- Penyelesaian Masalah
penyelesaian dengan menggunakan array dan selanjutnya
akan diselesaikan menggunakan BitArray
CONTOH Metode Filter Eratosthenes
menentukan bilangan prima dari 100 bilangan integer
dengan menggunakan array
Dimulai dengan bilangan 2 yang merupakan bilangan
prima pertama, lalu menyisihkan semua bilangan yang
merupakan kelipatan dari bilangan 2.
Kemudian pindah dengan bilangan 3, lalu disisihkan semua
bilangan yang merupakan kelipatan dari bilangan 3.
Selanjutnya pindah dengan bilangan 5 dan bilangan yang
lain, dengan melakukan hal yang sama seperti
sebelumnya.
Setelah selesai mengidentifikasi semua bilangan, bilangan
yang tersisa adalah bilangan prima.
CONTOH Metode Filter Eratosthenes
menentukan bilangan prima dari 100 bilangan integer
dengan menggunakan BitArray
Menginisialisasi sebuah array dari 100 elemen dengan
setiap elemen di-set ke nilai 1.
Dimulai dengan indeks 2, masing-masing indeks array
diperiksa untuk melihat nilai 1 atau 0, jika nilai 1, maka
diperiksa apakah kelipatan dari 2, jika ia maka indeks di set
0.
Selanjutnya ke indeks 3 dan ke indeks yang lain dengan
menggunakan cara yang sama.
Setelah selesai mengidentifikasi semua elemen, elemen
yang tersisa adalah bilangan prima.
Manipulasi Bits dan Bit
Sistem Bilangan Biner
Memanipulasi Bilangan Biner Menggunakan
Operator Bitwise dan Bit-Shift
Sistem Bilangan Biner
Bilangan biner adalah string dari 0s dan 1s yang
mewakili basis 10(desimal) angka dalam basis 2.
ex.
00000000-0d (dimana d menandakan angka desimal)
00000001-1d
00000010-2d
00000011-3d
00000100-4d
00000101-5d
00000110-6d
Konversi biner ke desimal
ex.
nilai biner 00101010
penyelesaian
0 + 21 + 0 + 2 3 + 0 + 2 5 + 0 + 0 =
0 + 2 + 0 + 8 + 0 + 32 + 0 + 0 = 42
Memanipulasi Bilangan Biner Menggunakan Operator
Bitwise dan Bit-Shift (1)
Operator Bitwise : AND, OR, NOT
Operator ini adalah operator logika, digunakan untuk menggabungkan
ekspresi yang berhubungan dalam rangka untuk menghitung nilai tunggal Boolean.
Ketika digunakan dalam angka biner, true setara dengan 1 dan false setara dengan 0.
Ex :
00000001 and 00000000 -> 00000000
00000001 and 00000001 -> 00000001
00000010 and 00000001 -> 00000000
00000000 or 00000001 -> 00000001
00000001 or 00000000 -> 00000001
00000010 or 00000001 -> 00000011
00000000 Xor 00000001 -> 00000001
00000001 Xor 00000000 -> 00000001
00000001 Xor 00000001 -> 00000000
Memanipulasi Bilangan Biner Menggunakan Operator
Bitwise dan Bit-Shift (2)
operator bit-shift : <<, >> dan >>>
Operator yang digunakan untuk mengubah posisi bit dalam
bilangan biner. Masing-masing operator mengambil dua operator:
nilai (kiri) dan jumlah bit untuk menggeser (kanan).
ex :
1 << 1 --> 00000010
2 >> 1 --> 00000001
bilangan biner 3 --> 00000011
3 << 1 --> 00000110
3 << 2 --> 00001100
3 >> 1 --> 00000001
Aplikasi Konversi Integer-biner
Kata kunci untuk mengkonversi sebuah integer menjadi
bilangan biner adalah mask. fungsi mask adalah
menyembunyikan beberapa bit dalam angka, sementara
menampilakan yang lain. ketika mask dan integer digabungkan
dengan operator AND, hasilnya adalah string biner yang
mewakili integer.
int dispMask = 1 << 31;
StringBuilder bitBuffer = new StringBuilder(35);
for(int i = 1; i <= 32; i++) {
if ((val && bitMask) == 0)
bitBuffer.Append("0");
else
bitBuffer.Append("1");
val <<= 1;
if ((i % 8) == 0)
bitBuffer.Append(" ");}
Aplikasi Bitwise
Aplikasi ini membahas bagaimana bit melakukan
fungsi operator Bitwise
int val1, val2;
val1 = Int32.Parse(txtInt1.Text);
val2 = Int32.Parse(txtInt2.Text);
lblInt1Bits.Text = ConvertBits(val1).ToString();
lblInt2Bits.Text = ConvertBits(val2).ToString();
lblBitResult.Text = ConvertBits(val1 && val2).ToString();
int val1, val2;
val1 = Int32.Parse(txtInt1.Text);
val2 = Int32.Parse(txtInt2.Text);
lblInt1Bits.Text = ConvertBits(val1).ToString();
lblInt2Bits.Text = ConvertBits(val2).ToString();
lblBitResult.Text = ConvertBits(val1 || val2).ToString();
Aplikasi Bit-Shift
Aplikasi ini membahas bagaimana bit melakukan fungsi
operator Bit-Shift
int value = Int32.Parse(txtInt1.Text);
lblOrigBits.Text =
ConvertBits(value).ToString();
value <<= Int32.Parse(txtBitShift.Text);
lblInt1Bits.Text =
ConvertBits(value).ToString();
int value = Int32.Parse(txtInt1.Text);
lblOrigBits.Text = ConvertBits(value).ToString();
value >>= Int32.Parse(txtBitShift.Text);
lblInt1Bits.Text = ConvertBits(value).ToString();
BitArray Class
BitArray sangat mirip dengan ArrayList. BitArray
bekerja dengan bit sehingga dapat diubah ukurannya
secara dinamis seperti menambah bit ketika
diperlukan tanpa khawatir melampaui batas atas
array.
Menggunakan BitArray Class (1)
BitArray Class dibuat menggunakan instruksi :
BitArray BitSet = new BitArray(32);
32 bit BitArray di atas diset False, jika ingin mengubah True digunakan :
BitArray BitSet = new BitArray(32, True);
Dapat juga digunakan pada byte, seperti di bawah ini :
byte[] ByteSet = new byte[] {1, 2, 3, 4, 5};
BitArray BitSet = new BitArray(ByteSet);
Menggunakan BitArray Class (2)
Bit yang disimpan dalam BitArray dimulai dari kiri, hal ini dapat
membingungkan untuk dibaca karena secara umum dari kanan.
Contoh BitArray 8-bit dengan nomor 1 :
true false false false false false false false (10000000)
dimana secara umum adalah :
false false false false false false false true (00000001)
byte[] ByteSet = new byte[] {1, 2, 3, 4, 5};
BitArray BitSet = new BitArray(ByteSet);
for (int bits = 0; bits <= bitSet.Count-1;
bits++)
Console.Write(BitSet.Get(bits) + " ");
Menggunakan BitArray Class (3)
class chapter6 {
static void Main() {
int bits;
string[] binNumber = new string[8];
int binary;
byte[] ByteSet = new byte[] {1,2,3,4,5};
BitArray BitSet = new BitArray(ByteSet);
bits = 0;
binary = 7;
for(int i = 0; i <= BitSet.Count-1; i++) {
if (BitSet.Get(i) == true)
binNumber[binary] = "1";
else
binNumber[binary] = "0";
bits++;
binary--;
if ((bits % 8) == 0) {
binary = 7;
bits = 0;
for(int i = 0; i <= 7; i++)
Console.Write(binNumber[i]);
}
}
}
}
Untuk menampilkan dalam bentuk biner dan dengan
menggunakan urutan secara umum digunakan
instruksi BitSet dan binNumber.
Menggunakan BitArray Class (3)
Menggunakan BitArray Class (4)
BitArray.Set (bit, value)
dimana
bit BitArray
adalah indeks
bit yang
ditetapkan
Metode
Class
yang
lain : dan value adalah nilai boolean
yang ditetapkan pada bit.
BitSet.SetAll (False)
mengatur semua nilai bit dengan melewati nilainya sebagai argumen.
bitSet1.Or (bitSet2)
dikikuti dengan :
bitSet.Clone()
BitArray digunakan pada metode Bitwise, misal untuk Bitwise Or memiliki
dua BitArray (bitSet1 dan bitSet2) seperti di atas.
bitSet.CopyTo(arrBits)
arrBits untuk menyalin isi BitArray ke array standar
Menggunakan BitArray pada
Filter Eratosthenes
Aplikasi Filter Eratosthenes untuk menentukan
bilangan prima dari 1 sampai 1024 dengan metode
BitArray.
Menggunakan BitArray pada
Filter Eratosthenes
Filter Eratosthenes diterapkan pada loop :
int lastBit = Int32.Parse(Math.Sqrt(bits.Count));
for(int i = 2; i <= lastBit-1; i++)
if (bits.Get(i))
for (int j = 2 ∗ i; j <= bits.Count-1; j++)
bits.Set(j, 0);
Loop tersebut bekerja melalui kelipatan semua bilangan hingga akar
kuadrat dari bilangan-bilangan di dalam BitArray, lalu menghilangkan
semua kelipatan dari bilangan 2, 3, 4, 5, dan seterusnya.
Kesimpulan
BitArray Class digunakan untuk menyimpan
kumpulan bit yang terdiri dari True (1) dan False (0).
Permasalahan yang dapat diselesaikan dengan
susunan angka bisa lebih efisien dan cepat
diselesaikan dengan menggunakan BitArray.
SELESAI
TERIMAKASIH ATAS PERHATIAANNYA
Download