Kamis, 04 Maret 2010

ORGANISASI LOGIK DAN FISIK DARI STRUKTUR DATA

               ORGANISASI LOGIK DAN FISIK DARI STRUKTUR DATA

           Memori komputer dapat kita bayangkan terdiri atas barisan atau untai sel-sel (masingmasing sel berisi satu binary digit atau bit) dengan alamatnya sekaligus. Setiap untai dirangkai dari sejumlah bit yang ditentukan jumlahnya dalam satu untai oleh model komputer tertentu.

           Struktur data terdiri dari satuan data sederhana yang cocok untuk program yang memakainya. Hubungan antara satuan data tersebut membentuk salah satu ciri dari struktur yang bersangkutan. Jika sebuah struktur data langsung tersedia dalam bahasa pemrograman (misalnya array terdapat di dalam FORTRAN), maka struktur data tersebut langsung dapat dipakai. Jika struktur tersebut tidak tersedia, maka pemrogram harus membuatnya terlebih dahulu dari tipe data yang tersedia. Berhubung struktur data tersebut harus dimasukkan ke dalam memori berupa untai bit, maka setiap struktur diberi ciri oleh organisasi logikal (perlu ada hubungan antar komponen sewaktu diaplikasikan), dan oleh organisasi fisikal (penempatan dalam memori).

            Jika satuan data sederhana dapat membentuk sebuah struktur yang lebih hemat dalam memori, maka struktur data tersebut disatukan: beberapa satuan data ditempatkan sebagai satu untai. Struktur tersebut tidak dapat langsung ditujukan kepada sebuah alamat (yang bisa hanyalah sebuah untai atau byte); untuk itu haruslah diusahakan melalui proses pemrograman.

           Jika menggunakan penyajian secara sekuensial, maka komponen struktur data ditempatkan ke dalam lokasi memori secara berurutan. Hubungan antara komponen komponen tersebut tidak nampak dari proses mereka.

Contoh 1.3

         Sebuah himpunan data logikal (masing-masing sepanjang 1 bit) dapat dijadikan untai 16 bit memakai 16 elemen himpunan ke dalam satu untai. Dua cara utama untuk menempatkan memori terdapat di dalam struktur tingkat tinggi seperti daftar.

        Cara lain adalah penyajian secara berkait, atau linked. Di sini setiap komponen dari struktur data dilengkapi dengan satu atau beberapa satuan data tambahan, yang dipergunakan untuk melakukan hubungannya dengan komponen yang ada di sekelilingnya. Satuan data tambahan seperti itu disebut pointer atau link atau penuding yang berisikan alamat memori dari satuan data lain di dalam struktur data. Dengan adanya pointer tersebut, akan terjalin relasi antar komponen dalam struktur data tersebut

        Penyajian data secara sekuensial bersifat sangat kaku. Hal ini disebabkan karena untuk menghapus komponen dari struktur dan menyisipkan komponen ke dalamnya, hanya dapat dilakukan melalui reorganisasi fisik dari struktur di dalam memori. Oleh karena itu, ia baru dapat diaplikasikan dengan baik apabila komposisi dari struktur tersebut tidak banyak berubah selama pelaksanaan program yang bersangkutan.

         Penyajian dengan cara berkait (linked) bersifat lebih fleksibel, karena untuk mengadakan perubahan struktural, kita cukup melakukan perubahan beberapa pointer saja. Oleh sebab itu, penyajian berkait ini cocok bagi struktur data yang dinamis. Tingkat  keluwesan tersebut terdapat dalam ruang memori dan waktu yang dibutuhkan, guna mengarahkan pointer yang bersangkutan, yang juga merupakan elemen struktural.

         Jika kita memakai sistem penyajian berkait, maka jumlah memori yang tersedia bagi struktur data, dibagi menjadi dua bagian. Satu bagian menampung struktur yang ada tersebut, sedangkan bagian yang lain (disebut ruang yang tersedia), merupakan tempat cadangan, untuk menampung komponen yang masih ''kosong.'' Jika diperlukan sebuah ruang untuk menempatkan komponen baru, maka akan diambilkan dari ruang cadangan tersebut.

           Jika suatu komponen tidak dibutuhkan lagi, maka ruang dikembalikan kepada tempat cadangan yang bersangkutan. Ada kalanya juga terjadi bahwa komponen yang tidak dibutuhkan lagi dikumpulkan secara periodik untuk dikembalikan ke tempat cadangan.

