Senin, 07 Juni 2010

Robben Beri Belanda Harapan

AMSTERDAM, KOMPAS.com - Gelandang Arjen Robben mengalami kemajuan dalam penyembuhan cedera hamstring dan kemungkinan bisa tampil untuk skuad "Negeri Kincir Angin" pada Piala Dunia 2010 di Afrika Selatan.

Robben, mengalami cedera hamsting pada kaki kirinya dan diragukan bisa tampil pada putaran final nanti di tengah laga persahabatan melawan Hongaria, akhir pekan lalu. Hal itu membuat publik Belanda tak mampu tersenyum, meski timnya menang 6-1.

Ketegangan semakin meningkat ketika pelatih Belanda, Bert van Marwijk, mengatakan dirinya serius mencari pemain yang akan menggantikan Robben di Piala Dunia nanti.

Namun, negeri "Kincir Angin" kini sudah bisa sedikit menghela napas. Hasil tes medis menunjukkan, cedera Robben tak parah dan bisa diharapkan tampil di Afrika Selatan.

Untuk memperbesar peluang itu, Belanda menyediakan ahli fisioterapi untuk membantu Robben pulih lebih cepat. Robben mengaku akan mengikuti program pemulihan dengan serius dan disiplin.

"Hari Minggu saya telah dipindai dan itu hanya luka kecil pada hamstring kaki kiriku. Ini pertama kali aku mengalami cedera di bagian itu," jelas gelandang Bayern Muenchen itu.

"Jika sembuh, aku baru akan kembali ke lapangan dalam empat atau enam pekan lagi, tetapi kami tak memiliki banyak waktu."

"Fisoterapis Dick van Toorn akan membantuku. Kami terus bekerja keras. Aku akan berjuang hingga sembuh. kemarin banyak dukungan yang diberikan kepadaku dan itu postif bagiku," paparnya. (SUN)

Beckenbauer Ragukan Kualitas Jerman

BERLIN, KOMPAS.com - Legenda sepak bola Jerman, Franz Beckenbauer, menilai, "Der Panzer" saat ini tak punya kekuatan cukup memadai untuk bersaing di Piala Dunia 2010 Afrika Selatan. Menurutnya, salah satu hal yang melemahkan Jerman adalah absennya sejumlah pemain senior.

Jerman berangkat ke Afsel tanpa kapten Michael Ballack, kiper Rene Adler, bek Heiko Westermann, gelandang Simon Rolfes dan Christian Traesch. Mereka semua absen karena cedera.

Tanpa mereka, pelatih Joachim Loew menghitung ulang kelebihan dan kekurangan timnya. Hasilnya, mereka mampu menang 3-1 atas Bosnia-Herzegovina, dalam laga persahabatan, Kamis lalu.

Menurut Beckenbauer, hasil itu tak bisa menjadi acuan karena putaran final Piala Dunia sama sekali berbeda dari laga persahabatan. Ia bahkan menilai, untuk sampai babak semifinal, Jerman harus mengerahkan energi jauh lebih besar dari biasanya.

"Tanpa Michael Ballack, situasi kami sulit. Tim kami melemah. Kami harus bekerja keras untuk bisa mencapai semifinal," ungkap Beckenbauer. (TEL)

Hargai Kawan, Scholes Tolak "Tiga Singa"

MANCHESTER, KOMPAS.com - Gelandang Inggris, Paul Scholes, mengungkapkan, pelatih Fabio Capello sempat menawarkannya masuk ke skuad untuk Piala Dunia 2010 Afrika Selatan. Namun, ia menolak karena menghormati jasa rekan-rekannya yang telah berhasil membawa Inggris ke putaran final Piala Dunia.

Sejak Euro 2004, Scholes memutuskan mundur dari skuad "Tiga Singa". Alasannya, ia lebih memilih berkonsenterasi bersama Manchester United. Komitmen Scholes itu pun tak sia-sia. Ia berhasil membawa "Setan Merah" meraih tiga gelar Premier League, juara Liga Champions, dan juara Piala Dunia Antarklub.

Melihat performa yang cukup konsisten dan pengalaman yang dimilikinya, Capello berniat membawa Scholes ke Afrika Selatan. Selain Scholes, Capello juga memanggil bek tengah Liverpool, Jamie Carragher. Sementara Caraggher mengaminkan keingan Capello, Scholes malah menolak.

Scholes menolak dengan pertimbangan bahwa Capello terlambat untuk memanggilnya. Selain itu, Scholes menolak karena tak ingin "mencuri" posisi rekannya yang telah berhasil membawa Inggris ke putaran final.

"Itu merupakan keputusan besar dan aku tidak diberikan cukup waktu untuk berpikir tentang tawaran tersebut. Jadi, aku memutuskan untuk tak menerima tawaran itu," ungkap Scholes kepada Oldham Evening Chronicle.

"Mungkin aku akan menerimanya jika mereka memberikanku waktu panjang. Pemain dalam skuad telah mengahabiskan waktu hampir dua tahun untuk membawa Inggris lolos. Sedangkan, aku sudah lama tak membela Inggris."

"Hal itu bukan karena aku ingin lama berlibur. Itu adalah fakta bahwa pemanggilan itu terlampau dekat dengan turnamen dan juga aku tidak ingin mencuri posisi seseorang yang telah berjasa mengantarkan Inggris ke Afrika Selatan," paparnya. (OEC)

Arsenal Siap Lepas Fabregas

LONDON, KOMPAS.com - The Sun memberitakan, Arsenal siap menjual kapten Cesc Fabregas ke Barcelona, asal "Blaugrana" bersedia membayar 50 juta poundsterling atau sekitar Rp 676 miliar. Padahal, menurut sumber The Sun di Camp Nou, Barcelona cuma mau membayar 35 juta poundsterling atau sekitar Rp 473 miliar.

Media-media Inggris menyebut Arsenal ingin mempertahankan Fabregas dan tak akan melayani negosiasi dengan klub mana pun. Namun, karena Fabregas begitu ngotot ingin pindah, Arsenal terpaksa berpikir untuk menghindari kerugian lebih besar, yaitu dengan mematok harga tinggi.

Sumber The Sun itu mengatakan, Barcelona melihat usaha Arsenal mempertahankan Fabregas sudah mulai goyah. Barcelona pun disebut sengaja membuat negosiasi menjadi panjang supaya Arsenal semakin tertekan dan menjual Fabregas sesuai penawaran Barcelona.

"Itu merupakan berita yang diinginkan para pengambil keputusan di Barcelona. Mereka sekarang melihat kemungkinan Arsenal patah dan semakin yakin mendapatkan (Fabregas). Mereka berharap bisa mencapai kesepakatan harga di kisaran 35 juta poundsterling," ungkap sumber tersebut.

Selain itu, The Sun juga memberitakan, Arsenal bersiap menghadapi kepergian Fabregas dengan membidik gelandang Chelsea, Joe Cole. Mereka mengklaim, Cole sudah bertemu pelatih Arsenal, Arsene Wenger, membicarakan kemungkinan transfer tersebut.

Selain Arsenal, Manchester United juga berminat kepada Cole. Namun, Cole disebut cenderung pindah ke Arsenal, karena bila Fabregas jadi pindah, dan media-media Inggris menduga kuat itu tak terhindarkan, Cole akan mendapatkan peran besar di sana. (SUN/DM)

Madrid Pertahankan Higuain

MADRID, KOMPAS.com - Real Madrid mengumumkan, penyerang Gonzalo Higuain, telah menyepakati perpanjangan kontrak tiga musim. Itu berarti, Higuain akan terus di Madrid sampai 2016.

Media-media Inggris dan Spanyol sempat memberitakan Higuain bakal dilego akhir musim 2009-2010 lalu. Menurut mereka, Madrid ingin melakukan itu supaya penyerang Karim Benzema bisa mendapatkan jam terbang reguler.

Namun, menurut mereka, itu berubah seiring pemecatan pelatih Manuel Pellegrini dan diangkatnya Jose Mourinho sebagai penggantinya. Dalam situs resminya, Madrid menegaskan bahwa Higuain diperhitungkan sebagai salah satu penyerang hebat yang masuk dalam rencana Mourinho untuk musim depan.

"Ia (Higuain) mendapatkan (perpanjangan kontrak) karena kerja kerasnya. Sejak menjadi pemain Madrid pada Desember 2006, Gonzalo Higuian telah menunjukkan kerja keras dan kecerdasan," tulis Madrid dalam situs resminya.

"Pelatih baru 'Los Blancos", Jose Mourinho, memperhitungkannya dan mengacu (jumlah gol yang dibuat Higuain), ia mengerti bahwa tim juara membutuhkan pencetak gol hebat. Sebagai pemain Real Madrid, Higuain telah bermain sebanyak 141 kali dan mencetak 64 gol," tegas pernyataan itu. (RM)

Liverpool Harus Jual Gerrard Torres

LIVERPOOL, KOMPAS.com - Legenda Liverpool, John Barnes, menilai, mantan klubnya itu harus menjual Steven Gerrard dan Fernando Torres, bila keduanya memang sudah tak lagi bahagia di Anfield. Menurutnya, bila seorang pemain, sehebat apa pun, sudah tak ingin bertahan, ia sudah tak bisa berkontribusi kepada klub.

Gerrard dan Torres merupakan pemain penting Liverpool. Sementara Gerrard merupakan ikon, Torres merupakan salah satu penyerang terbaik generasi sekarang.

Selama ini, kedua pemain itu konsisten menyatakan ingin bertahan. Namun, menurut media-media Inggris, krisis ekonomi dan rencana penjualan klub membuat kedua pemain ini tak nyaman dan kehilangan keyakinan kepada klub. Keduanya pun disebut sudah berpaling ke lain hati.

Menanggapi pemberitaan itu, Liverpool konsisten menyatakan bahwa klub akan melakukan berbagai cara mempertahankan keduanya. John Barnes mengaku tak setuju dengan cara Liverpool memandang dan menilai masalah tersebut.

"Liverpool tak ingin Gerrard dan Torres pergi. Namun, bila mereka tak ingin bertahan, biarkan mereka pergi. Pendukung harus mengerti itu dan masih akan tetap berada di belakang klub," ungkap Barnes.

"Lihatlah sejarah klub ini. Kevin Keegan pergi dan orang-orang khawatir. Namun, mereka menjadi semakin kuat. Kenny Dalglish adalah legenda. Namun, ia pensoun dan (Liverpool) terus maju dan memenangi trofi sejak itu,"

"Saya pikir, ada terlalu banyak perhatian kepada Gerrard dan Torres. Mereka memang pemain penting, tetapi (goyahnya keyakinan mereka) memengaruhi yang lain di tim ini," paparnya. (SUN)

inter segera punya pelatih baru

MILAN, KOMPAS.com - Presiden Inter Milan, Rafael Benitez, mengaku optimistis mampu menggaet pelatih Rafael Benitez. Menurutnya, hal itu akan terwujud dalam hitungan jam.

Inter membutuhkan pelatih baru, menyusul hengkangnya Jose Mourinho ke Real Madrid, akhir musim 2009-2010 dan sejak itu Benitez sudah dibidik Moratti untuk menjadi pengganti.

Menurut Moratti, musim depan, Inter menjadikan trofi Liga Champions sebagai target utama dan Benitez dinilanya tepat mengemban misi itu. Ia mengacu pada keberhasilan Benitez membawa Liverpool menjuarai Liga Champions 2005 silam.

Usaha Inter sempat terancam gagal karena Benitez terikat kontrak dengan Liverpool sampai 2014 dan berkomitmen dengan itu. Namun, di luar dugaan, tak lama setelah Benitez menyatakan setia kepada "The Reds", ia malah dipecat karena dinilai bertanggung jawab atas kegagalan Liverpool finis di zona Liga Champions musim 2009-2010.

Jumat, 04 Juni 2010

Capello Siap Hadapi Tantangan Di Turnamen Internasional Pertamanya

Piala Dunia 2010 akan menjadi turnamen internasional pertama Fabio Capello sebagai pelatih. Pelatih tim nasional Inggris menegaskan dalam kondisi siap menjalani debut pertamanya di kancah internasional itu.

"Bagi saya, merupakan sebuah pengalaman baru menjadi pelatih di turnamen yang sangat terkenal ini," katanya dikutip The Sun, Jumat (4/6).

"Sebagai pelatih klub, saya sudah membawa tim saya di turnamen penting, termasuk saat membawa Real Madrid dan AC Milan, ketika kami mewakili hanya satu kota. Dengan mewakili negara semuanya jadi berbeda. Anda membawa harapan seluruh warga negara bersama Anda."

"Saya sudah berbicara dengan banyak orang yang sempat berada di lingkungan seperti ini, pelatih yang berbeda, untuk mengetahui lebih baik apa yang terjadi selama 40 hari bersama-sama."

"Tapi setelah pembicaraan, keputusan apa pun akan menjadi milik saya dan gaya yang saya bawa akan membawa kami terus ke depan. Saya tak sabar untuk bisa segera bersama tim dalam periode yang lama, seperti lingkungan klub."

"Akan menjadi tantangan besar, tapi satu hal yang harus saya sadari adalah saya sudah menunggu dalam waktu yang lama untuk bisa mendapat kesempatan ini," tandasnya.

Dihantam Cina, Prancis Semakin Terpuruk

Deng Zhuo Xiang memanfaatkan dengan baik tendangan bebas dari jarak 23 meter untuk memberikan pelajaran berharga bagi tim Ayam Jantan Prancis dalam partai pemanasan terakhir bagi juara Piala Dunia 1998 itu sebelum beraksi di Afrika Selatan.

Hasil ini semakin menurunkan kepercayaan diri tim asuhan Raymond Domenech karena mereka selalu kebobolan dalam tiga laga terakhir, dan hanya mampu menyarangkan tiga gol.

Sebelumnya, Prancis ditahan Tunisia 1-1, dan kemudian berhasil menaklukkan Costa Rica 2-1. Uruguay akan menjadi musuh pertama Prancis pada 11 Juni, sebelum menantang Meksiko dan tuan rumah Afrika Selatan di Grup A.

Cina gagal lolos ke Afrika Selatan dan juga tampil tanpa beberapa andalan utama mereka, tetapi kiper Zhang Cheng berhasil menjadi pahlawan dengan menggagalkan sejumlah peluang emas yang dimiliki Nicolas Anelka, Sidney Govou, Abou Diaby, Andre-Pierre Gignac, dan juga Thierry Henry.

Meskipun Prancis menguasai jalannya pertandingan, benteng Cina tetap kokoh dengan mengandalkan serangan balik dan satu tendangan bebas cukup untuk membuat Les Bleus keok.

Andrea Pirlo Terancam Keluar Dari Azzurri

Menurut Tuttosport, Andrea Pirlo meninggalkan pusat latihan timnas Italia di Sistriere setelah mencederai betisnya dan dipastikan tak akan tampil dalam partai pemanasan terakhir lawan Swiss.

