0% menganggap dokumen ini bermanfaat (0 suara)
13 tayangan12 halaman

Robet Dwi Setiawan-Array-List

Dokumen tersebut membahas tentang struktur data daftar (list) dan implementasinya dalam bahasa pemrograman Python. Terdapat penjelasan mengenai Abstract Data Type (ADT) daftar, operasi-operasi dasar yang mendukung manipulasi daftar seperti penambahan, penghapusan, dan akses elemen, serta implementasi kelas daftar sederhana menggunakan NumPy.

Diunggah oleh

robetodwiis
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
13 tayangan12 halaman

Robet Dwi Setiawan-Array-List

Dokumen tersebut membahas tentang struktur data daftar (list) dan implementasinya dalam bahasa pemrograman Python. Terdapat penjelasan mengenai Abstract Data Type (ADT) daftar, operasi-operasi dasar yang mendukung manipulasi daftar seperti penambahan, penghapusan, dan akses elemen, serta implementasi kelas daftar sederhana menggunakan NumPy.

Diunggah oleh

robetodwiis
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 12

TUGAS INDIVIDU

MATERI ARRAY LIST


MATA KULIAH PRAKTIKUM STRUKTUR DATA

NAMA : ROBET DWI SETIAWAN


NIM : 202351145
KELAS :E

PROGRAM STUDI TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS MURIA KUDUS
1) The List Abstract Data Type (ADT)
Abstract Data Type (ADT) adalah model konseptual yang mendefinisikan bagaimana data
dapat disimpan dan diakses.
ADT daftar adalah wadah data di mana:
• Nilai-nilai diurutkan dalam sebuah urutan
• Setiap nilai memiliki paling banyak satu nilai sebelumnya dan satu nilai berikutnya
• Sebuah nilai tertentu dapat muncul lebih dari sekali dalam daftar
ADT lain yang umum (beberapa di antaranya akan kita jelajahi nanti) meliputi:
• Tumpukan (Stacks)
• Antrian (Queues)
• Antrian Prioritas (Priority Queues)
• Peta (Maps)
• Grafik (Graphs)

2) A List Data Structure


Struktur data daftar adalah implementasi konkret dari ADT daftar dalam beberapa bahasa
pemrograman, yang selain mematuhi premis dasar ADT, juga biasanya mendukung operasi-
operasi berikut :
• Mengakses nilai dalam daftar berdasarkan posisinya (indeks).
• Menambahkan dan menyisipkan nilai baru ke dalam daftar.
• Menghapus nilai dari daftar.
Implementasi dari setiap struktur data umumnya akan bergantung pada tipe data yang lebih
sederhana (misalnya, tipe "primitif" yang ditawarkan oleh bahasa pemrograman), pilihan ini
dapat mempengaruhi kompleksitas waktu eksekusi dari operasi-operasi tersebut.

3) The List API

Akses berbasis subscript adalah cara untuk mengakses elemen dalam suatu struktur data,
seperti daftar atau larik, menggunakan indeks atau subscript.
Stringifikasi adalah proses mengubah objek menjadi representasi string.
• __repr__(self) : Metode ini biasanya digunakan untuk tujuan debugging atau inspeksi.
Ketika objek dipasskan ke fungsi repr() atau jika diperlukan representasi string formal
objek dalam konteks ekspresi, metode ini akan dipanggil. Dalam kasus di atas,
representasi formal yang diberikan adalah '[]'.
• __str__(self) : Metode ini ketika objek dipasskan ke fungsi str() atau jika objek diubah
menjadi string dengan menggunakan fungsi print(), metode ini akan dipanggil. Dalam
kasus di atas, representasi string informal yang diberikan juga adalah '[]'.
Dengan mendefinisikan metode-metode ini, kita dapat memastikan bahwa objek kita dapat
dengan benar direpresentasikan dalam berbagai konteks.

Manipulasi elemen tunggal adalah proses menambah, menyisipkan, menghapus, atau