PEMETAAN (MAPPING) KE STORAGE

                              PEMETAAN (MAPPING) KE STORAGE : INTEGER

         Struktur data secara logik dapat mempunyai beberapa storage mapping atau representasi
fisik. Hal ini merupakan salah satu cirinya. Salah satu storage mapping yang dapat dilakukan terhadap integer adalah apa yang disebut bentuk sign-and-magnitude. Integer positif didefinisikan dengan tanda plus serta sebarisan digit yang menyatakan magnitude/ besamya; sedangkan integer negatif didefinisikan dengan tanda minus serta sebarisan digit. Tanda plus kerap kali diabaikan penulisannya dalam penggunaan sehari-hari. Namun, tanda plus tersebut harus dinyatakan ketika melakukan pemrosesan bilangan dengan komputer. 
 
        Juga, kalau sehari-hari bilangan dinyatakan dalam basis 10 (sistem desimal), maka dalam memori komputer kita menyatakan bilangan dalam basis 2 (sistem binary). Manusia dengan mudah bekerja terhadap bilangan dalam bentuk sign-and-magni-tude tersebut. Namun, apabila kita akan melakukan penjumlahan dengan komputer, dengan kedua operand berbeda tanda, penjumlahan akan beralih menjadi pengurangan yang kadang kadang menimbulkan kesukaran. Untuk itu, kita gunakan apa yang disebut complement, yang dapat diterangkan sebagai berikut :

         Diberikan 3 integer non negatif X, X’ dan R. Kita definisikan X’ adalah complement dari X terhadap R (atau R's complement dari X) bila X + X' = R. Dalam penyajian complement, X disebut bentuk ''true” dan X’ disebut bentuk complement. Dalam komputer binary, R dipilih merupakan pangkat dari 2.

                                                        R = 2n

         Pemilihan N menentukan daerah rentangan dari integer yang dapat disajikan. Mapping dengan R = 2n dikenal sebagai sistem two's complement.Bentuk complement X’ = R–X menyatakan integer negatif X dan bentuk ''true'' menyatakan integer positif X Algoritma untuk melakukan perhitungan aritmatika terhadap integer yang dinyatakan dalam bentuk complement adalah lebih mudah bagi komputer dibandingkan dalam bentuk sign-and-magnitude. Jadi, apabila banyak komputasi dilakukan terhadap integer, dianjurkan untuk
menyatakan integer dalam bentuk complement

                PEMETAAN KE STORAGE : KARAKTER DAN STRING

          Banyak aturan yang dapat kita gunakan untuk menyatakan tipe data karakter dalam storage. Dua di antaranya sangat terkenal, yakni Extended Binary Coded Decimal Interchange Code (EBCDIC) dan American Standard Code for Information Interchange(ASCII). EBCDIC, yang dikembangkan oleh IBM, adalah kode 8 bit. Di sini dibutuhkan 8 binary digit (bit) untuk menyatakan satu karakter dalam alfabet: Dalam 8 bit terdapat 28 (=256) kemungkinan. Nyata bahwa pada EBCDIC, cukup banyak macam karakter yang
dapat digunakan. Di sini meliputi huruf besar serta kecil, digit numerik dan banyak karakter khusus.

           ASCII adalah cara pengkodean 7 bit. Terdapat 27 (=128) kemungkinan, separuh dari yang dimiliki EBCDIC. Penggunaan ASCII ini disebabkan karena lebih sedikitnya storage yang dipakai, serta lalu lintas data karakter tersebut dapat lebih cepat. Selain kedua cara pengkodean tersebut di atas, masih terdapat banyak cara lagi, di antaranya adalah cara BCD (Binary Coded Decimal) yang menggunakan 4 bit setiap
karakternya.

           Selain itu, di antara sekian banyak cara mapping ke storage terhadap karakter tersebut, ada suatu cara yang sengaja diciptakan untuk aplikasi khusus, seperti kode Huffman. Di sini, Karakter disajikan oleh bit yang banyaknya variabel, tergantung pada frekuensi relatif kemunculan karakter tersebut dalam vocabulary dari aplikasi. Karakter yang sering muncul dinyatakan dalam pola bit yang lebih pendek, sedangkan karakter yang jarang muncul, dinyatakan dalam pola bit yang lebih panjang.

Sebagai contoh dalam aplikasi khusus, karakter 0, dinyatakan dalam single bit 0, karakter A dinyatakan dalam 5 bit 10101, sedangkan karakter % (sangat jarang muncul dinyatakan dalam 16 bit 1011111111111001. Apabila dihitung, rata-rata penggunaan bit adalah 2.91 bit/ karakter.