Dampak pasti dari cedera ini memang belum pasti, tetapi gelandang berusia 31 tahun itu terancam tak akan tampil di Afrika Selatan dan harus terbang ke Milan untuk melakukan tes medis.

Meski gagal bersinar bersama AC Milan musim ini, Pirlo dianggap pelatih Italia Marcelo Lippi masih mampu menjadi tulang punggung timnya lewat perannya di lini tengah dalam membantu Azzurri mempertahankan gelar.

Gerrard Siap Jadi Kapten Inggris

Cedera yang dialami Rio Ferdinand, membuat jabatan kapten tim akan diemban Gerrard yang sebelumnya menjadi wakil kapten.

Meskipun menyesalkan absennya Ferdinand, Gerrard mengaku siap mengemban tanggung jawab sebagai kapten tim dan membawa Inggris meraih hasil mengesankan.

"Semua pemain di dalam skuad berharap Rio tetap fit dan memimpin kami di Piala Dunia. Namun sayangnya hal itu tak bisa terwujud. Saya siap menjadi pemimpin tim ini," ucapnya.

"Saya punya ambisi besar bersama tim ini. Hal terbesar yang bisa Anda lakukan sebagai pemain adalah menjuarai Piala Dunia. Itu pencapaian yang fantastis dan saya merasa sangat tertantang untuk bisa meraihnya."

Cedera lutut yang dialami Ferdinand membuatnya harus melupakan keinginannya berlaga di Piala Dunia di Afsel. Posisinya digantikan Michael Dawson yang akan segera bergabung dengan rekan setimnya.

Jepang Ditekuk, Drogba Jadi Korban

Pantai Gading semakin menambah kepercayaan diri mereka sebelum memasuki grup maut bersama Brasil, Portugal, dan Korea Utara dengan kemenangan atas Jepang.

Namun, kemenangan itu juga memakan korban cedera, bahkan cedera itu dialami kapten sekaligus bintang andalan Didier Drogba tak lama setelah striker Chelsea itu mengambil tendangan bebas pada menit ke-13 yang dibelokkan Tulio Tanaka ke gawangnya sendiri.

Tulio mencatat gol bunuh diri kedua setelah sempat memberikan angin segar bagi Inggris pada pertandingan sebelumnya, dan dua menit kemudian mencederai Drogba.

Masing-masing tim memiliki peluang setelah keluarnya Drogba, tetapi tendangan pengganti Drogba Seydou Doumbia masih melambung, sementara kiper Boubacar Barry harus berjibaku saat menyelamatkan tendangan bebas Shunsuke Nakamura.

Yaya Toure akhirnya berhasil memastikan kemenangan saat melepaskan tendangan bola voli dalam situasi tendangan bebas 11 menit sebelum bubaran.

Diego Alves Ingin Ke Milan

Kiper Almeria Diego Alves kembali menyatakan keinginannya untuk bergabung ke klub raksasa Serie A Milan pada musim panas ini. Pemain asal Brasil itu ingin sekali bermain bersama rekannya di timnas, Ronaldinho.

Milan sedang membutuhkan kiper baru karena mereka akan menghadapi kenyataan krisis pemain di sektor ini. Dida, Christian Abbiati, dan Marco Storari santer disebut-sebut akan meninggalkan klub.

Dalam beberapa pekan ini, Alves memang selalu dikait-kaitkan dengan kepindahannya ke San Siro. Hal itu diakui secara langsung oleh sang pemain.

"Saya sangat senang karena salah satu klub terbaik di dunia sedang mempertimbangkan untuk mendapatkan saya," ujar Alves kepada La Gazzetta dello Sport.

"Saya pikir Milan adalah seperti rumah sendiri."

"Saya sudah pernah bermain bareng Ronaldinho di pertandingan Olimpiade. Saya siap berlatih bareng dia. Itulah mengapa saya pun siap bergabung ke Milan."

Selain Milan, Juventus ternyata juga ingin mendapatkan Alves sebagai pengganti Gianluigi Buffon. Tapi, keinginan mereka itu kini kurang begitu mengebu karena Buffon sudah memastikan tidak akan meninggalkan Turin.

Piala Dunia Dulu, AC Milan Kemudian

Luis Fabiano mengungkapkan keinginannya untuk bermain bersama Ronaldinho dan Alexandre Pato di AC Milan musim depan. Namun ia ingin memfokuskan diri bersama Brasil terlebih dulu.

"Bahkan sejak tahun lalu sudah ada pembicaraan dengan AC Milan. Saya suka AC Milan," katanya kepada La Gazzetta dello Sport, Senin (31/5).

"Ronaldinho dan Pato adalah dua pemain juara dan dua teman saya, tapi untuk sekarang ini mari berbicara mengenai Piala Dunia."

"Saya siap mengenakan nomor punggung #9, yang sebelumnya dipakai Ronaldo dan Careca. Saya ingin mengikuti jejak mereka," tandasnya.

Galliani Yakin Milan Scudetto Musim Depan

Wakil presiden AC Milan Adriano Galliani yakin Rossoneri akan tampil sebagai juara Serie A Italia musim depan. Milan bakal melakukan perombakan untuk mewujudkan ambisi tersebut.

Menurut Galliani, sejumlah pemain akan dilepas manajemen tim pada bursa transfer musim panas. Milan juga berencana membeli pemain baru untuk menyeimbangkan kekuatan tim.

“Media massa sudah tahu lebih dulu siapa yang akan menjadi pelatih Milan berikutnya. Tapi karena dia masih berada dalam ikatan kontrak, saya belum bisa memberitahu apa pun,” ujar Galliani kepada Sky Sport 24.

“Mungkin saja [pelatih Cagliari Massimiliano] Allegri berada dalam posisi teratas.”

“Tentang pemain yang akan dibeli, kami terlebih dahulu harus menjual sejumlah pemain. Di saat bersamaan, kami sudah mendapatkan pelapis Dida dan Giuseppe Favalli dengan masuknya Marco Storari dan Mario Yepes.”

“Fans harus tetap tenang, karena tim ini sudah siap bertarung menghadapi persaingan musim depan untuk meraih gelar Scudetto.”

Mancini Tetap Di Milan

Kabar hengkangnya Mancini dari Milan dibantah oleh agennya, Roberto Calenda. Pemain asal Brasil ini kemungkinan besar akan tetap bertahan bersama Rossoneri.

Mancini dipinjamkan dari Inter Milan sejak Februari lalu sampai akhir musim ini, Milan punya opsi untuk memperpanjang masa pinjaman atau mengontraknya secara permanen.

"Baik Milan maupun Inter adalah klub besar, dan Mancini juga pemain besar. Ia akan tetap bermain di klub besar dan Milan adalah pilihannya saat ini," ungkap Calenda melalui Tuttomercatoweb.com.

"Pada Desember lalu Mancini melakukan operasi dan sudah hampir seratus persen pulih. Kalau tidak pulih tentu ia tidak akan bertahan di Milan. Masalah cedera memang sangat mengganggu dirinya, tapi begitu kondisinya fit, Mancini akan memberikan yang terbaik bagi klubnya."

Madrid Tak Ingin Beli Striker Baru

Keinginan Jose Mourinho, jika kelak menangani Real Madrid, untuk bisa menguatkan skuadnya dengan mendatangkan pemain baru mendapat dukungan dari pihak klub, dengan sejumlah catatan.

Jorge Valdano, direktur umum Real Madrid, mengungkapkan jika Mourinho bisa mendatangkan pemain mana pun musim panas nanti, kecuali pemain berkarakter striker.

Valdano menilai jumlah striker yang dimiliki Real Madrid saat ini sudah mencukupi dan produktifitasnya sudah bagus.

"Kami tak butuh pemain depan lagi. Kami sudah mencetak 102 gol musim ini, dan juga Karim Benzema juga tak banyak bermain," ungkapnya kepada Marca.

"Musim depan, Karim akan menjadi 'striker baru' kami," tegas Valdano lagi.

Hal ini sedikit banyak merusak rencana Mourinho, yang sebelumnya mengungkapkan rencana untuk bisa mengajak Diego Milito bergabung ke Santiago Bernabeu.

Messi Raih Trofeo Alfredo Di Stefano

Striker Barcelona untuk kali kedua berturut-turut terpilih sebagai pemain terbaik La Liga Spanyol, dan berhak mendapatkan Trofeo Alfredo Di Stefano. Penghargaan ini diberikan suratkabar terkemuka di Spanyol, Marca.

Messi yang mengumpulkan 34 suara mengungguli gelandang Real Madrid Cristiano Ronaldo yang hanya menerima 26 suara. Peringkat tiga ditempati Xavi Hernandez usai mendapatkan 15 suara, dan diikuti Gonzalo Higuain yang meraih empat suara.

Penghargaan ini jatuh kepada Messi setelah pemain tersebut memperlihatkan performa meyakinkan sepanjang musim ini. Messi menjadi Pichichi [top skorer] La Liga serta mendapatkan sepatu emas usai menjadi pencetak gol terbanyak di Liga Champions.

Musim lalu, Messi mengalahkan rekan satu timnya Andres Iniesta, dan striker Atletico Madrid Diego Forlan.

Kamis, 03 Juni 2010

Sistem Pendukung Keputusan

Definisi SPK/DSS :
Suatu sistem berbasis komputer yang menyediakan informasi pemecahan masalah maupun kemampuan komunikasi dalam memecahkan masalah

Definisi GDSS :
Sistem Pendukung Keputusan kelompok yang berusaha memperbaiki komunikasi di antara para anggota kelompok dengan menyediakan lingkungan yang mendukung dan mendukung para pengambil keputusan dengan menyediakan perangkat lunak GDSS yang disebut groupware

Pengambilan Keputusan
- Jenis-jenis keputusan menurut Simon :
Keputusan terprogram bersifat “berulang dan rutin sampai pada batas hingga suatu prosedur pasti telah dibuat untuk menanganinya sehingga keputusan tersebut tidak dianggap sesuatu yang baru jika tiap kali terjadi”
Keputusan Tak terprogram bersifat “baru, tidak terstruktur dan jarang konsekuen. Tidak ada metode yang pasti untuk menangani masalah ini karena belum begitu penting sebelumnya atau karena sifat dan struktur persisnya tidak terlihat atau rumit, atau karena begitu penting sehingga memerlukan perlakuan yang sangat khusus”.

- Tahap-tahap pengambilan keputusan menurut Simon :
1. Kegiatan Intelijen, mengamati lingkungan untuk mengetahui kondisi-kondisi yang perlu diperbaiki
2. Kegiatan Merancang, Menemukan, mengembangkan dan menganalisis berbagai alternative tindakan yang mungkin
3. Kegiatan Memilih, Memilih satu rangkaian tindakan tertentu dari beberapa yang tersedia.
4. Kegiatan Menelaah, Menilai pilihan-pilihan




 Konsep DSS

Tahap-tahap pengambilan keputusan Simon digunakan untuk menentukan struktur masalah. Masalah terstruktur merupakan suatu masalah yang memiliki struktur pada tiga tahap pertama Simon yaitu intelijen, rancangan dan pilihan. Masalah tak terstruktur merupakan masalah yang sama sekali tidak memiliki struktur pada tiga tahap Simon. Masalah Semi Terstruktur, merupakan masalah yang memiliki struktur hanya pada satu atau dua tahap Simon.
- Jenis-jenis DSS menurut Alter :
1 Mengambil elemen-elemen informasi (jenis yang memberikan dukungan paling sedikit)
2 Menganalisis seluruh file
3 Menyiapkan laporan dari berbagai file
4 Memperkirakan akibat keputusan
5 Mengusulkan keputusan
6 Membuat keputusan (jenis yang paling banyak memberikan dukungan)

 Tujuan DSS
1. Membantu manajer membuat keputusan untuk memecahkan maslah
2. Mendukung penilaian manajer bukan mencoba menggantikannya
3. Meningkatkan efektivitas pengambilan keputusan manajer daripada efisiensi
 DSS dan SIM
DSS fokus terhadap masalah-masalah semi terstruktur, SIM menyediakan informasi bagi manajer.
 Model DSS

1. Perangkat Lunak Penulisan Laporan
2. Model Matematika
3. Groupware

 Sistem Pendukung Keputusan Berkelompok
- Konsep GDSS (Group Decision Support System), merupakan sistem berbasis computer yang mendukung kelompok-kelompok orang yang terlibat dalam suatu tugas bersama dan menyediakan interface bagi suatu lingkungan yang digunakan bersama. Istilah lainnya : GSS (group support system), CSCW (computer support cooperative work), CCWS (Computerized collaborative work support), EMS (electronic meeting system). Perangkat lunak yang digunakan disebut groupware.
- GDSS berkontribusi memecahkan masalah
Komunikasi yang lebih baik memungkinkan keputusan yang lebih baik. GDSS berkontribusi memecahkan masalah dengan menyediakan suatu pengaturan yang mendukung komunikasi.

- Pengaturan Lingkungan GDSS

Ruang Keputusan, merupakan pengaturan untuk rapat kelompok kecil secara tatap muka. Ruangan tersebut medukung komunikasi melalui kombinasi perabot, peralatan dan tata letak.
Jaringan Keputusan Setempat (LAN), jika kelompok kecil tidak mungkin bertemu secara tatap muka, maka para anggota dapat berinteraksi melalui jaringan
Pertemuan Legislatif, jika kelompok terlalu besar untuk ruang keputusan, maka pertemuan legislative diperlukan.
Konferensi Bermedia Komputer, beberapa aplikasi kantor virtual memungkinkan komunikasi antara kelompok-kelompok besar dengan anggota yang tersebar secara geog

METODOLOGI SIKLUS HIDUP SISTEM

 SLC (System Life Cycle), adalah proses evolusioner yang diikuti dalam menerapkan sistem atau subsistem informasi berbasis komputer.
 SLC sering disebut pendekatan air terjun (waterfall approach)

 Tahap-tahap siklus hidup
1. Perencanaan
2. Analisis
3. Rancangan SDLC
4. Penerapan
5. Penggunaan
 Pengelola siklus hidup
1. Tanggung Jawab Eksekutif (jika lingkup sistem mempengaruhi organisasi luas maka direktur utama tapi kalau bersifat menyempit maka bisa dialihkan ke CIO, bag. Administrasi)
2. Komite Pengarah SIM (Steering Commite), ada 3 fungsi yaitu :
a. Menetapkan kebijakan
b. Menjadi pengendali keuangan
c. Menyelesaikan pertentangan
Ada 2 keuntungan Komite Pengarah :
a. semakin besar kemungkinan komputer akan digunakan untuk mendukung pemakai di seluruh perusahaan
b. semakin besar kemungkinan proyek-proyek komputer akan mempunyai perencanaan dan pengendalian yang baik
3. Kepemimpinan Proyek, bertanggung jawab dan terlibat langsung dalam rincian pekerjaan mencakup semua orang yang ikut serta dalam pengembangan sistem.

 Tahap Perencanaan
- Keuntungan :
1. Menentukan lingkup sistem
2. Mengenali berbagai area permasalahan sistem
3. Mengatur urutan tugas
4. Memberikan dasar pengendalian