mengambil elemen tunggal dari suatu struktur data.
• append(self, value) : Metode ini digunakan untuk menambahkan elemen baru ke akhir
daftar.
• insert(self, idx, value) : Metode ini digunakan untuk menyisipkan elemen baru ke dalam
daftar pada indeks tertentu.
• pop(self, idx=-1) : Metode ini digunakan untuk menghapus dan mengembalikan elemen
dari daftar pada indeks yang diberikan.
• remove(self, value) : Metode ini digunakan untuk menghapus elemen pertama dalam
daftar yang memiliki nilai yang sama dengan nilai yang diberikan.
Predikat (query T/F) adalah fungsi yang mengembalikan nilai kebenaran (True/False)
berdasarkan kondisi tertentu terhadap suatu objek atau kumpulan data.
• __eq__(self, other) : Metode ini digunakan untuk memeriksa apakah dua objek sama.
Jika objek yang dipanggil sama dengan objek yang diberikan sebagai argumen lainnya,
maka metode ini mengembalikan True, yang menunjukkan bahwa kedua objek adalah
identik, atau False jika tidak sama.
• __contains__(self, value) : Metode ini digunakan untuk memeriksa apakah suatu nilai
tertentu terdapat dalam objek. Jika nilai yang diberikan terdapat dalam objek, maka
metode ini mengembalikan True, yang menunjukkan bahwa nilai tersebut ada di dalam
objek, atau False jika nilai tersebut tidak ada di dalam objek.

Dengan menggunakan operasi-operasi ini, pengguna dapat melakukan berbagai pertanyaan


atau pengambilan informasi tentang objek mereka, seperti mencari nilai terkecil atau terbesar,
mencari indeks dari suatu nilai tertentu, atau menghitung berapa kali nilai tertentu muncul
dalam objek. Ini membantu dalam analisis dan manipulasi data yang lebih lanjut.
Dengan menggunakan operasi-operasi ini, pengguna dapat dengan mudah melakukan
manipulasi atau transformasi besar pada objek atau kumpulan data, seperti menggabungkan
objek, menghapus semua elemen, membuat salinan, atau menambahkan semua elemen dari
objek lain ke dalam objek saat ini. Ini membantu dalam pengolahan data secara efisien dalam
program.

Iterasi adalah proses mengulangi elemen-elemen dalam suatu objek atau kumpulan data satu
per satu.
• __iter__(self) : Metode ini digunakan untuk mendukung iterasi melalui objek atau
kumpulan data. Ketika objek diiterasi dengan menggunakan loop for, metode ini akan
dipanggil untuk mendapatkan iterator dari objek tersebut. Iterator digunakan untuk
mengatur proses iterasi, memungkinkan akses ke elemen-elemen objek secara
berurutan.

4) Getting started
Kelas List yang diberikan adalah implementasi sederhana dari struktur data daftar (list) dalam
Python. Berikut adalah penjelasan tentang setiap metode dalam kelas tersebut:
• append(self, value) : Metode ini digunakan untuk menambahkan elemen baru ke dalam
objek daftar. Nilai baru yang diberikan akan disimpan dalam atribut val dari objek List.
• __getitem__(self, idx) : Metode ini diimplementasikan untuk mendukung akses
elemen dengan menggunakan indeks. Saat objek List dipanggil dengan menggunakan
subscript seperti x = self[idx], metode ini akan dipanggil dan mengembalikan nilai dari
atribut val.
• __setitem__(self, idx, value) : Metode ini diimplementasikan untuk mendukung
penugasan nilai ke indeks tertentu dalam objek List. Ketika objek List diubah dengan
menggunakan subscript seperti self[idx] = x, metode ini akan dipanggil dan akan
menetapkan nilai yang diberikan ke dalam atribut val.
• __repr__(self) : Metode ini digunakan untuk memberikan representasi formal objek
saat objek tersebut diprint atau direpresentasikan sebagai string. Metode ini
mengembalikan string yang berisi nilai dari atribut val, dibungkus dalam tanda kurung
siku [ ].

I. Dalam kode yang diberikan, Anda membuat objek List baru dengan menggunakan kelas
yang telah didefinisikan sebelumnya. Kemudian, Anda menambahkan nilai 42 ke objek
tersebut menggunakan metode append().
II. Kemudian, Dalam kode tersebut, Anda mencoba untuk mengakses elemen pertama dari
objek l menggunakan subscript [0]. Ini akan memicu pemanggilan metode __getitem__
dari objek l. Jadi, hasilnya akan mengembalikan nilai 42, karena itu adalah nilai yang
terakhir kali ditambahkan ke dalam objek List.
III. Dalam kode tersebut, Anda mencoba untuk menetapkan nilai 331 ke indeks pertama
dari objek l menggunakan subscript [0]. Ini akan memicu pemanggilan metode
__setitem__ dari objek l. Namun, dalam implementasi List yang telah diberikan
sebelumnya, metode __setitem__ hanya menetapkan nilai yang diberikan ke dalam
atribut val. Oleh karena itu, ketika Anda melakukan l[0] = 331, nilai dari atribut val
akan diganti dengan nilai 331.
IV. Dalam kode tersebut, Anda mencoba untuk mengakses elemen dengan indeks 500 dari
objek l menggunakan subscript [500]. Dalam kasus ini, Anda mungkin akan
mendapatkan IndexError, karena objek l tidak memiliki elemen dengan indeks 500. Dan
hasilnya tetap nilai 331.
V. Karena objek l telah dimodifikasi sebelumnya dengan menetapkan nilai 331 ke indeks
pertama, representasi objek tersebut akan mencerminkan nilai tersebut, dibungkus
dalam tanda kurung siku [ ]. Jadi, jika Anda mencetak objek l setelah operasi l[0] = 331,
Anda akan mendapatkan output : 331.

5) NumPy arrays

Spesifikasi dtype=object menunjukkan bahwa kita ingin menggunakan array untuk menyimpan
referensi ke objek Python yang berubah-ubah. Fungsi kosong membuat array dengan ukuran
yang ditentukan, tetapi membiarkan semua elemen tidak diinisialisasi.

• Dalam kode tersebut, Anda mencoba untuk mengisi array arr dengan nilai-nilai hasil
dari operasi pangkat dua pada indeks-indeks tertentu dari 0 hingga 9, dan kemudian
menetapkan nilai 'hello' pada indeks 5 dan nilai 'world' pada indeks 9.
• NumPy mendefinisikan fungsi pada array untuk menambahkan, menyisipkan, dan
menghapus elemen, fungsi ini tidak akan menggunakan satupun darinya. Hal ini karena
masing-masing fungsi beroperasi dengan membuat array baru, menyalin elemen yang
dihasilkan, lalu menghapus array asli.
• Dalam implementasi yang telah diberikan, jika Anda mencetak objek arr, Anda akan
mendapatkan representasi dari objek tersebut, yang diberikan oleh metode __repr__.
Jika nilai-nilai telah ditetapkan dengan benar, Anda akan melihat hasil yang sesuai
dengan apa yang telah Anda lakukan sebelumnya. Dalam kasus ini, jika nilai 'hello'
ditetapkan pada indeks 5 dan nilai 'world' ditetapkan pada indeks 9, representasi objek
arr akan mencerminkan perubahan tersebut. Ini menunjukkan bahwa nilai-nilai pada
indeks 5 dan 9 telah berhasil diperbarui dengan 'hello' dan 'world' secara berturut-turut,
dan nilai-nilai lainnya tetap sama seperti sebelumnya.
6) The ArrayList data structure