- Langkah-langkah
1. Menyadari masalah
2. Mendefinisikan masalah
3. Menentukan tujuan sistem
4. Mengidentifikasi kendala-kendala sistem
5. Membuat studi kelayakan
6. Mempersiapkan usulan penelitian sistem
7. Menyetujui atau Menolak Penelitian proyek
8. Menetapkan mekanisme pengendalian

 Tahap Analisis
1. Mengumumkan Penelitian
2. Mengorganisasikan Tim proyek
3. Mendefinisikan Kebutuhan Informasi
4. Mendefinisikan Kriteria Kinerja Sistem
5. Menyiapkan usulan rancangan
6. Menyetujui atau menolak rancangan proyek

 Tahap Rancangan
1. Menyiapkan rancangan sistem yang terinci
2. Mengidentifikasi berbagai alternative konfigurasi sistem
3. Mengevaluasi berbagai alternative konfigurasi sistem
4. Memilih konfigurasi terbaik
5. Menyiapkan usulan Penerapan
6. Menyetujui atau menolak penerapan sistem
 Tahap Penerapan
1. Merencanakan penerapan
2. Mengumumkan Penerapan
3. Mendapatkan sumber daya perangkat keras
4. Mendapatkan sumber daya perangkat lunak
5. Menyipakan database
6. Menyiapkan fasilitas fisik
7. Mendidik peserta dan pemakai
8. Menyiapkan usulan cutover
9. Menyetujui dan menolak masuk ke sistem baru
10. Masuk ke sistem baru :
- Percontohan (Pilot)
- Serentak (Immediate)
- Bertahap (Phased)
- Paralel (Paralell)
 Tahap Penggunaan
1. Menggunakan sistem
2. Audit sistem
3. Memelihara sistem
- memperbaiki kesalahan
- menjaga kemutakhiran sistem
- meningkatkan sistem
4. Menyiapkan ususlan rekayasa ulang
5. Menyetujui atau menolak rekayasa ulang sistem
 PROTOTYPING
Adalah proses menghasilkan prototipe
 Jenis-jenis
- Prototipe Jenis I
1. Mengidentifikasi kebutuhan pemakai
2. Mengembangkan prototype
3. Menentukan apakah prototype dapat diterima
4. Menggunakan prototipe
- Prototipe Jenis II
1. Mengkodekan sistem operasional
2. Menguji sistem operasional
3. Menentukan jika sistem opersaional dapat diterima
4. Menggunakan sistem operasional
 Daya Tarik Prototyping
1. Komunikasi antara analisis sistem dan pemakai membaik
2. Analisis dapat bekerja dengan lebih baik dalam menentukan kebutuhan pemakai
3. Pemakai berperan lebih aktif dalam pengembangan sistem
4. Spesialis informasi dan pemakai menghabiskan lebih sedikit waktu dan usaha dalam mengembangkan sistem
5. Penerapan menjadi lebih mudah karena pemakai mengetahui apa yang diharapkannya
 Potensi Kegagalan Prototyping
1. Ketergesaan untuk membuat prototype
 Penerapan yang mempunyai prospek yang baik untuk Prototyping

TIPE DATA

Struktur data adalah suatu koleksi atau kelompok data yang dapat dikarakterisasikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

Data secara umum dapat dikategorikan :
• Tipe data sederhana atau data sederhana
1. Tunggal : Integer, Real, Boolean, Karakter
2. Majemuk : String

• Struktur Data
1. Sederhana : Array dan Record
2. Majemuk terdiri atas
• Linier : Linier Linked List, Stack, Queue
• Non Linier : Binary Tree, Binary Search Tree, General Tree, Tree, Graf

 INTEGER

Anggota dari himpunan bilangan :
{..., -(n+1), -n, ..., -2, -1, 0, 1, 2, ..., n, n+1, ...}
Operasi dasar yaitu : penjumlahan, pengurangan, perkalian, pembagian dan perpangkatan

Pembagian Integer (DIV)
Hasil pembagian integer DIV adalah sebuah integer (menghilangkan bagian pecahan dari hasil pembagian)
Contoh : 27 DIV 4 = 6

Selain itu terdapat operasi MOD (Modulo) adalah sisa dari pembagian
Contoh : 27 MOD 4 = 3

Operator yang bekerja terhadap sepasang integer (operand) disebut Binary Operator. Sedangkan operator yang hanya bekerja terhadap satu operand saja disebut Unary Operator.
Contoh dari unary operator adalah negasi.

 REAL

Data numerik yang bukan termasuk integer, digolongkan dalam jenis data real. Ditulis menggunakan titik desimal (atau koma desimal). Dimasukkan ke dalam memori komputer memakai sistem floating point, disebut Scientific Notation.
Penyajiannya terdiri dari : mantissa (pecahan) dan eksponen.


Contoh :
Di dalam sistem desimal, 123000 = 0.123 * 106
di sini 0.123 adalah mantissa atau pecahan, sedangkan 6 adalah eksponennya.
Secara umum suatu bilangan real X dituliskan M * RE
di sini : M dijadikan pecahan, R adalah radixnya dan E merupakan eksponennya.

 BOOLEAN

Disebut juga jenis data logical. Anggota { true atau false}.
A. Operator Logika, yaitu : AND, OR, NOT
• Operator AND akan menghasilkan nilai true, jika kedua operand bernilai true.
• Operator OR akan menghasilkan nilai true, jika salah satu operand bernilai true
• Operator NOT merupakan “precedence” dari operator AND dan OR.

Dalam suatu ekspresi yang tidak menggunakan tanda kurung, operator NOT harus dievaluasi sebelum operator AND dan OR.

B. Operator Relasional, yaitu : >, <, >=, <=, <> dan =
Contoh : 6 < 8 = True
9 < 8 = False

 KARAKTER

Elemen dari suatu himpunan yang terdiri atas bilangan, abjad dan simbol khusus.
(0,1,...,8,9, A, B, ..., Y,Z, +, -,*,, ...}

 STRING

Barisan hingga karakter yang dibentuk oleh suatu kumpulan dari karakter.
Karakter yang digunakan untuk membentuk suatu string disebut alfabet. Dalam penulisannya, suatu string berada dalam tanda “aphosthrope”.

Contoh :
Misal diberikan himpunan alfabet A = {C,D,1}.
String yang dapat dibentuk dari alfabet di atas di antaranya : ‘CD1’,’CDD’,’DDC’,’CDC1’,... dan sebagainya, termasuk “null string” atau “empty string”

Himpunan tak hingga dari string yang dibentuk oleh alfabet A disebut VOCABULARY, Notasi : VA atau A*
Jika suatu string dibentuk dari alfabet {0,1}, maka string yang terbentuk disebut dengan “Bit String”.
OPERASI Operator
Jumlah karakter dalam string LENGTH
Gabungan 2 buah string CONCAT
Sub bagian dari string SUBSTR
Menyisipkan string ke dalam string yang lain INSERT
Menghapus karakter dalam string DELETE

LENGTH

Nilai dari operasi ini adalah suatu integer yang menunjukkan panjang dari suatu string .
Notasi : LENGTH(S) = N (integer)
di sini S = String, N = integer

Contoh :
• Jika diberikan string S =‘a1a2 ... aN’
Maka LENGTH(S) = N

• Jika diberikan string S =“SISTEMINFORMASI”
Maka LENGTH(S) = 15

• Jika diberikan string S =“SISTEM INFORMASI”
Maka LENGTH(S) = 16

• Jika diberikan string S = “ABCD20”
Maka LENGTH(S) = 6

CONCAT

Operasi ini bekerja terhadap dua string dan hasilnya merupakan resultan dari kedua string tersebut.
Jika S1 dan S2 masing-masing adalah suatu string, maka bentuk operasi CONCATENATION dinotasikan dengan : CONCAT(S1, S2).

Contoh :
Misal S1 = ‘a1a2 ... aN’ dan S2 =‘b1b2 ... bM’
Maka CONCAT(S1,S2) = ‘a1a2 ... aNb1b2 ... bM’

String S1 = "Sistem"
String S2 = "Informasi"
CONCAT(S1, S2)= "SistemInformasi"
LENGTH(CONCAT(S1, S2)) = 15

LENGTH(S1) + LENGTH(S2) = LENGTH(CONCAT(S1, S2))
6 + 9 = 15
15 = 15




SUBSTR

Operasi ini adalah operasi membentuk string baru, yang merupakan bagian dari string yang diketahui.
Notasi : SUBSTR(S, i, j)
di sini : S = string yang diketahui
i dan j = integer
i = posisi awal substring 1  i  LENGTH(S)
j = banyak karakter yang diambil
0  j  LENGTH(S) dan 0  i+j-1  LENGTH(S)

Contoh :
Diberikan S = ‘a1a2 ... aN’ ; i = 2 ; j= 4
Maka SUBSTR(S,i,j) = SUBSTR(S,2,4) =‘a2a3a4a5’

• String S = "Sistem Informasi"
SUBSTR(S,i, j) , i = 4 j = 8
SUBSTR(S,4,8) = "tem Info"

• String S = "Sistem"
SUBSTR(S,1,3) = "Sis"
LENGTH(SUBSTR(S,1,3)) = 3

• String S = "Informasi"
SUBSTR(S,4,5) = "ormas"
LENGTH(SUBSTR(S,4,5)) = 5

Catatan :
1. LENGTH(SUBSTR(S,i,j)) = j
2. SUBSTR(CONCAT(S1,S2),1,LENGTH(S1)) = S1
3. SUBSTR(CONCAT(S1,S2),LENGTH(S1)+1,LENGTH(S2)) = S2

INSERT

Operasi ini adalah untuk menyisipkan suatu string ke dalam string lain.
Bentuk umumnya adalah :
INSERT(S1,S2,i). S1 dan S2 masing-masing adalah suatu string dan i adalah posisi awal S2 pada S1.

Contoh :
Misalkan : S1 = ‘a1a2 ... aN’
S2 = ‘b1b2 ... bM’
INSERT(S1, S2,3) = ‘a1a2b1b2 ... bMa3a4... aN’

String S1 = "Sistem"
String S2 = "Informasi"
INSERT(S1,S2,4) = “SisInformasitem”
INSERT(S2,S1,4) = “InfSistemormasi”

DELETE

Operasi ini digunakan untuk menghapus sebagian karakter dalam suatu string.

Bentuk umumnya adalah :
DELETE(S,i,j)  menghapuskan sebagian karakter dalam string S, mulai dari posisi i dengan panjang j.

Contoh :
Diberikan string S = ‘a1a2 ... aN’
DELETE(S,3,4) = ‘a1 a2 a7a8 ... aN’

• String S = "Sistem Informasi"
i = 4, j = 9
DELETE(S,i,j) = “Sismasi”
DELETE(S,j,i) = “Sistem Imasi”

• String S = “SistemInformasi”
DELETE(S, 4, 5) = “Sisformasi”
DELETE(S, 5, 4) = “Sistformasi”

DEKLARASI DALAM BAHASA PEMROGRAMAN
 PASCAL
Var Count : integer;
Switch : boolean;
Betha : char;
Alamat : packed array [1..25] of char;

 COBOL
DATA DIVISION
01 Count PICTURE S999.
01 Flda PICTURE X.
88 Switch VALUE ‘Y’.
01 Betha PICTURE X.
01 Alamat PICTURE X(25).


MAPPING KE STORAGE

 INTEGER

Bentuk mapping ke storage dari integer dapat dilakukan dengan beberapa cara, yaitu :
1. Skema Sign and Magnitude
2. Skema One’s Complement
3. Skema Two’s Complement



 SKEMA SIGN AND MAGNITUDE

Cara ini merupakan bentuk konvensional yang digunakan manusia untuk menyatakan suatu bilangan dalam bentuk biner. Di sini representasi bilangan positif dan negatif hanya dibedakan dengan tanda saja. Biasanya tanda positif atau negatif ditunjukkan oleh digit terdepan dari bentuk binernya, untuk representasi dengan jumlah digit tertentu.

Contoh :
+5  + 101 atau 5  101
-5  - 101

Catatan : tanda (+) biasanya diabaikan

 SKEMA TWO’S COMPLEMENT

Jika x bilangan bulat non negatif maka x’ bilangan binary negatif dari x sedemikian sehingga x + x’ = R
R = 2N
N = jumlah digit maksimum
x’ = R - x

Contoh :
Bila N = 4, maka R = 24 = 16
x = 5  0101
x’ = R - x
= 16 - 5 = 11  1011 (-5)

 SKEMA ONE’S COMPLEMENT

Jika x bilangan bulat non negatif maka x’ bilangan binary negatif dari x sedemikian sehingga x + x’ = R
R = 2N - 1
N = jumlah digit maksimum
x’ = R – x

Contoh :
Bila N = 4, maka R = 24 - 1= 15
x = 5  0101
x’ = R - x
= 15 - 5 = 10  1010 (-5)

Catatan
Untuk R = 2N dan R = 2N - 1, bilangan bulat yang dapat disimpan dalam storage untuk ke-2 cara ini adalah :

2 (N-1) - 1

Untuk R = 24, bilangan bulat terbesar = 23 -1, maka r = 24 merepresentasikan bilangan dari -7 sampai dengan +7


INTEGER SIGN &
MAGNITUDE TWO’S
COMPLEMENT ONE’S
COMPLEMENT
-7 -111 1001 1000
-6 -110 1010 1001
-5 -101 1011 1010
-4 -100 1100 1011
-3 -011 1101 1100
-2 -010 1110 1101
-1 -001 1111 1110
0 000 0000 0000
1 001 0001 0001
2 010 0010 0010
3 011 0011 0011
4 100 0100 0100
5 101 0101 0101
6 110 0110 0110
7 111 0111 0111


 KARAKTER

Ada banyak skema yang digunakan untuk merepresentasikan karakter dalam storage. Pada umumnya skema yang paling banyak digunakan adalah :
1. Extended Binary Coded Decimal Interchange (EBCDIC)
Digunakan kode 8 bit untuk menyatakan sebuah karakter. Jika dihitung, kemungkinan kombinasi seluruhnya : 28 = 256.

2. American Standard Code for Information Interchange (ASCII)
Digunakan kode 7 bit untuk menyatakan sebuah karakter. Jika dihitung, kemungkinan kombinasi seluruhnya : 27 = 128.

 STRING

Untuk mengetahui bentuk mapping pada storage dari suatu string, perlu diketahui beberapa hal yang menyangkut ruang untuk string yang bersangkutan antara lain :
- letak posisi awal (start) dan posisi akhir (terminal)
- suatu pointer yang menunjukkan lokasi pada storage

Ada tiga cara yang umum digunakan untuk mapping suatu string ke dalam storage.
Misal diberikan dua string, yaitu :
S1 = ‘ABCDEFG’ dan S2 = ‘BCD’


 CARA 1
Menggunakan tabel informasi :
- nama string (NAME)
- alamat awal (START)
- panjang string (LENGTH)

NAME START LENGTH
STRING1 PTR1S 7
STRING2 PTR2S 3