import numpy as np mengimport modul numpy dan memberi alias "np". Kemudian, kelas
ArrayList didefinisikan. Ini adalah implementasi kelas yang menggunakan modul numpy untuk
membuat array dinamis yang dapat menyesuaikan kapasitasnya.
• __init__(self) : Metode ini merupakan konstruktor untuk kelas ArrayList. Saat objek
ArrayList dibuat, array data dibuat dengan ukuran awal 1 dan tipe data objek, dan size
diatur menjadi 0.
• append(self, value) : Metode ini digunakan untuk menambahkan nilai ke dalam array.
Jika array data sudah penuh, maka ukuran array akan diperbesar dengan membuat array
baru dengan kapasitas dua kali lipat dan menyalin elemen-elemen yang ada ke array
baru tersebut. Kemudian, nilai yang diberikan akan ditambahkan ke dalam array pada
indeks size dan size akan ditambah 1.
• __getitem__(self, idx) : Metode ini digunakan untuk mendapatkan nilai dari array
berdasarkan indeks yang diberikan. Jika indeks negatif diberikan, itu akan diubah
menjadi indeks relatif terhadap akhir array. Kemudian, jika indeks berada di luar
jangkauan array, akan muncul pengecualian IndexError. Jika indeks valid, nilai dari
array pada indeks tersebut akan dikembalikan.
• __setitem__(self, idx, value) : Metode ini digunakan untuk menetapkan nilai ke dalam
array pada indeks yang diberikan. Seperti __getitem__, ia juga menangani indeks
negatif dan mengecek apakah indeks valid. Jika valid, nilai array pada indeks tersebut
akan diganti dengan nilai yang diberikan.
• __delitem__(self, idx) adalah implementasi untuk menghapus elemen dari array pada
indeks yang diberikan. Metode ini mengimplementasikan operasi del self[idx] pada
objek ArrayList. Itu akan memungkinkan pengguna untuk menghapus elemen dari
array dengan cara yang serupa dengan penggunaan del pada list biasa dalam Python.

• Metode __len__(self) yang diberikan mengimplementasikan fungsi len(self) untuk


mengembalikan panjang atau jumlah elemen dalam array. Dalam hal ini, metode ini
hanya mengembalikan nilai dari atribut size dari objek ArrayList, yang mewakili
jumlah elemen yang disimpan dalam array.
• Metode __repr__(self) digunakan untuk memberikan representasi formal dari objek
saat objek tersebut diprint atau direpresentasikan sebagai string. Metode ini
menghasilkan representasi string yang berisi nilai-nilai dari elemen-elemen array, yang
dipisahkan oleh koma dan dibungkus dalam tanda kurung siku [ ].
Kedua metode ini mendukung fungsi dasar yang sering digunakan saat bekerja dengan array,
seperti mengukur panjang array dan memeriksa nilai-nilai yang terdapat di dalamnya. Ini
membantu dalam penggunaan objek ArrayList dengan cara yang serupa dengan penggunaan
array dalam bahasa pemrograman Python.

Dalam kode yang diberikan, Anda membuat objek ArrayList baru dan kemudian menambahkan
nilai-nilai dari 0 hingga 9 ke dalamnya menggunakan metode append(). Jadi, ketika Anda
mencetak objek l, Anda akan mendapatkan representasi dari objek tersebut yang menunjukkan
nilai-nilai yang telah ditambahkan ke dalamnya, seperti [0,1,2,3,4,5,6,7,8,9]. Ini menunjukkan
bahwa nilai-nilai tersebut telah berhasil ditambahkan ke dalam objek ArrayList.
Dalam kode yang diberikan, Anda mencoba untuk menetapkan nilai 'hello' ke indeks 0 dan
nilai 'world' ke indeks terakhir dari objek l. Setelah operasi ini, jika Anda mencetak objek l,
Anda akan mendapatkan representasi dari objek tersebut yang menunjukkan perubahan nilai-
nilai tersebut.
• Ini menunjukkan bahwa nilai 'hello' telah berhasil ditetapkan ke indeks 0 dan nilai
'world' telah berhasil ditetapkan ke indeks terakhir dari objek l. Nilai-nilai lainnya tetap
tidak berubah.

Dalam kode yang Anda berikan, Anda mencoba menetapkan nilai 'two' ke indeks 2 dan nilai
'seven' ke indeks -3 dari objek l. Setelah operasi ini, jika Anda mencetak objek l, Anda akan
mendapatkan representasi dari objek tersebut yang menunjukkan perubahan nilai-nilai tersebut.
• Ini menunjukkan bahwa nilai 'two' telah berhasil ditetapkan ke indeks 2 dan nilai 'seven'
telah berhasil ditetapkan ke indeks -3 dari objek l. Nilai-nilai lainnya tetap tidak
berubah.