Format penyimpanannya dapat berupa :
ABCDEFGBCD atau ABCDEFG

PTR2S

PTR1S PTR2S PTR1S


 CARA 2
Menggunakan tabel informasi :
- nama string (NAME)
- alamat awal (START)
- alamat akhir (TERM)

NAME START TERM
STRING1 PTR1S PTR1T
STRING2 PTR2S PTR2T

Format penyimpanannya dapat berupa :
ABCDEFGBCD atau ABCDEFG

PTR1T PTR2T PTR2T PTR1T
PTR2S
PTR1S PTR2S PTR1S
 CARA 3
Menggunakan tabel informasi :
- nama string (NAME)
- alamat awal (START)
- suatu tanda yang menunjukkan batas string

NAME START
STRING1 PTR1S
STRING2 PTR2S

Penyimpanannya :

ABCDEFG#BCD#



PTR1S PTR2S

Cara lain yaitu : 1. Packed
2. Unpacked

Suatu string yang direpresentasikan dalam bentuk packed terbagi atas beberapa word. Banyaknya karakter untuk masing-masing word tergantung dari kode yang digunakan oleh mesin (bit-nya).
Secara umum jumlah word yang digunakan untuk merepresentasikan string S dalam storage dengan K karakter per word adalah :

LENGTH(S)

K
Contoh :
Misal diberikan string S =“ManajemenInformatika”, direpresentasikan dalam 4 karakter per word dalam bentuk packed. Maka secara fisik dapat digambarkan :

Mana jeme nInf orma tika

Jumlah word : 5
Jumlah karakter/word : 4

Sedangkan cara unpacked, setiap word terdiri hanya satu karakter, berarti jumlah word yang diperlukan untuk merepresentasikan suatu string S adalah : LENGTH(S)
Contoh :
Diberikan string S = “Gunadarma”. Representasinya dalam bentuk unpacked adalah : LENGTH(S) = 9

G u n a d a r m a

ARRAY

Array adalah suatu himpunan hingga elemen, terurut dan homogen.

ARRAY DIMENSI SATU
Vektor adalah bentuk yang sederhana dari array, yang merupakan array dimensi satu.
Array N dapat kita bayangkan :

N(1) N(2) N(3) ... N(I)

Subskrip atau index dari suatu elemen menunjukkan posisi/urutan elemen dalam array.

BENTUK UMUM
Misal : Array N dengan tipe data T dan subskrip bergerak dari L sampai U, maka array N dapat ditulis : N(L:U)

Banyaknya elemen adalah : U - L + 1

DEKLARASI ARRAY DALAM BAHASA PEMROGRAMAN

Misalkan : Hasil pencatatan temperatur suhu ruangan dalam 1 hari (24 jam)
1 2 3 24
28 30 29 ... 30

Disimpan dalam array TEMP sebagai berikut : TEMP (1:24)


Deklarasi :
PASCAL
var TEMP : Array[1..24] of integer;

BASIC
DIM TEMP(24)

COBOL
01 TABEL-TEMP
02 TEMP OCCURS 24 TIMES PIC 99.


ARRAY DIMENSI DUA
Adalah suatu array yang setiap elemennya merupakan tipe data array pula.

Jika array B terdiri dari M elemen, yang setiap elemennya terdiri dari suatu array dengan N elemen, maka array B dapat digambarkan sebagai berikut :

1 2 3 ... N
L2 U2
L1 1
2

.
.
.





U1
M


Memiliki 2 index (baris dan kolom).
Dalam hal ini kita perlu memberi 2 harga subskrip untuk mengidentifikasikan masing-masing elemen pada array dimensi dua, yaitu :
• Subskrip pertama menunjukkan baris dari array,
• Sedangkan subskrip kedua menunjukkan kolom dari array.


BENTUK UMUM

Misal :
Array B dengan tipe data T, subskrip baris dari L1 sampai U1, subskrip kolom dari L2 sampai U2, ditulis sebagai berikut :

B(L1:U1,L2:U2)


Banyaknya elemen adalah : (U1 - L1 +1) * (U2 - L2 +1)

DEKLARASI ARRAY DALAM BAHASA PEMROGRAMAN

Misal : Menyajikan nilai ujian dari 100 mahasiswa tingkat 2 sebanyak 8 mata kuliah.

1 2 3 ... 100
L2 U2
L1 1
A
C
A
2

.
.
.





U1
8
B

Disimpan dalam array NILAI sebagai berikut :
NILAI(1:8, 1:100)

Deklarasi :
PASCAL
Var NILAI : array[1..8, 1..100] of char;

BASIC
Dim NILAI(8,100)

COBOL
01. TABEL-NILAI
02. BRS OCCURS 8 TIMES
03. KOLOM OCCURS 100 TIMES PIC X.


PEMETAAN KE STORAGE : ARRAY

DIMENSI SATU
Alamat awal dari memori yang dialokasikan bagi array.
Alamat awal dari array dinyatakan dengan B (Base Location), dan setiap elemen dari array menduduki S byte.
Alamat awal dari array dengan elemen ke-I adalah :

B + (I -L) * S

Contoh : Alamat awal dari A(4)  I = 4
A(2:6) B + (I – L) * S
2 3 4 5 6 B + (4 – 2) * S = B + 2 * S
25 20 10 15 12
DIMENSI DUA

Memori komputer adalah linier.

Contoh : AA(1:4, 1:6)

L2 U2
1 2 3 4 5 6
L1 1
2
AA(2,4)
3

U1 4



AA(2,4) I = 2, J = 4


Pelinieran array dimensi banyak dengan cara :

1. Secara Baris (ROW-MAJOR ORDER)

AA(2,4)

Kolom
1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6

Baris 1 2 3 4


B + (I - L1) * (U2 - L2 + 1) * S + (J - L2) * S


2. Secara Kolom (COLUMN-MAJOR ORDER)

AA(2,4)

Baris
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4

Kolom 1 2 3 4 5 6


B + (J - L2) * (U1 - L1 + 1) * S + (I - L1) * S

ARRAY DIMENSI TIGA

Adalah suatu array yang setiap elemennya merupakan tipe data array juga yang merupakan array dimensi dua.

Contoh :
Penyajian data mengenai banyaknya mahasiswa dari 20 perguruan tinggi di Jakarta, berdasarkan tingkat (1 sampai 5), dan jenis kelamin (pria atau wanita). Misalkan array tersebut dinamakan MHS. Ambil subskrip pertama, tingkat = 1, 2, ..., 5; subskrip kedua, jenis kelamin (pria = 1, wanita = 2), dan subskrip ketiga, perguruan tinggi adalah K = 1, 2, ..., 20. Jadi MHS(4,2,17) menyatakan jumlah mahasiswa tingkat 4, wanita, dari perguruan tinggi 17.


CROSS SECTION (Penampang Array Berdimensi-2)

Adalah pengambilan salah satu subskrip.
Misal : Baris = tetap/konstan
Kolom = berubah-ubah (*)

Contoh : B(*,4) = semua elemen pada kolom ke-4.
B(2,*) = semua elemen pada baris ke-2.

Pengertian cross-section pada array dimensi banyak, adalah sama seperti pada array dimensi dua.

Misal :
MHS(4,*,17) = jumlah mahasiswa tingkat 4 dari perguruan tinggi 17 (masing-masing untuk pria dan wanita).
MHS(*,*, 3) = jumlah mahasiswa untuk masing-masing tingkat, pria dan wanita, dari perguruan tinggi 3.

TRANSPOSE dari array dimensi-2.

Adalah penulisan baris menjadi kolom atau kolom menjadi baris.
Notasi : Array B (I,J), transpose dari array B adalah BT = (J,I)

Contoh :

0 1 2 0 3
A = 3 4 5 AT = 1 4
2 5

A(1,1) = AT(1,1) A(2,1) = AT(1,2)
A(1,2) = AT(2,1) A(2,2) = AT(2,2)
A(1,3) = AT(3,1) A(2,3) = AT(3,2)



TRIANGULAR ARRAY (ARRAY SEGITIGA)

Triangular array dapat berupa :
1. Upper Triangular
semua elemen di bawah diagonal utama = 0
2. Lower Triangular
semua elemen di atas diagonal utama = 0

Array berukuran 6 x 6

x x x x x x x 0 0 0 0 0
0 x x x x x x x 0 0 0 0
0 0 x x x x x x x 0 0 0
0 0 0 x x x x x x x 0 0
0 0 0 0 x x x x x x x 0
0 0 0 0 0 x x x x x x x

Upper Triangular Lower Triangular

Jumlah baris (N) besar, elemen 0 tidak perlu disimpan dalam memori.

Pendekatan :
1. Pelinieran array
2. Menyimpan bagian/elemen  0.

Untuk lower triangular, jumlah maksimum elemen  0 pada baris ke-I = I

Total elemen  o tidak lebih dari : (Untuk upper dan lower triangular)

N
 I = 1/2 N(N + 1)
I = 1

Upper Triangular T disimpan secara baris dalam array dim-1, S.

T(1,1)  S(1) T(2,2)  S(n+1)
T(1,2)  S(2)
. .
. .
. .
T(1,n)  S(n) T(n,n)  S(1/2n (n+1))







Program dengan lebih dari 1 array triangular kita dapat menyimpan 2 array sekaligus.

Contoh 1 :

Array A (upper) : N x N
B (lower) : (N-1) x (N-1)

 C : N x N
C(I,J) = A(I,J) untuk I  J
C(I+1, J) = B(I,J) untuk I  J


Misal :
Array A (upper) : 3 x 3
B (lower) : 2 x 2

1 2 3 7 0
A = 0 4 5 B = 8 9
0 0 6

maka akan disimpan di C : 3 x 3

1 2 3
C = 7 4 5
8 9 6

Contoh 2 :

Array A (upper) : N x N
B (lower) : N x N

Disimpan bersama dalam array C : N x (N + 1)
C(I, J+1) = A(I,J) untuk I  J
C(I, J) = B(I,J) untuk I  J

1 2 3 7 0 0
A = 0 4 5 B = 8 9 0
0 0 6 11 12 13

7 1 2 3
C = 8 9 4 5
11 12 13 6

Misalkan sekarang ada 2 array, sama-sama Upper Triangular, yakni array A dan B. Kita dapat menyimpan bersama-sama dengan melakukan transpose terhadap salah satu array tersebut, misal A menjadi AT. (Lower Triangular).


SPARSE ARRAY

Suatu array yang sangat banyak elemen nol-nya dikenal sebagai sparse array.

Contoh :
1 2 3 4 5 6 7 8 9 10

1 0 0 0 0 1 0 0 2 0 0
2 0 1 0 0 0 0 0 0 0 0
3 1 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 4 0 0 0 0 0 0
6 0 0 0 0 0 0 0 2 0 0
7 0 0 0 0 0 0 0 0 0 0
8 2 1 0 0 0 0 0 0 0 0


Keuntungan :

Menyimpan elemen  0 saja, disimpan sebagai TRIPEL, dengan bentuk : (sub baris, sub kolom, nilai elemen)
TRIPEL tersebut disimpan sebagai vektor.
Array disimpan sebagai TRIPEL

Baris Kolom Nilai
V(1) 1 5 1
V(2) 1 8 2
V(3) 2 2 1
V(4) 3 1 1
V(5) 5 4 4
V(6) 6 8 2
V(7) 8 1 2
V(8) 8 2 1

Kekurangan :

Bila dilakukan up-dating, elemen = 0   0 atau  0  = 0, menimbulkan kesulitan yaitu urutan vektor harus diperbaiki.

Misal :
1. V(2) diubah menjadi 0, urutan V(3) - V(8)  V(2) - V(7)
2. elemen dengan subskrip (4,6) menjadi 7
V(5)  (4,6,7), urutan bergeser V(5) - V(8)  V(6) - V(9).

STACK(TUMPUKAN)

LINIER LIST

Suatu struktur data umum yang berisi suatu kumpulan terurut dari elemen; jumlah elemen di dalam list dapat berubah-ubah.

Linier list A yang terdiri dari T elemen pada waktu t, dinotasikan sebagai : A = [ A1, A2, ..., AT]

Jika T = 0, maka A disebut “Empty List” atau “Null List”

Suatu elemen dapat dihilangkan/dihapus dari sembarang posisi dalam linier list, dan dapat pula dimasukkan elemen baru sebagai anggota list.

Contoh :
1. File, dengan elemennya berupa record
2. Buku telepon
3. Stack
4. Queue
5. Linear link list

STACK
Stack adalah suatu bentuk khusus dari linier list, dengan operasi penyisipan dan penghapusan dibatasi hanya pada satu sisinya, yaitu puncak stack (TOP).

Elemen teratas dari stack dinotasikan sebagai TOP(S).
Untuk stack S, dengan S = [S1, S2, S3, ..., ST]
maka TOP(S) = ST

Jumlah elemen di dalam stack kita notasikan dengan NOEL(S).
NOEL(S) menghasilkan nilai integer.
Untuk stack S = [S1, S2, S3, ..., ST] maka NOEL (S) = T.

Operator penyisipan (insertion) : PUSH
Operator penghapusan (deletion) : POP
Operasi stack : LIFO (Last In First Out), yaitu : yang terakhir masuk yang pertama keluar.

Jika ada NOEL elemen didalam stack, maka elemen ke NOEL merupakan elemen puncak (TOP).





Stack secara umum :

S = [S1, S2, ..., SNOEL]
bahwa : SI berada di atas elemen SJ, untuk I > J
SI akan dikeluarkan lebih dulu dari elemen di bawahnya.

Contoh stack : Tumpukan baki dalam cafetaria

Empat operasi dasar yang berlaku pada stack :
1. CREATE(stack)
2. ISEMPTY(stack)
3. PUSH(elemen, stack)
4. POP(stack)

• CREATE
adalah operator yang menunjukkan suatu stack kosong dengan nama S.

Jadi : NOEL(CREATE(S)) = 0
TOP(CREATE(S)) adalah TIDAK TERDEFINISI.

• ISEMPTY
adalah operator yang menentukan apakah stack S kosong.
Operandnya terdiri dari type data stack. Hasilnya merupakan type data Boolean.

ISEMPTY(S) = True. Jika S hampa, yakni bila NOEL(S) = 0.

• PUSH
adalah operator yang menambahkan elemen E pada puncak stack S. Hasilnya merupakan stack yang lebih besar.
PUSH(E,S). E ditempatkan sebagai TOP(S).

• POP(stack)
adalah operator yang menghapus sebuah elemen dari puncak stack S. Hasilnya merupakan stack yang lebih kecil.

• POP(S) mengurangi NOEL(S)
• POP(CREATE(S))  kondisi error
• POP(PUSH(E,S)) = S

DEKLARASI STACK DALAM COBOL DAN PASCAL

TOP-PTR

 100 S Keterangan :

• STACK S
• TOP-PTR : subskrip dari elemen TOP(S) dari stack.
1

COBOL

01 STACK-STRUCT  kombinasi dari array dan indikator untuk TOP
02 S OCCURS 100 TIMES PIC 9(5)
02 TOP-PTR PIC 9(3)

PASCAL

TYPE STACKSTRUCT = RECORD
STACK : ARRAY [1..100] of integer;
TOPPTR : integer;
END;

VAR S : STACKSTRUCT;

NOEL(S) = TOP-PTR, ISEMPTY(S) = true, bila TOP-PTR = 0.


OPERASI PUSH & POP

PUSH

IF TOP-PTR < NOEL-MAX
THEN COMPUTE TOP-PTR = TOP-PTR + 1
MOVE EON TO S(TOP-PTR)
ELSE Overflow condition

POP

IF TOP-PTR > 0
THEN MOVE S(TOP-PTR) TO EOFF
COMPUTE TOP-PTR = TOP-PTR - 1
ELSE Underflow condition

EON : elemen yang di PUSH ke dalam S.
EOFF : elemen yang di POP ke luar S.
NOEL-MAX : panjang max stack.


PUSH

Procedure PUSH (eon: integer);
Begin
if (s.topptr < noelmax)
then
Begin
s.topptr := s.topptr + 1;
s.stack [s.topptr] := eon;
End;
else Overflow-condition
End;




POP

Procedure POP (var eoff : integer);
Begin
if (s.topptr > 0)
then
Begin
eoff := s.stack [s.topptr];
s.topptr := s.topptr - 1;
End;
else Underflow Condition
End;

APLIKASI STACK