Dalam kode yang diberikan, Anda mencoba untuk menghapus elemen pada indeks 5 dari objek
l menggunakan pernyataan del. Setelah operasi ini, jika Anda mencetak objek l, Anda akan
mendapatkan representasi dari objek tersebut yang menunjukkan elemen pada indeks 5 telah
dihapus.
• Ini menunjukkan bahwa elemen pada indeks 5 (nilai 'five') telah berhasil dihapus dari
objek l. Nilai-nilai lainnya tetap tidak berubah.

Dalam kode yang Anda berikan, Anda mencoba menghapus elemen pada indeks 0 dan indeks
terakhir dari objek l menggunakan pernyataan del. Setelah operasi ini, elemen pertama dan
terakhir dari objek l akan dihapus.
• Ini menunjukkan bahwa elemen pertama ('hello') dan terakhir ('world') telah berhasil
dihapus dari objek l. Nilai-nilai lainnya tetap tidak berubah.
Dalam kode yang Anda berikan, Anda mencoba untuk memperoleh panjang objek l dengan
menggunakan fungsi len(). Setelah operasi ini, Anda akan mendapatkan panjang atau jumlah
elemen dalam objek l.
• Ini menunjukkan bahwa objek l saat ini memiliki 7 elemen setelah elemen pertama dan
terakhir dihapus.

7) Runtime analysis

Dalam kode yang diberikan, import numpy as np mengimport modul numpy dan memberinya
alias "np". Kemudian, kelas ArrayList didefinisikan. Kelas ini memiliki atribut data yang
merupakan array numpy dengan ukuran awal 1 dan tipe data objek, serta atribut size yang
mengikuti jumlah elemen yang saat ini disimpan dalam array.
Metode append(self, value, doubling=True) digunakan untuk menambahkan nilai ke dalam
array. Jika array data sudah penuh, metode ini akan memperbesar ukuran array sesuai dengan
parameter doubling. Jika doubling diatur sebagai True (default), maka ukuran array akan
diubah menjadi dua kali lipat ukuran sebelumnya. Jika doubling diatur sebagai False, maka
ukuran array akan ditambahkan sebanyak 1000 elemen. Setelah operasi ini, nilai yang
diberikan akan ditambahkan ke dalam array pada indeks size, dan size akan ditambah 1.
Ini adalah metode append yang diperbarui dengan kemampuan untuk memperbesar array
dengan cara yang fleksibel tergantung pada argumen doubling. Ini memungkinkan kontrol
lebih besar atas bagaimana array diperbesar dan dapat digunakan dalam skenario di mana
peningkatan kapasitas yang konsisten diperlukan.
Kode yang Anda berikan menggunakan modul timeit untuk mengukur waktu eksekusi dari dua
skenario yang berbeda dalam kelas ArrayList, yaitu ketika doubling=True dan ketika
doubling=False. Plot hasilnya menggunakan modul matplotlib.pyplot. Dalam kode tersebut :
• ns adalah array numpy yang berisi jumlah iterasi yang berbeda.
• ts1 dan ts2 adalah daftar yang berisi waktu eksekusi untuk setiap ukuran iterasi, di mana
ts1 adalah waktu eksekusi ketika doubling=True dan ts2 adalah waktu eksekusi ketika
doubling=False.
• Kemudian, kedua daftar ini digunakan sebagai sumbu x dan y dalam plot, di mana
sumbu x adalah jumlah iterasi (ns) dan sumbu y adalah waktu eksekusi (ts1 dan ts2).
Plot tersebut menunjukkan perbandingan waktu eksekusi antara kedua skenario (dengan dan
tanpa penggandaan ukuran array) seiring dengan pertambahan jumlah iterasi. Dari plot
tersebut, Anda dapat melihat bagaimana waktu eksekusi berkembang seiring dengan
pertambahan ukuran masukan.

Anda mungkin juga menyukai