1. Penjodohan Tanda Kurung/Matching Parantheses
ALGORITMA
a. Amati barisan elemen dari kiri ke kanan
b. • bila bertemu ‘(‘, maka ‘(‘ di push ke dalam stack.
• bila bertemu ‘)’, maka periksa stack hampa atau tidak.
bila hampa  ada ‘)’ dan tidak ada ‘(‘ (error)
bila tidak hampa  ada sepasang ‘(‘ & ‘)’ & POP elemen keluar

2. NOTASI POSTFIX
ALGORITMA
Amati barisan dari kiri ke kanan
1. Jika ‘(‘, maka PUSH ke dalam stack.
2. Jika ‘)’, POP elemen dalam stack sampai simbol ‘(‘. Semua di POP merupakan output kecuali ‘(‘ tadi.
3. Jika simbol operand, langsung merupakan output.
4. Jika simbol operator, maka :
Jika elemen TOP stack dengan level >= maka POP sebagai output teruskan sampai ‘(‘.
elemen TOP <, operator yang diamati di PUSH ke dalam stack.
5. Bila ‘;’ kita POP semua elemen dalam stack hingga hampa.

APLIKASI STACK

Notasi Postfix

Contoh :
Notasi Infix : ((A+B) * C/D+E^F)/G;

Simbol yang diamati 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
( ( A + B ) * C / D + E ^ F ) / G ;
TOP dari
STACK

(
(
(
(
( +
(
( +
(
(

(
*
(
*
(
/
(
/
(
+
(
+
( ^
+
( ^
+
(

/

/
OUTPUT A B + C * D / E F ^+ G /

Soal :
1. A * B - (C + D) -(E - F) + F/H ^ I;
2. ((B * C) + C/D ^ F) + G;
3. A ^ B * C - D + E/F / (G + H);

QUEUE (ANTREAN)

ANTREAN (Queue)
Suatu bentuk khusus dari linear list, dengan operasi penyisipan (insertion) hanya diperbolehkan pada salah satu sisi, yang disebut REAR, dan operasi penghapusan (deletion) hanya diperbolehkan pada sisi yang lainnya, yang disebut FRONT dari list.

Antrean Q = [Q1, Q2, ... , QN]
Front(Q) = Q1 bagian depan antrean
Rear(Q) = QN bagian belakang antrean
Noel(Q) = N jumlah elemen dalam antrean

Operasi Antrean : FIFO (First In First Out)
Elemen yang pertama masuk merupakan elemen yang pertama keluar.

Operator : Penyisipan : Insert
Penghapusan : Remove

Empat operasi dasar antrean, yaitu :
1. CREATE
2. ISEMPTY
3. INSERT
4. REMOVE

• CREATE (Q)
Operator yang menunjukkan suatu antrean hampa Q.
Berarti : Noel (Q) = 0
Front (Q) & Rear (Q) = tidak terdefinisi

• ISEMPTY (Q)
Operator yang menunjukkan apakah antrean Q hampa.
Operand : tipe data antrean
Hasil : tipe data boolean

ISEMPTY (CREATE (Q)) = True

• INSERT (E, Q)
Operator yang menginsert elemen E ke dalam antrean Q.
E ditempatkan di bagian belakang antrean.
Hasil : antrean yang lebih besar.

REAR (INSERT (E, Q)) = E
ISEMPTY (INSERT (E, Q)) = False

• REMOVE (Q)
Operator yang menghapus elemen bagian depan dari antrean Q.
Hasil : antrean yang lebih pendek.
Pada setiap operasi, Noel (Q) berkurang 1 dan elemen ke-2 menjadi elemen terdepan.
Jika Noel (Q) = 0 maka Q = hampa
Remove (Q) = kondisi error (underflow condition)
Remove (Create (Q)) = kondisi error (underflow condition)

PENYAJIAN DARI ANTREAN
1. One Way List (Linear Linked List)
2. Array

Array Queue
Kalau tidak disebutkan lain, maka Antrean disajikan dalam Array Queue, dilengkapi 2 variabel penunjuk :
FRONT (elemen depan antrean)
REAR (elemen belakang antrean)

Contoh :
Antrean dalam array queue dengan 5 lokasi memori
1. Pada awal antrean hampa Queue

F = 0
R = 0
1 2 3 4 5

2. A, B dan C dimasukkan Queue
F = 1
R = 3 A B C

1 2 3 4 5

3. Hapus 1 elemen : A dihapus Queue
F = 2
R = 3 B C

1 2 3 4 5

4. D dan E dimasukkan Queue
F = 2
R = 5 B C D E

1 2 3 4 5

5. Hapus 1 elemen : B dihapus Queue
F = 3
R = 5 C D E

1 2 3 4 5
Untuk setiap pemasukan elemen, nilai Rear + 1
penghapusan elemen, nilai Front + 1

Akibatnya, setelah pemasukan elemen ke-5 maka lokasi Queue (5) telah diduduki mungkin saja tidak sebanyak 5 elemen ada dalam antrean, karena sudah dilakukan beberapa penghapusan. Untuk pemasukan elemen berikutnya, yakni memasukkan elemen ITEM, gunakan lokasi QUEUE (1), dan seterusnya. Array Sirkular yaitu elemen Queue (1) datang sesudah Queue (N) di dalam array, maka Rear = 1. Jika Front = N, dilakukan penghapusan maka Front = 1, bukan N + 1.

Contoh :
Array Sirkular dengan 5 lokasi memori

1. Pada awal antrean hampa Queue
F = 0
R = 0

1 2 3 4 5

2. A, B dan C dimasukkan Queue
F = 1
R = 3 A B C

1 2 3 4 5

3. Hapus 1 elemen : A dihapus Queue
F = 2
R = 3 B C
1 2 3 4 5

4. D dan E dimasukkan Queue
F = 2
R = 5 B C D E

1 2 3 4 5

5. Hapus 1 elemen : B dihapus Queue
F = 3
R = 5 C D E

1 2 3 4 5

6. G dimasukkan Queue
F = 3
R = 1 G C D E

1 2 3 4 5
ALGORITMA

1. QINSERT (Memasukkan data ke dalam suatu antrean)
Memeriksa kemungkinan terjadi overflow, yakni dengan melihat apakah antrean tersebut terisi penuh.
2. QDELETE (Menghapus elemen depan dari antrean)
Memeriksa kemungkinan terjadi underflow, yakni dengan melihat apakah antrean tersebut kosong.

QINSERT (QUEUE, N, FRONT, DATA)

1. {Apakah antrean penuh}
Jika Front = 1 dan Rear = N, atau
Jika Front = Rear + 1 , maka write overflow, return
2. Jika Front = Null, maka Front := 1
Rear := 1
Dalam hal lain
Jika Rear = N, maka Rear := 1
Dalam hal lain
Rear := Rear + 1
3. Queue (Rear) := Data (masukkan elemen baru)
4. Return.


QDELETE (QUEUE, N, FRONT, REAR, DATA)

1. {Apakah antrean kosong}
Jika Front := Null, maka write underflow, return
2. Data := Queue (Front)
3. (Front mendapat nilai baru)
Jika Front := Rear, maka
Front := Null,
Dalam hal lain
Jika Front = N, maka Front := 1
Dalam hal lain
Front := Front + 1
4. Return.

DEQUE (Queue Ganda atau Double Queue)

Suatu linear list, yang penambahan dan penghapusan elemen dapat dilakukan pada kedua sisi ujung list, tetapi tidak dapat dilakukan ditengah-tengah list.

Deque (menggunakan array sirkular)
Menggunakan 2 pointer/penunjuk :
1. LEFT : sisi kiri dari deque
2. RIGHT : sisi kanan dari deque

Asumsi : elemen deque berurut dari kiri ke kanan.

Contoh : Menggambarkan 2 buah deque, masing-masing berisi 4 elemen, yang ditempatkan di dalam sebuah Array dengan 8 lokasi memori.
DEQUE

LEFT : 4 A B C D
RIGHT : 7 1 2 3 4 5 6 7 8
(a)

DEQUE

LEFT : 7 Y Z W X
RIGHT : 2 1 2 3 4 5 6 7 8
(b)

2 variasi deque, yaitu :
1. Deque Input Terbatas
Pemasukan elemen pada satu ujung list, penghapusan elemen pada kedua ujung list.
2. Deque Output Terbatas
Pemasukan elemen pada kedua ujung list, penghapusan elemen pada salah satu ujung list.

ANTREAN BERPRIORITAS

Himpunan elemen, yang setiap elemennya telah diberikan sebuah prioritas, dan urutan proses penghapusan elemen adalah berdasarkan aturan berikut :
1. Elemen yang prioritasnya lebih tinggi, diproses lebih dahulu dibandingkan dengan elemen yang prioritasnya lebih rendah.
2. Dua elemen dengan prioritas yang sama, diproses sesuai dengan urutannya sewaktu dimasukkan ke dalam antrean berprioritas.

PENYAJIAN ONE WAY LIST DARI ANTREAN BERPRIORITAS

Ketentuan :
1. Setiap simpul dalam list berisi 3 buah data/field yaitu :
(Info, Prn, Link)
2. Simpul X mendahului simpul Y di dalam list, bila :
a. X mempunyai prioritas lebih tinggi dari Y.
b. Mempunyai prioritas yang sama, tetapi X dimasukkan kedalam queue terlebih dahulu sebelum Y.

Ket : Simpul dengan Prn rendah, mendapat prioritas tertinggi.






Contoh : Gambar di bawah memperlihatkan diagram skematik dari Antrean Berprioritas dengan 7 elemen dan penyajian dalam memori.

Diagram tidak dapat menceritakan kepada kita apakah B dimasukkan ke dalam list sebelum atau sesudah D. Di lain pihak, diagram dapat memperlihatkan kepada kita, bahwa B dimasukkan sebelum C, karena B dan C mempunyai Nomor Prioritas yang sama, dan B berada sebelum C di dalam list.

START




A 1 • B 2 • C 2 •



D 4 • E 4 • F 4 • G 5 x

Diagram Skematik

Penyajian Dalam Memori

START AVAIL

5 2 INFO PRN LINK
1
B 2 6
2
7
3 D 4 4
4 E 4 9
5
A 1 1
6 C 2 3
7 10
8 G 5 0
9 F 4 8
10 11
11 12
12 0

Sifat utama dari penyajian One-way list dari sebuah Antrean Berprioritas adalah bahwa elemen dalam Antrean yang seharusnya diproses pertama kali selalu muncul pada bagian permulaan One-way list. Oleh karena itu, adalah sangat sederhana untuk menghilangkan dan memproses sebuah elemen Antrean Prioritas tersebut.



Algoritmanya sebagai berikut :

ALGORITMA 1
Untuk menghapus dan memproses elemen pertama dalam sebuah Antrean Berprioritas yang muncul dalam memori sebagai sebuah one-way list.
1. Pasang ITEM := INFO(START). {Langkah ini dimaksudkan untuk menyimpan data dalam simpul pertama}.

2. Hapus simpul pertama dari list.
3. Proses ITEM
4. Exit

ALGORITMA 2
Untuk menambahkan sebuah ITEM dengan Nomor Prioritas N pada suatu Antrean Berprioritas yang disimpan dalam memori sebagai sebuah one-way list.

1. Telusuri one-way list sampai ditemukan suatu simpul X yang nomor prioritasnya melebihi N. Sisipkan ITEM di depan simpul X.
2. Jika tidak ditemukan simpul semacam itu, sisipkan ITEM sebagai elemen terakhir list.

Kesulitan utama dalam Algoritma muncul dari kenyataan bahwa ITEm disisipkan sebelum simpul X. Hal ini berarti bahwa ketika menelusuri List itu, harus tetap memperhatikan alamat simpul yang mendahului simpul yang sedang diakses.

START

• X 2 •


A 1 • B 2 • C 2 •



D 4 • E 4 • F 4 • G 5 x

Diagram Skematik

Penyajian Dalam Memori

START AVAIL

5 7 INFO PRN LINK
1
B 2 6
2 X 2 3
3 D 4 4
4 E 4 9
5
A 1 1
6 C 2 2
7
10
8 G 5 0
9 F 4 8
10 11
11 12
12 0


PENYAJIAN ARRAY DARI ANTREAN BERPRIORITAS
Menggunakan suatu antrean terpisah untuk setiap tingkat prioritas (untuk setiap nomor prioritas). Setiap antrean akan muncul dalam array sirkularnya sendiri dan harus mempunyai sepasang penunjuk yaitu Front dan Rear.


FRONT REAR 1 2 3 4 5 6
1 2 2 1 A
2 1 3 2 B C X
3 0 0 3
4 5 1 4 F D E
5 4 4 5 G

ALGORITMA PENYISIPAN

Terdiri dari :
1. Algoritma Penyisipan Simpul pada bagian awal list.
2. Algoritma Penyisipan Simpul sesudah suatu simpul yang diketahui lokasinya.
3. Algoritma Penyisipan Simpul ke dalam suatu list terurut.

Semua algoritma diasumsikan bahwa Linked List tersimpan di dalam memori dalam bentuk

LIST(INFO, LINK, START, AVAIL)

dari variabel ITEM menyatakan informasi baru yang akan ditambahkan ke dalam list. Karena semua Algoritma Penyisipan kita tersebut membutuhkan simpul dari list AVAIL, maka selalu mengandung langkah :
1. Memeriksa ruang bebas dari list AVAIL, kalau ternyata tidak ada lagi, yakni dalam hal ini AVAIL = NULL, Algoritma mengirim pesan OVERFLOW.
2. Pemindahan simpul pertama dari list AVAIL, menggunakan variabel NEW. Pemindahan ini melalui sepasang statement

NEW := AVAIL
AVAIL := LINK(AVAIL)

3. Menyalin informasi baru tersebut ke dalam simpul baru, atau dengan perkataan lain, memakai statement

INFO(NEW) := ITEM

Diagram skematik untuk langkah 2 dan 3 adalah (Gambar 15a):

NEW



AVAIL
• FREE STORAGE LIST
ITEM • • • … x


Gambar 15a

PENYISIPAN PADA BAGIAN AWAL LIST

Linked list tidak perlu terurut dan penyisipan tidak harus di suatu posisi tertentu. Maka posisi termudah untuk memasukkan simpul baru adalah di bagian awal list.


ALGORITMA

INSFIRST(INFO, LINK, START, AVAIL, ITEM)
Algoritma ini menyisipkan ITEM sebagai simpul pertama dari list

1. [Apakah Overflow?] Jika AVAIL = NULL, maka tulis OVERFLOW, dan Exit.
2. [Memindahkan simpul pertama dari list AVAIL.]
NEW := AVAIL dan AVAIL := LINK[AVAIL].
3. INFO[NEW] := ITEM. [Menyalin data baru ke dalam simpul baru.]
4. LINK[NEW] := START. [Simpul baru sekarang menuding ke simpul semula.]
5. START := NEW. [Mengubah START agar menuding ke simpul yang baru.]
6. Exit.

Diagram skematik langkah 2 dan 3 terlihat pada Gambar 15a.
Diagram skematik langkah 4 dan 5 dapat dilihat pada Gambar 15b.

START




• • … x
NEW


ITEM •

Gambar 15b

Contoh :
Pandang list pada Gambar 7 yang lalu.
Misalkan angka 75 akan disisipkan pada awal dari List Geometri.
Dengan menggunakan algoritma di atas, perhatikan bahwa ITEM =75, INFO = TEST, dan START = GEOM.

INSFIRST(INFO, LINK, START, AVAIL, ITEM)

1. Karena AVAIL <> NULL, ke langkah 2.
2. NEW = 9, maka AVAIL = LINK[9] = 10.
3. TEST[9] = 75.
4. LINK[9] = 5.
5. GEOM = 9.
6. Exit.

Gambar 16 memperlihatkan keadaan setelah 75 dimasukkan ke dalam List Geomaetri.
Perhatikan bahwa hanya 3 penuding yang berubah, yaitu AVAIL, GEOM dan LINK[9].



TEST LINK
1 16
2 74 14
3 1
ALG
11 4 82 0
5 84 12
6 78 0
7 74 8
GEOM 9 8 100 13
9 75 5
10 3
11 88 2
12 62 7
AVAIL 10 13 74 6
14 93 4
15 0
16 15

Gambar 16

PENYISIPAN SESUDAH SIMPUL DIKETAHUI

Pandang bahwa nilai dari LOC, yaitu lokasi dari simpul A di dalam linked list, atau nilai LOC = NULL. Berikut ini adalah Algoritma untuk menyisipkan ITEM ke dalam list, tepat sesudah simpul A, atau jika LOC = NULL, maka ITEM disisipkan sebagai simpul pertama dari list.

Misalkan N adalah simpul baru, yang lokasinya adalah NEW. Jika LOC = NULL, maka penyisipan dikerjakan seperti pada algoritma yang lalu. Dalam hal lain, seperti terlihat pada gambar 9, jadikan N menuding simpul B (simpul yang sebelumnya mengikuti simpul A), dengan menggunakan statement

LINK[NEW] := LINK[LOC]

Dan jadikan simpul A menuding simpul baru N dengan menggunakan statement
LINK[LOC] := NEW

Algoritma : INSLOC(INFO,LINK,START,AVAIL{Algoritma ini dimaksudkan untuk menyisipkan ITEM, sehingga mengikuti simpul dengan lokasiLOC atau menyisipkan ITEM sebagai Simpul pertama, bila LOC = NULL.
1. [OVERFLOW ?] jika AVAIL = NULL, maka : Tulis: OVERFLOW, dan EXIT
2. [Memindahkan Simpul pertama dari List AVAIL]
NEW := AVAIL
AVAIL := LINK[AVAIL]
3. INFO[NEW] := ITEM. [Menyalin data baru ke dalam simpul baru]
4. Jika LOC = NULL, maka : [Sisipkan sebagai Simpul pertama]
LINK[NEW] := START dan START := NEW.
Dalam hal lain : [Sisipkan sesudah Simpul dengan lokasi LOC]
LINK[NEW] := LINK[LOC] dan LINK[LOC] := NEW.
[Akhir dari struktur jika]
5. EXIT


PENYISIPAN KE DALAM LINKED LIST TERURUT

Misalkan ITEM akan disisipkan ke dalam Linked List terurut LIST. ITEM harus disisipkan di antara simpul A dan B yang berturutan sedemikian sehingga
INFO(A) < ITEM < INFO(B)

Prosedur untuk mencari lokasi simpul A, yakni mencari lokasi dari simpul terakhir dari List yang nilainya kurang dari ITEM. Lakukan traversal list, pergunakan variabel penuding PTR, dan bandingkan ITEM dengan INFO(PTR) pada masing-masing simpul. Selama traversal, jaga jejak lokasi simpul sebelumnya dengan menggunakan variabel penuding SAVE (Gambar 17). Maka SAVE dan PTR ter-update dengan statement
SAVE := PTR dan PTR := LINK[PTR]

START SAVE PTR

• •

• • • • • x

Gambar 17

Traversal dilanjutkan selama INFO[PTR] < ITEM, atau akan berhenti saat ITEM <= INFO[PTR]. Kemudian PTR menuding ke simpul B, maka SAVE berisi lokasi dari simpul A.

Kasus bahwa list adalah hampa, dan ITEM < INFO[START], sehingga LOC = NULL ditangani sendiri, karena tidak mengandung variabel SAVE.
Prosedur : FINDA (INFO, LINK, START, ITEM, LOC)
{Prosedur ini akan menemukan lokasi LOC dari simpul terakhir dalam list terurut, sedemikian sehingga INFO[LOC] < ITEM, atau menjadikan LOC = NULL}

1. [List hampa?] Jika START = NULL, maka LOC := NULL, dan Return.
2. [Kasus khusus?] Jika ITEM < INFO[START], maka LOC := NULL, dan Return.
3. SAVE := START dan PTR := LINK[START]. [Mengawali Penuding]
4. Ulangi langkah 5 dan 6 sementara PTR <> NULL.
5. Jika ITEM < INFO[PTR], maka :
LOC := SAVE, dan Return.
[Akhir dari struktur jika]
6. SAVE := PTR dan PTR := LINK[PTR]. [Mengupdate Penuding].
[Akhir dari loop langkah 4]
7. LOC := SAVE
8. Return.

Sekarang kita mempunyai Algoritma untuk menyisipkan ITEM ke dalam linked list terurut List, dengan memanfaatkan 2 prosedur terakhir.

Algoritma : INSSRT(INFO, LINK, START, AVAIL, ITEM)
{Algoritma ini menyisipkan ITEM ke dalam suatu linked list terurut}

1. [Gunakan Prosedur FINDA untuk mencari lokasi dari simpul sebelum ITEM]
Call FINDA(INFO, LINK, START, ITEM, LOC).
2. [Gunakan Algoritma INSLOC untuk menyisipkan ITEM sesudah simpul dengan lokasi LOC]
Call INSLOC(INFO, LINK, START, AVAIL, LOC, ITEM).
3. Exit.

Contoh :
Perhatikan list yang terurut secara alfabetik dari para Pasien pada Gambar 6 yang lalu. Pandang bahwa Jones akan disisipkan ke dalam List tersebut. Gunakan Algoritma INSSRT di atas, yang pada hakikatnya melaksanakan prosedur FINDA, dan kemudian Algoritma INSLOC. Perhatikan bahwa ITEM = Jones, dan INFO = BED.

a. FINDA(BED, LINK, START, ITEM, LOC)
1. Karena START <> NULL, maka kita melangkah ke langkah 2.
2. Karena BED[5] = Adams < Jones, kendali beralih ke langkah 3.
3. SAVE = 5, dan PTR = LINK[5] = 3


4. Langkah 5 dan 6 diulang, sebagai berikut :
a. BED[3] = Dean < Jones, maka SAVE = 3, dan PTR = LINK[3] = 11
b. BED[11] = Fields < Jones, maka SAVE = 11, dan PTR = LINK[11] = 8
c. BED[8] = Green < Jones, maka SAVE = 8, dan PTR = LINK[8] = 1
d. Karena BED[1] = Kirk > Jones, maka LOC = SAVE = 8, dan Return.

b. INSLOC(BED, LINK, START, AVAIL, LOC, ITEM)
1. Karena AVAIL <> NULL, maka kita melangkah ke langkah 2.
2. NEW = 10, dan AVAIL = LINK[10] = 2
3. BED[10] = Jones
4. Karena LOC <> NULL, maka
LINK[10] = LINK[8] = 1, dan LINK[8] = NEW = 10
5. Exit

Gambar 18 menunjukkan struktur data sesudah Jones disisipkan ke dalam List. Di sini hanya 3 penuding yang berubah, yakni AVAIL, LINK[10] dan LINK[8].

BED LINK
START
5 1 Kirk 7
2 6
3 Dean 11
4 Maxwell 12
5 Adams 3
AVAIL 2 6 0
7 Lane 4
8 Green 10
9 Samuels 0
10 Jones 1
11 Fields 8
12 Nelson 9

Gambar 18

PENGHAPUSAN SIMPUL LINKED LIST

Misalkan simpul N adalah simpul dari List yang terletak di antara simpul A dan simpul B (Gambar 19a). Simpul N tersebut akan dihapus dari List. Diagram skematik dari penghapusan terlihat pada Gambar 19b.

Penghapusan terjadi begitu nextpointer dari A berubah menuding ke B. Dalam penghapusan ini, kita harus mengingat alamat dari simpul A, simpul pendahulu dari simpul yang akan dihapus tersebut.


Pandang linked list tersimpan di memori dalam bentuk :

LIST(INFO, LINK, START, AVAIL)

Gambar 19 tidak memperlihatkan fakta bahwa kita melakukan penghapusan simpul N, dan akan memulangkan ruang memori kepada list AVAIL.
Diagram skematik yang lebih tepat terlihat pada Gambar 20. Perhatikan bahwa 3 field penuding berubah, yakni :
1. Nextpointer dari simpul A sekarang menuding ke B, yang tadinya dituding oleh N.
2. Nextpointer dari simpul N sekarang menuding ke simpul pertama dari ruang bebas, yang tadinya dituding oleh AVAIL.
3. AVAIL sekarang menuding ke simpul N.

START



Node A
Node N
Node B
• • • • • x

(a) Sebelum Penghapusan

START



Node A
Node N
Node B

• • • • • x

(b) Sesudah Penghapusan

Gambar 19

Di sini terdapat 2 kasus istimewa yaitu :
1. Penghapusan simpul N sebagai simpul pertama dalam list. Dalam hal ini, START akan menuding ke simpul B.
2. Penghapusan simpul N sebagai simpul terakhir dari list, simpul A akan berisi penuding NULL.

START



Node A
Node N
Node B
• • • • • x

AVAIL



• • • … x

Gambar 20


Contoh :
Perhatikan list Pasien pada Gambar 18. Misalkan Pasien Green sudah diperbolehkan pulang, maka BED[8] sekarang menjadi kosong. Agar linked list tersebut tetap terjaga, maka perlu dilakukan perubahan terhadap beberapa field penuding, yakni sebagai berikut :

LINK[11] = 10 LINK[8] = 2 AVAIL = 8

Dari perubahan pertama, Fields yang tadinya mendahului Green, sekarang menuding ke Jones, yang tadinya mengikuti Green. Preubahan kedua dan ketiga akan menambah jumlah ranjang kosong baru pada list AVAIL. Ditekankan bahwa sebelum membuat penghapusan, harus mencari simpul BED[11], yang tadinya menuding ke simpul yang dihapus, BED[8].

BED LINK
START
5 1 Kirk 7
2 6
3 Dean 11
4 Maxwell 12
5 Adams 3
AVAIL 8 6 0
7 Lane 4
8 2
Samuels 0
10 Jones 1
11 Fields 10
12 Nelson 9

Gambar 21

ALGORITMA PENGHAPUSAN

1. Penghapusan simpul sesudah suatu simpul yang diketahui.
2. Penghapusan simpul yang diketahui mempunyai informasi ITEM.

Asumsi : Linked list dalam bentuk LIST(INFO, LINK, START, AVAIL).
Semua algoritma penghapusan selalu mengembalikan ruang memori dari simpul yang dihapus, ke bagian awal dari list AVAIL.
Karenanya, Algoritma mengandung pasangan statement berikut ini:

LINK[LOC] := AVAIL
AVAIL := LOC

Di sini LOC adalah lokasi dari simpul N yang dihapus.
Kedua operasi di atas digambarkan pada Gambar 22.


LOC

• Node N


AVAIL

Free-storage list

• • • … x

Gambar 22


PENGHAPUSAN SIMPUL SESUDAH SIMPUL YANG DIKETAHUI

Algoritma : DEL(INFO, LINK, START, AVAIL, LOC, LOCP)
{Algoritma ini dimaksudkan untuk menghapus simpul N dengan lokasi LOC. LOCP adalah lokasi dari simpul yang mendahului N atau, apabila N adalah simpul pertama, LOCP = NULL}.

1. Jika LOCP = NULL, maka :
START := LINK[START]. [Menghapus simpul pertama]
Dalam hal lain :
LINK[LOCP] := LINK[LOC]. [Menghapus simpul N]
[Akhir dari struktur jika]
2. [Mengembalikan simpul terhapus kepada list AVAIL]
3. Exit.

Gambar 23 merupakan diagram skematik dari statement
START := LINK[START]

START


Node 1 Node 2 Node 3
• • • …

Gambar 23

Gambar 24 merupakan diagram skematik dari statement

LINK[LOCP] := LINK[LOC]

START LOCP LOC

• •

• • • • • x
Node N


Gambar 24

PENGHAPUSAN SIMPUL SESUDAH SIMPUL YANG DIKETAHUI INFORMASINYA

Algoritmanya yakni Algoritma DELLOC bekerja dengan memanfaat-kan Prosedur FINDB.

Prosedur : FINDB(INFO, LINK, START, ITEM, LOC, LOCP)
{Prosedur ini dimaksudkan untuk mencari lokasi LOC dari simpul N pertama yang mengandung ITEM dan lokasi LOCP dari simpul pendahulu N. Jika ITEM tidak terdapat pada List, maka prosedur akan menjadikan LOC = NULL, dan jika ITEM muncul pada simpul pertama, maka LOCP = NULL}.

1. [List hampa?] Jika START = NULL, maka :
LOC := NULL dan LOCP := NULL, dan Return.
[Akhir dari struktur jika]
2. [ITEM di dalam simpul pertama?] Jika INFO[START] = ITEM, maka :
LOC := START dan LOCP := NULL, dan Return.
3. SAVE := START dan PTR := LINK[START] [Inisialisasi Penuding]
4. Ulangi langkah 5 dan 6 sementara PTR <> NULL.
5. Jika INFO[PTR] = ITEM, maka :
LOC := PTR dan LOCP := SAVE, dan Return.
[Akhir dari struktur jika]
6. SAVE := PTR dan PTR := LINK[PTR] [Mengupdate Penuding]
[Akhir dari Loop langkah 4]
7. LOC := NULL [Cari tidak berhasil]
8. Return.

Algoritma : DELLOC(INFO, LINK, START, AVAIL, ITEM)

{Algoritma ini dimaksudkan untuk menghapus dari suatu linked list, simpul N pertama yang berisi informasi ITEM}

1. [Gunakan Prosedur FINDB, untuk mencari lokasi dari N dan simpul pendahulunya]
Call FINDB(INFO, LINK, START, ITEM, LOC, LOCP)
2. Jika LOC = NULL, maka : Tulis : ITEM tidak dalam list, dan Exit.
3. [Hapus simpul]
Jika LOCP = NULL, maka :
START := LINK[START]. [Hapus simpul pertama]
Jika tidak :
LINK[LOCP] := LINK[LOC].
[Akhir dari struktur jika]
4. [Mengembalikan simpul terhapus ke list AVAIL]
LINK[LOC] := AVAIL dan AVAIL := LOC.
5. Exit.

HEADER LINKED LIST

Header linked list adalah suatu list yang mengandung suatu simpul khusus yang terletak pada bagian awal dari list yang disebut simpul header. Berikut ini 2 jenis header linked list yang biasa digunakan yakni :

1. Grounded Header List : header list yang simpul terakhirnya berisi penuding NULL

2. Circular Header List : header list yang simpul terakhirnya menuding ke simpul header dari list tersebut.

LINK[START] = NULL  menunjukkan Grounded Header List hampa
LINK[START] = START  menunjukkan Circular Header List hampa

Graf

Graf adalah :
• Himpunan V (Vertex) yang elemennya disebut simpul (atau point atau node atau titik)
• Himpunan E (Edge) yang merupakan pasangan tak urut dari simpul, anggotanya disebut ruas (rusuk atau sisi)

Notasi : G(V,E)

Simpul u dan v disebut berdampingan bila terdapat ruas (u,v).
Graf dapat pula disajikan secara geometrik, simpul disajikan sebagai sebuah titik, sedangkan ruas disajikan sebagai sebuah garis yang menghubungkan 2 simpul.

Contoh 1 :
Graf G(V,E) dengan :
1. V terdiri dari 4 simpul, yaitu simpul A, B, C dan D
2. E terdiri dari 5 ruas, yaitu e1 = (A, B) e2 = (B, C) e3 = (A, D)
e4 = (C, D) e5 = (B, D)

A e3 D
• •
e1 e5 e4

• •
B e2 C


Banyak simpul disebut ORDER, banyak ruas disebut SIZE dari graf.
Graf yang lebih umum disebut Multigraf

Contoh 2 :
Graf G(V,E) dengan :
1. V terdiri dari 4 simpul, yaitu simpul A, B, C dan D
2. E terdiri dari 6 ruas, yaitu e1 = (A, C) e2 = (A, A) e3 = (A, D)
e4 = (C, D) e5 = (B, C) e6 = (B, C)

A e2 e3 D
• •
e1 e4
e5
• •
B e6 C

Di sini ruas e2 kedua titik ujungnya adalah simpul yang sama, yaitu simpul A, disebut Gelung atau Self-Loop. Sedangkan ruas e5 dan e6 mempunyai titik ujung yang sama, yaitu simpul B dan C, disebut Ruas Berganda atau Ruas Sejajar.

Suatu graf yang tidak mengandung ruas sejajar ataupun self-loop disebut Graf Sederhana atau Simple Graf.

Suatu graf G’(V’,E’) disebut subgraf dari G(V,E), jika V’ himpunan bagian dari V dan E’ himpunan bagian dari E.
Jika E’ mengandung semua ruas dari E yang titik ujungnya di V’, maka G’ disebut subgraf yang direntang oleh V’ (Spanning subgraf).

Contoh :
A e5 D
G • •
e1 e3 e4

• •
B e2 C


A D
G’ • • G’ subgraf dari G (namun bukan dibentuk
oleh V’ = {A,B,D})
e1 e3

B


G’ subgraf yang dibentuk oleh V’ = (A,B,D)

A e5 D
G’ • •

e1 e3

• B


GRAF BERLABEL

Graf G disebut graf berlabel jika ruas dan atau simpulnya dikaitkan dengan suatu besaran tertentu. Jika setiap ruas e dari G dikaitkan dengan suatu bilangan non negatif d(e), maka d(e) disebut bobot atau panjang dari ruas e.

DERAJAT GRAF

Derajat simpul V, ditulis d(v) adalah banyaknya ruas yang menghubungi v. Karena setiap ruas dihitung dua kali ketika menentukan derajat suatu graf, maka :
Jumlah derajat semua simpul suatu graf (derajat) = dua kali banyaknya ruas graf (size graf).

Suatu simpul disebut genap/ganjil tergantung apakah derajat simpul tersebut genap/ganjil. Kalau terdapat self-loop, maka self-loop dihitung 2 kali pada derajat simpul.

Contoh :
A B F
G • • •


• • • E
C D
Di sini banyaknya ruas = 7, sedangkan derajat masing-masing simpul adalah :
d(A) = 2 d(D) = 3 derajat graf G = 14
d(B) = 5 d(E) = 1 (2 * 7)
d(C) = 3 d(F) = 0

Catatan : E disebut simpul bergantung/akhir, yakni simpul yang berderajat satu. Sedangkan F disebut simpul terpencil, yakni simpul berderajat nol.

KETERHUBUNGAN

Walk atau perjalanan dalam graf G adalah barisan simpul dan ruas berganti-ganti : v1, e1, v2, e2, …, en-1, vn
Di sini ruas e1 menghubungkan simpul vi dan vI+1

Banyaknya ruas disebut panjang walk.
Walk dapat ditulis lebih singkat dengan hanya menulis deretan ruas : e1, e2, …, en-1
atau deretan simpul : v1, v2, …, vn-1, vn
v1 disebut simpul awal, vn disebut simpul akhir

Walk disebut tertutup bila v1 = vn , dalam hal lain walk disebut terbuka, yang menghubungkan v1 dan vn

Trail adalah walk dengan semua ruas dalam barisan berbeda.
Path atau jalur adalah walk dengan semua simpul dalam barisan berbeda. Jadi path pasti trail, sedangkan trail belum tentu path.

Dengan kata lain : Suatu path adalah suatu trail terbuka dengan derajat setiap simpulnya = 2, kecuali simpul awal v1 dan vn simpul akhir berderajat = 1.
Cycle atau sirkuit adalah suatu trail tertutup dengan derajat setiap simpul = 2.

Contoh :
Graf yang tidak mengandung cycle disebut acyclic, contoh : pohon atau tree.

Suatu graf G disebut terhubung jika untuk setiap 2 simpul dari graf terdapat jalur yang menghubungkan 2 simpul tersebut.

Subgraf terhubung suatu graf disebut komponen dari G bila subgraf tersebut tidak terkandung dalam subgraf terhubung lain yang lebih besar.

Contoh : Graf G terdiri dari 3 komponen

B C
• • • D • F



• A • E

Terlihat misalnya antara D dan A tidak ada jalur.

Jarak antara 2 simpul dalam graf G adalah panjang jalur terpendek antara ke-2 simpul tersebut.
Diameter suatu graf terhubung G adalah maksimum jarak antara simpul-simpul G.

Contoh : Graf G (graf terhubung) terdiri dari 1 komponen
• C • E



A • • D • G



• B • F

Jarak maksimum dalam graf G adalah 3 (yaitu antara A – G atau B – G ataupun C – G). Jadi diameter = 3.

Kalau order dari G = n, size dari G = e, dan banyaknya komponen = k, maka didefinisikan :
Rank(G) = n – k Nullity(G) = e – (n – k)

MATRIKS PENYAJIAN GRAF

Pandang bahwa G graf dengan N simpul dan M ruas.
Untuk mempermudah komputasi, graf dapat disajikan dalam bentuk matriks, disebut Matriks Ruas, yang berukuran (2 x M) atau (M x 2) yang menyatakan ruas dari graf.

Matriks adjacency dari graf G tanpa ruas sejajar adalah matriks A berukuran (N x N), yang bersifat :
1, bila ada ruas (vi, vj)
aij =
0, dalam hal lain

Matriks adjacency merupakan matriks simetri.
Untuk graf dengan ruas sejajar, matriks adjacency didefinisikan sebagai berikut :
p, bila ada p buah ruas menghubungkan (vi, vj) (p > 0)
aij =
0, dalam hal lain

Matriks Incidence dari graf G, tanpa self-loop didefinisikan sebagai matriks M berukuran (N x M)
1, bila ruas ej berujung di simpul vi,
mij =
0, dalam hal lain

Contoh :
e5
v1 v4 v5
• • •
e4 e8

e1 e2 e6 e7


• •
v2 e3 v3

Matriks Ruas

1 1 1 1 2 3 3 4 1 2
2 3 4 5 3 4 5 5 atau 1 3
1 4
1 5
2 3
3 4
3 5
4 5



Matriks Adjacency : N x N

v1 v2 v3 v4 v5

v1 0 1 1 1 1
v2 1 0 1 0 0
v3 1 1 0 1 1
v4 1 0 1 0 1
v5 1 0 1 1 0


Matriks Incidence : N x M

e1 e2 e3 e4 e5 e6 e7 e8

v1 1 1 0 1 1 0 0 0
v2 1 0 1 0 0 0 0 0
v3 0 1 1 0 0 1 1 0
v4 0 0 0 1 0 1 0 1
v5 0 0 0 0 1 0 1 1


GRAF BERARAH (DIGRAF)

Suatu graf berarah (digraf) D terdiri atas 2 himpunan :
1. Himpunan V, anggotanya disebut simpul
2. Himpunan A, merupakan himpunan pasangan terurut, yang disebut ruas berarah atau arkus.

Notasi : D(V, A)

Simpul, anggota v, digambarkan sebagai titik (atau lingkaran kecil). Sedangkan arkus a=(u,v), digambarkan sebagai garis dilengkapi dengan tanda panah mengarah dari simpul u ke simpul v. Simpul u disebut titik pangkal, dan simpul v disebut titik terminal dari arkus tersebut.

Contoh :
Graf berarah D (V, A) dengan :
1. V mengandung 4 smpul, yaitu : 1, 2, 3 dan 4
2. A mengandung 7 arkus, yaitu : (1,4), (2,1), (2,1), (2,2), (2,3), (2,4), (4,3).

1 4
• • Arkus (2, 2) : gelung /
self loop
Arkus (2,1) : arkus sejajar
• • / arkus berganda
2

POHON BINAR

Pohon (Tree) adalah graf terhubung yang tidak mengandung sirkuit. Karena merupakan graf terhubung maka pada pohon selalu terdapat path atau jalur yang menghubungkan kedua simpul di dalam pohon. Pohon dilengkapi dengan Root (akar).

Contoh : Pohon berakar T

P


Q T


R S U


V W


Sifat utama pohon berakar :
1. Jika pohon mempunyai simpul sebanyak n, maka banyaknya ruas adalah (n-1). Pada contoh : banyak simpul adalah 8 maka banyaknya ruas adalah 7.
2. Mempunyai simpul khusus yang disebut Root (Akar), jika simpul tersebut memiliki derajat keluar  0 dan derajat masuk = 0. Simpul P merupakan root.
3. Mempunyai simpul yang disebut Leaf (Daun), jika simpul tersebut memiliki derajat keluar = 0 dan derajat masuk = 1. Simpul R, S, V, W merupakan daun pada pohon T.
4. Setiap simpul mempunyai tingkatan (level), dimulai dari root dengan level 0 sampai dengan level n pada daun yang paling bawah.
Pada contoh :
P mempunyai level 0
Q, T mempunyai level 1
R, S, U mempunyai level 2
V, W mempunyai level 3
Simpul yang mempunyai level yang sama disebut Bersaudara (Brother /Stribling)
5. Pohon mempunyai ketinggian (kedalaman / height) yaitu level tertinggi +1. Ketinggian pohon T adalah 3+1 = 3
6. Pohon mempunyai berat (bobot / weight) yaitu banyaknya daun pada pohon. Berat pohon T adalah 4

POHON BINAR (BINARY TREE)
Pohon binar adalah himpunan simpul yang terdiri dari 2 subpohon (yang disjoint / saling lepas) yaitu subpohon kiri dan subpohon kanan.
Setiap simpul dari pohon binar mempunyai derajat keluar maksimum = 2.
Pendefinisian pohon binar bersifat rekursif. Pohon binar acapkali disajikan dalam bentuk diagram.

Contoh :
A


B C


D E G H


F J K


L

Untuk menggambarkan suksesor kiri dan suksesor kanan, dibuat garis ke kiri bawah dan ke kanan bawah. B adalah suksesor kiri dari A, sedangkan C adalah suksesor kanan dari A. Subpohon kiri dari A mengandung simpul B, D, E dan F, sedangkan subpohon kanan mengandung simpul C, G, H, J, K dan L.

Pada contoh di atas :
Root adalah A
Simpul yang mempunyai 2 anak adalah simpul A, B, C dan H.
Simpul yang mempunyai 1 anak adalah simpul E dan J.
Simpul yang tidak mempunyai anak disebut daun (terminal) adalah D, F, G, K dan L.

Perhatikan pohon T1 dan T2 dan T3 ini :

T1 T2 T3

A S A


B C T U B C


D E V W D E

Dua pohon binar disebut similar jika mempunyai struktur (bangun/susunan) pohon yang sama.
Contoh : Pohon binar T1 dan T2 adalah similar.

Kedua pohon binar disebut Salinan (Ekivalen/Copy) jika :
1. Mempunyai struktur pohon yang sama (similar)
2. Elemen yang sama pada simpul yang bersesuaian.
Contoh : Pohon binar T1 dan T3 adalah ekivalen

TERMINOLOGI PADA POHON BINAR
Terminologi hubungan keluarga banyak digunakan dalam terminologi pada pohon binar. Misalnya istilah anak kiri dan anak kanan, untuk menggantikan suksesor kiri dan suksesor kanan, serta istilah ayah untuk pengganti predesesor.

Contoh :
A


D E


F G M


K L

K misalnya adalah keturunan kanan dari D, tetapi bukan keturunan dari F, E ataupun M. Simpul G adalah ayah dari K dan L. Di sini K dan L adalah bersaudara, masing-masing anak kiri dan anak kanan dari G.
Garis yang ditarik dari Simpul N ke suksesor disebut Ruas dan sederetan ruas yang berturutan disebut Jalur atau path. Sebuah jalur yang berakhir pada daun (terminal) disebut Cabang.
Garis AD maupun GL adalah contoh ruas. Barisan ruas (AD, DG, GL) adalah jalur dari simpul A ke simpul L, jalur tersebut merupakan cabang, karena berakhir di simpul terminal (daun ) L.

Dari contoh pohon binar di atas :
Root : A
Simpul Daun adalah : F, K, L dan M
Level 0 adalah simpul A
Level 1 adalah simpul D dan E
Level 2 adalah simpul F, G dan M
Level 3 adalah simpul K dan L
Ketinggian (kedalaman) = 3 + 1 = 4
Berat (bobot) = 4
Cabang (AD, DG, GK) ataupun (AD, DG, GL) mengandung simpul dengan jumlah maksimum, yakni = 4, sedangkan cabang (AE, EM) serta (AD, DF) hanya mengandung 3 simpul.
POHON BINAR LENGKAP
Setiap simpul dari pohon binar paling banyak mempunyai dua anak. Simpul akar bertingkat = 0, hanya terdiri dari 1 simpul. Anaknya bertingkat = 1 terdiri paling banyak 2 simpul, demikian seterusnya, simpul dengan tingkat = r paling banyak ada 2r.
Suatu pohon binar T dikatakan lengkap atau complete, bila setiap tingkatnya kecuali mungkin tingkat yang terakhir, mempunyai semua simpul yang mungkin, yakni 2r simpul untuk tingkat ke-r, dan bila semua simpul pada tingkat terakhir muncul di bagian kiri pohon.
Kita dapat memberi label pohon binar lengkap menggunakan integer 1, 2, …, n dari kiri ke kanan generasi demi generasi. Hal ini untuk mempermudah kita untuk mengetahui ayah serta anak dari suatu simpul pada pohon binar lengkap.
Dalam hal ini anak kiri dari simpul K adalah 2 * K dan anak kanan dari simpul K adalah 2*K+1. Sedangkan ayah dari K adalah INT(K/2). Notasi INT(P) adalah integer terbesar yang lebih kecil atau sama dengan P. Jadi INT(3 2/3) = 3, INT(15/2) = 7, INT(4) = 4, dan sebagainya.

POHON-2
Pohon Binar T dikatakan Pohon-2 atau pohon binar yang dikembangkan bila setiap simpul mempunyai 0 atau 2 anak. Dalam kasus ini, simpul dengan 2 anak disebut simpul internal, sedangkan simpul tanpa anak disebut simpul eksternal. Dalam diagram, seringkali diadakan pembedaan antara simpul internal dan eksternal. Simpul internal digambarkan sebagai lingkaran, sedangkan simpul eksternal sebagai bujursangkar.

Contoh :















POHON KETINGGIAN SEIMBANG
Pohon binar yang mempunyai sifat bahwa ketinggian subpohon kiri dan subpohon kanan dari pohon tersebut berbeda paling banyak 1, disebut Pohon Ketinggian Seimbang atau Height Balanced Tree (HBT).

Contoh :

A A


B C B C

HBT
E D


F Bukan HBT


KETINGGIAN MINIMUM DAN MAKSIMUM POHON BINAR

Jika banyaknya simpul = N, maka :
1. Ketinggian Minimum adalah : Hmin = INT(2log N) + 1
2. Ketinggian Maksimum adalah : N

Contoh : untuk N = 8
Ketinggian Minimum adalah : Hmin = INT(2log N) + 1
= INT(2log 8) + 1
= INT(2log 23) + 1
= INT(3) + 1
= 3 + 1
= 4

Ketinggian Maksimum adalah : 8

PENYAJIAN POHON BINAR DALAM MEMORI

Penyajian pohon binar dalam memori dengan dua cara, yaitu :
1. Penyajian Kait (link)
2. Penyajian Sequential.

1. PENYAJIAN KAIT
Kalau tidak dinyatakan lain, suatu pohon binar T akan disimpan dalam memori secara penyajian kait.
Penyajian ini menggunakan tiga array sejajar INFO, LEFT dan RIGHT, serta variabel penuding ROOT.
Masing-masing simpul N dari pohon T berkorespondensi dengan suatu lokasi K, sedemikan sehingga :
(1) INFO(K) berisi data pada simpul N.
(2) LEFT(K) berisi lokasi dari anak kiri simpul N.
(3) RIGHT(K) berisi lokasi dari anak kanan simpul N.




Contoh :
Pohon Binar T

A


B C


D E G H


F J K


L

Skema Penyajian Kait dari pohon binar T

Root •

• A •


• B • • C •


x D x • E x x G x • H •


x F x • J x x K x


x L x


Root Avail

2 10 INFO LEFT RIGHT
1
L 0 0
2
A 7 5
3 8
4 G 0 0
5 C 4 17
6 13
7 B 16 12
8 6
9 F 0 0
10
3
11 J 1 0
12 E 9 0
13 15
14 19
15 18
16 D 0 0
17 H 11 20
18 14
19 0
20 K 0 0


2. PENYAJIAN SEQUENTIAL

Penyajian pada pohon binar T ini hanya menggunakan sebuah array linear tunggal TREE sebagai berikut :
1. Akar R dari pohon T tersimpan sebagai TREE[1]
2. Jika simpul N menduduki TREE[K] maka anak kirinya tersimpan dalam TREE[2*K] dan anak kanannya dalam TREE[2*K+1]

Contoh :
45


22 77


11 30 90


15 25 88



TREE

1 45
2 22
3 77
4 11
5 30
6
7 90
8
9 15
10 25
11
12
13
14 88
15
.
.
.



29

Dapat dilihat bahwa penyajian membutuhkan 14 lokasi dalam array TREE, meskipun T hanya mempunyai 9 simpul. Kenyataannya, bila kita memasukkan elemen nol sebagai suksesor dari simpul terminal, dibutuhkan TREE[29] untuk suksesor kanan dari TREE[14].

PENYAJIAN POHON UMUM SECARA POHON BINAR

Kita dapat menyajikan pohon umum secara pohon binar dengan algoritma sebagai berikut :
1. Tambahkan ruas baru yang menghubungkan 2 simpul bersaudara yang berdampingan, lalu kita hapus ruas dari simpul ayah ke anak, kecuali ruas ke simpul anak paling kiri.
2. Rotasikan sebesar 45 , searah putaran jarum jam terhadap pohon hasil langkah pertama.


Contoh Pohon Umum
A



B C D



E F G H I J



K L

Langkah Pertama
A



B C D



E F G H I J



K L
Langkah kedua
A


B


E C


F D


G H


K I


L J

NOTASI PREFIX, INFIX DAN POSTFIX SERTA TRAVERSAL POHON

Traversal adalah proses kunjungan dalam pohon, dengan setiap Simpul hanya dikunjungi tepat satu kali.

Tiga kegiatan yang terdapat dalam traversal pohon binar adalah :
1. Mengunjungi simpul akar (root)
2. Melakukan traversal subpohon kiri, dan
3. Melakukan traversal subpohon kanan

Terdapat tiga macam traversal pohon, yaitu :
1. Traversal Pre-order, dilakukan berturut-turut :
a. Kunjungi simpul akar
b. Lakukan traversal subpohon kiri
c. Lakukukan traversal subpohon kanan

2. Traversal In-order, dilakukan berturut-turut :
a. Lakukan traversal subpohon kiri
b. Kunjungi simpul akar
c. Lakukan traversal subpohon kanan

3. Traversal Post-order, dilakukan berturut-turut :
a. Lakukan traversal subpohon kiri
b. Lakukan traversal subpohon kanan
c. Kunjungi simpul akar

Contoh :

F Untai yang dihasilkan secara Pre-order

FDBACEG

D G



B E



A C


F Untai yang dihasilkan secara In-order

ABCDEFG

D G



B E



A C

F Untai yang dihasilkan secara Post-order

ACBEDGF

D G



B E



A C


POHON CARI BINAR
Pandang T suatu pohon binar, maka T disebut pohon cari binar (pohon terurut binar) bila masing-masing simpul N dari T mempunyai sifat :
Nilai dari N selalu lebih besar dari setiap nilai simpul pada subpohon kiri dari N, dan selalu lebih kecil dari setiap nilai simpul pada subpohon kanan dari N.
Definisi di atas menjamin bahwa traversal in-order terhadap pohon cari binar selalu menghasilkan untai terurut.

Contoh :
38


14 56


8 23 45 82


18 72
Dicatat bahwa dalam definisi Pohon Cari Binar di atas, semua nilai/label simpul adalah berbeda. Kalau diijinkan terjadi adanya label yang sama, dapat dilakukan sedikit modifikasi.
Definisi Pohon Cari Binar menjadi : Bila N adalah simpul dari Pohon maka nilai semua simpul pada subpohon kiri dari N adalah lebih kecil atau sama dengan nilai simpul N, dan nilai semua simpul pada subpohon kanan dari N adalah lebih besar dari nilai simpul N.

Contoh :

Hari


Cahyo Lilik


Budi Gita Kurdi Rudi


Daud


Ely


Dewi Dewi


Badu Cokro


Ali Cokro Badu


Ali
(a) (b)


Ali Cokro Badu


Badu Ali Dewi Ali Dewi


Cokro Badu Cokro


Dewi

(c) (d) (e)

Buatlah 10 pohon cari binar yang berbeda dari (a, b, c, d, e) di atas!

CARI DAN PENYISIPAN SIMPUL POHON CARI BINAR
Pandang bahwa diberikan sebuah ITEM informasi. Algoritma di bawah ini akan menemukan lokasi dari ITEM dalam Pohon Cari Binar T, atau menyelipkan ITEM dalam Pohon Cari Binar T, atau menyelipkan ITEM sebagai simpul baru dari T dalam posisi yang tepat.

ALGORITMA
Algoritma bekerja sebagai berikut :
(a) Bandingkan ITEM dengan simpul akar N dari Pohon, jika ITEM < N, proses subpohon kiri dari N, jika ITEM > N proses subpohon kanan dari N.
(b) Ulangi langkah (a) sampai dari hal berikut ditemui :
(1) Ditemukan simpul n sedemikian sehingga ITEM = N, dalam hal ini pencarian berhasil.
(2) Dijumpai subpohon hampa, ini menunjukkan bahwa pencarian tidak berhasil, dan kita selipkan ITEM mengisi subpohon yang hampa tadi.

Contoh : Misalkan diberikan ITEM = 20.

38


14 56


8 23 45 82


18 72


20

PENGHAPUSAN SIMPUL POHON CARI BINAR
Operasi penghapusan suatu simpul dari Pohon Cari Binar bukan merupakan hal yang mudah. Pertama-tama kita harus tetapkan lebih dahulu simpul yang akan kita hapus, bila merupakan simpul daun, maka proses akan berlangsung dengan mudah, karena simpul daun tersebut akan dapat langsung kita hapuskan dari Pohon Cari yang bersangkutan. Jika simpul yang akan dihapuskan mempunyai sebuah subpohon kanan, maka untuk menggantikan posisi simul yang dihapuskan tersebut, kita ambil simpul akar subpohon kiri dan sebaliknya. Jika simpul yang akan dihapuskan mempunyai dua buah subpohon yaitu subpohon kiri dan subpohon kanan, maka untuk menggantikan posisi dari simpul yang dihapuskan tersebut, kita tentukan simpul dari salah satu subpohon kiri atau subpohon kanan sedemikian sehingga bangun pohon yang terbentuk kembali, memenuhi sifat sebagai Pohon Cari Binar.
PROSEDUR untuk penghapusan suatu simpul dari Pohon Cari Binar
(1) Jika Pohon Hampa, maka penghapusan yang dilakukan gagal. Berhenti.
(2) Jika n < Ro (akar), subpohon kiri dari Ri diselidiki sampai ditemukan simpul yang telah ditentukan untuk dihapus.
(3) Jika n > Ro, maka subpohon kanan dari Ri diselidiki sampai ditemukan simpul yang telah ditentukan untuk dihapus.
(4) Jika n = Ro, subpohon kiri dan subpohon kanan hampa, maka hapus Ro.
(5) Jika n = Ro, dan subpohon kirinya hampa, maka hapus Ro, kemudian ambil akar dari subpohon kanan untuk menggantikan posisi Ro. Pohon baru akan memenuhi sifat sebagai Pohon Cari lagi.
(6) Jika n = Ro, dan subpohon kanannya hampa, maka hapus Ro, kemudian ambil akar dari subpohon kiri untuk menggantikan posisi Ro. Pohon baru akan memenuhi sifat sebagai Pohon Cari lagi.
(7) Jika n = Ro, subpohon kanan dan subpohon kiri tidak hampa, maka untuk menggantikan posisi Ro yang dihapus, kita tentukan suatu simpul mungkin dari subpohon kiri atau mungkin dari subpohon kanan, sedemikian sehingga Pohon yang terbentuk kembali memenuhi sifat sebagai Pohon Cari lagi.

Pohon Cari Binar
38


15 56


8 23 45 82


19 72


20

1. Dari pohon cari binar di atas, lakukan penghapusan simpul 56!

2. Dari pohon cari binar di atas, lakukan penghapusan berturut-turut terhadap simpul 45, 23 dan 56!

3. Bila diketahui data : 44, 55, 12, 42, 94, 18, 7, 67
Buatlah pohon cari binar dari data di atas!
Cari dan sisipkan : 38 terhadap pohon cari binar yang terbentuk!



HEAP

Suatu pohon binar adalah Heap, jika nilai setiap simpul lebih besar atau sama dengan nilai anaknya, disebut Maxheap.
Kalau nilai setiap simpul lebih kecil atau sama dengan nilai anaknya, disebut Minheap.

Contoh :

95


87 92



76 72 83 85



58 54 62 69 73 65

Kita dapat memasukkan elemen baru ke dalam sebuah Heap. Misalkan elemen = 93. Mula-mula elemen tersebut diletakkan sebagai elemen terakhir dari heap, yaitu elemen tree[14] pada daftar berurutan. Selanjutnya memerika apakah elemen tersebut lebih besar dari ayahnya. Bila lebih besar, lakukan pertukaran, elemen tersebut sekarang menjadi ayah. Demikian seterusnya sampai kondisi ini tidak tercapai.

95


88 92



76 72 83 85



58 54 62 69 73 65 93










95


89 92



76 72 83 93



58 54 62 69 73 65 85


Sehingga heap yang terbentuk :

95


90 93



76 72 83 92



58 54 62 69 73 65 85

Kemudian lakukan heapsort!

Algoritma heapsort :
1. Jatuhkan root ke posisi terakhir dari simpul dalam urutan almost complete. (Pertukarkan antara root dengan simpul terakhir dari urutan almost complete. Data pada simpul terakhir sudah terurut)
2. Sisanya bentuk heap kembali, kemudian lakukan sort kembali.

Buatlah maxheap dari data berikut ini :
45, 22, 77, 11, 30, 90, 15, 25, 88.
Tambahkan 35 ke dalam maxheap tersebut, kemudian lakukan heapsort!