Pengantar
Dari menyimpan bilangan bulat sederhana hingga mengelola alur kerja yang kompleks, struktur data menjadi landasan bagi aplikasi yang tangguh. Diantaranya adalah antre sering kali muncul sebagai hal yang menarik dan ada di mana-mana. Coba pikirkan โ a garis di bank, menunggu giliran Anda di konter makanan cepat saji, atau melakukan buffering tugas di sistem komputer โ semua skenario ini sejalan dengan mekanisme antrian.
Orang pertama yang mengantri akan dilayani terlebih dahulu, dan pendatang baru akan bergabung di akhir. Ini adalah contoh nyata dari aksi antrian!
Bagi pengembang, khususnya dengan Python, antrian bukan hanya konstruksi teoretis dari buku teks ilmu komputer. Mereka membentuk arsitektur yang mendasari banyak aplikasi. Dari mengelola tugas di printer hingga memastikan aliran data lancar dalam siaran langsung, antrean memainkan peran yang sangat diperlukan.
Dalam panduan ini, kita akan mempelajari lebih dalam konsep antrian, mengeksplorasi karakteristiknya, penerapannya di dunia nyata, dan yang paling penting, cara mengimplementasikan dan menggunakannya secara efektif dengan Python.
Apa itu Struktur Data Antrian?
Saat menjelajahi lanskap struktur data, kita sering menemukan container yang memiliki aturan berbeda untuk entri dan pengambilan data. Diantaranya adalah antre menonjol karena keanggunan dan keterusterangannya.
Prinsip FIFO
Pada intinya, antrian adalah struktur data linier yang menganut Pertama Masuk Pertama Keluar (FIFO) prinsip. Artinya elemen pertama yang ditambahkan ke antrian akan menjadi elemen pertama yang dihapus. Untuk menyamakannya dengan skenario yang relevan: pertimbangkan antrean pelanggan di loket tiket. Orang yang datang lebih dulu mendapat tiketnya terlebih dahulu, dan orang yang datang berikutnya akan berbaris di akhir, menunggu giliran.
Catatan: Antrian memiliki dua ujung โ belakang dan depan. Bagian depan menandakan dari mana elemen akan dihilangkan, dan bagian belakang menandakan dari mana elemen baru akan ditambahkan.
Operasi Antrian Dasar
-
antrian โ Tindakan menambahkan sebuah elemen sampai akhir (belakang) dari antrian.
-
Dequeue โ Tindakan menghapus sebuah elemen dari depan dari antrian.
-
Mengintip atau Depan โ Dalam banyak situasi, ada baiknya jika hanya mengamati elemen depan tanpa melepasnya. Operasi ini memungkinkan kami melakukan hal itu.
-
Kosong โ Operasi yang membantu menentukan apakah antrian memiliki elemen apa pun. Hal ini dapat menjadi penting dalam skenario di mana tindakan bergantung pada antrean yang memiliki data.
Catatan: Meskipun beberapa antrean memiliki ukuran terbatas (antrean terbatas), antrean lainnya berpotensi bertambah selama memori sistem memungkinkan (antrean tidak terbatas).
Kesederhanaan antrian dan aturan operasi yang jelas menjadikannya ideal untuk berbagai aplikasi dalam pengembangan perangkat lunak, terutama dalam skenario yang menuntut pemrosesan yang teratur dan sistematis.
Namun, memahami teori hanyalah langkah pertama. Seiring berjalannya waktu, kita akan mempelajari aspek praktisnya, mengilustrasikan cara mengimplementasikan antrian dengan Python.
Cara Mengimplementasikan Antrian dengan Python โ Modul Daftar vs. Deque vs
Python, dengan perpustakaan standarnya yang kaya dan sintaksis yang mudah digunakan, menyediakan beberapa mekanisme untuk diimplementasikan dan bekerja dengan antrian. Meskipun semuanya memiliki tujuan dasar manajemen antrean, semuanya memiliki nuansa, kelebihan, dan potensi kelemahannya masing-masing. Mari kita membedah setiap pendekatan, mengilustrasikan mekanisme dan kasus penggunaan terbaiknya.
Catatan: Selalu periksa status antrian Anda sebelum melakukan operasi. Misalnya, sebelum melakukan dequeuing, verifikasi apakah antrian tersebut kosong untuk menghindari kesalahan. Demikian pula untuk antrean berbatas, pastikan ada ruang sebelum antri.
Menggunakan Daftar Python untuk Mengimplementasikan Antrian
Menggunakan daftar bawaan Python untuk mengimplementasikan antrian bersifat intuitif dan mudah. Tidak diperlukan perpustakaan eksternal atau struktur data yang rumit. Namun, pendekatan ini mungkin tidak efisien untuk kumpulan data yang besar. Menghapus elemen dari awal daftar (pop(0)
) membutuhkan waktu linier, yang dapat menyebabkan masalah kinerja.
Catatan: Untuk aplikasi yang menuntut kinerja tinggi atau aplikasi yang menangani volume data dalam jumlah besar, beralihlah ke collections.deque
untuk kompleksitas waktu yang konstan untuk enqueuing dan dequeuing.
Mari kita mulai dengan membuat daftar untuk mewakili antrian kita:
queue = []
Proses penambahan elemen di akhir antrian (enqueuing) tidak lain adalah menambahkannya ke dalam daftar:
queue.append('A')
queue.append('B')
queue.append('C')
print(queue)
Selain itu, menghapus elemen dari depan antrian (dequeuing) sama dengan menghapus elemen pertama dari daftar:
queue.pop(0)
print(queue)
Menggunakan koleksi.deque untuk Menerapkan Antrian
Pendekatan ini sangat efisien deque
diimplementasikan menggunakan a daftar tertaut ganda. Ini mendukung penambahan O(1) cepat dan muncul dari kedua ujungnya. Kelemahan dari pendekatan ini adalah bahwa hal itu memang benar adanya sedikit kurang intuitif untuk pemula.
Pertama-tama, kami akan mengimpor deque
objek dari collections
modul dan inisialisasi antrian kami:
from collections import deque queue = deque()
Sekarang, kita bisa menggunakan append()
metode untuk memasukkan elemen dan popleft()
metode untuk menghapus elemen dari antrian:
Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan termasuk lembar contekan. Hentikan perintah Googling Git dan sebenarnya belajar itu!
queue.append('A')
queue.append('B')
queue.append('C')
print(queue) queue.popleft()
print(queue)
Menggunakan Python antre Modul Implementasi Antrian
Grafik queue
modul di perpustakaan standar Python menyediakan pendekatan yang lebih khusus untuk manajemen antrian, melayani berbagai kasus penggunaan:
- Antrian Sederhana โ Antrean FIFO dasar
- Antrean Lifo โ Antrian LIFO, pada dasarnya adalah tumpukan
- Antrian Prioritas โ Elemen dikeluarkan dari antrean berdasarkan prioritas yang ditetapkan
Catatan: Pilih untuk queue
modul, yang dirancang untuk menjadi aman untuk benang. Hal ini memastikan bahwa operasi bersamaan pada antrian tidak menimbulkan hasil yang tidak terduga.
Pendekatan ini bagus karena dirancang secara eksplisit untuk operasi antrean. Namun sejujurnya, ini mungkin berlebihan untuk skenario sederhana.
Sekarang, mari mulai menggunakan queue
modul dengan mengimpornya ke proyek kami:
import queue
Karena kami menerapkan antrian FIFO sederhana, kami akan menginisialisasinya menggunakan SimpleQueue()
konstruktor:
q = queue.SimpleQueue()
Operasi enqueue dan dequeue diimplementasikan menggunakan put()
dan get()
metode dari queue
modul:
q.put('A')
q.put('B')
q.put('C')
print(q.queue) q.get()
print(q.queue)
Catatan: Operasi antrian dapat menimbulkan pengecualian yang, jika tidak ditangani, dapat mengganggu alur aplikasi Anda. Untuk mencegahnya, gabungkan operasi antrean Anda try-except
blok.
Misalnya, menangani queue.Empty
pengecualian saat bekerja dengan queue
modul:
import queue q = queue.SimpleQueue() try: item = q.get_nowait()
except queue.Empty: print("Queue is empty!")
Implementasi Mana yang Harus Dipilih?
Pilihan implementasi antrean Anda dengan Python harus selaras dengan persyaratan aplikasi Anda. Jika Anda menangani data dalam jumlah besar atau memerlukan kinerja yang dioptimalkan, collections.deque
adalah pilihan yang menarik. Namun, untuk aplikasi multi-thread atau ketika prioritas ikut berperan, queue
modul menawarkan solusi yang kuat. Untuk skrip cepat atau ketika Anda baru memulai, daftar Python mungkin cukup, namun selalu waspada terhadap potensi gangguan kinerja.
Catatan: Menciptakan kembali roda dengan mengimplementasikan operasi antrian secara khusus ketika Python sudah menyediakan solusi bawaan yang kuat.
Sebelum membuat solusi khusus, biasakan diri Anda dengan penawaran bawaan Python seperti deque
dan queue
modul. Seringkali, mereka memenuhi berbagai kebutuhan, menghemat waktu dan mengurangi potensi kesalahan.
Menyelam Lebih Dalam: Konsep Antrian Tingkat Lanjut dengan Python
Bagi mereka yang telah memahami mekanisme dasar antrian dan ingin mempelajari lebih dalam, Python menawarkan sejumlah konsep dan teknik tingkat lanjut untuk menyempurnakan dan mengoptimalkan operasi berbasis antrian. Mari kita mengungkap beberapa aspek canggih ini, sehingga memberi Anda segudang alat untuk mengatasi skenario yang lebih kompleks.
Antrian berujung ganda dengan deque
Padahal sebelumnya kita sudah menjelajah deque
sebagai antrian FIFO, juga mendukung operasi LIFO (Last-In-First-Out). Ini memungkinkan Anda untuk menambahkan atau memunculkan elemen dari kedua ujungnya dengan kompleksitas O(1):
from collections import deque dq = deque()
dq.appendleft('A') dq.append('B') dq.pop() dq.popleft()
Antrian Prioritas dalam Aksi
Menggunakan antrian FIFO sederhana ketika urutan pemrosesan bergantung pada prioritas dapat menyebabkan inefisiensi atau hasil yang tidak diinginkan, jadi, jika aplikasi Anda mengharuskan elemen tertentu diproses sebelum elemen lain berdasarkan kriteria tertentu, gunakanlah antrian FIFO sederhana. PriorityQueue
. Hal ini memastikan elemen diproses berdasarkan prioritas yang ditetapkan.
Lihatlah bagaimana kami menetapkan prioritas untuk elemen yang kami tambahkan ke antrean. Ini mengharuskan kita meneruskan tupel sebagai argumen put()
metode. Tuple harus berisi prioritas sebagai elemen pertama dan nilai aktual sebagai elemen kedua:
import queue pq = queue.PriorityQueue()
pq.put((2, "Task B"))
pq.put((1, "Task A")) pq.put((3, "Task C")) while not pq.empty(): _, task = pq.get() print(f"Processing: {task}")
Ini akan memberi kita yang berikut:
Processing: Task A
Processing: Task B
Processing: Task C
Perhatikan bagaimana kami menambahkan elemen dalam urutan yang berbeda dari yang disimpan dalam antrian. Itu karena prioritas yang kami tetapkan dalam put()
metode saat menambahkan elemen ke antrian prioritas.
Menerapkan Antrean Melingkar
Antrian melingkar (atau buffer cincin) adalah struktur data tingkat lanjut di mana elemen terakhir terhubung ke elemen pertama, memastikan aliran melingkar. deque
dapat meniru perilaku ini menggunakan nya maxlen
milik:
from collections import deque circular_queue = deque(maxlen=3)
circular_queue.append(1)
circular_queue.append(2)
circular_queue.append(3) circular_queue.append(4)
print(circular_queue)
Kesimpulan
Antrian, yang mendasar namun kuat, menemukan esensinya dalam berbagai aplikasi dunia nyata dan masalah komputasi. Dari penjadwalan tugas di sistem operasi hingga pengelolaan aliran data di print spooler atau permintaan server web, implikasi antrian sangat luas.
Python menghadirkan palet alat dan perpustakaan yang kaya untuk bekerja dengan antrian. Dari antrian sederhana berbasis daftar untuk skrip cepat hingga yang sangat efisien deque
untuk aplikasi yang mengutamakan kinerja, bahasa ini benar-benar memenuhi spektrum kebutuhan.
- Konten Bertenaga SEO & Distribusi PR. Dapatkan Amplifikasi Hari Ini.
- PlatoData.Jaringan Vertikal Generatif Ai. Berdayakan Diri Anda. Akses Di Sini.
- PlatoAiStream. Intelijen Web3. Pengetahuan Diperkuat. Akses Di Sini.
- PlatoESG. Karbon, teknologi bersih, energi, Lingkungan Hidup, Tenaga surya, Penanganan limbah. Akses Di Sini.
- PlatoHealth. Kecerdasan Uji Coba Biotek dan Klinis. Akses Di Sini.
- Sumber: https://stackabuse.com/guide-to-queues-in-python/
- :memiliki
- :adalah
- :bukan
- :Di mana
- $NAIK
- 1
- 11
- 13
- 17
- 20
- 7
- 8
- 9
- a
- Tentang Kami
- tentang itu
- Bertindak
- tindakan
- sebenarnya
- sebenarnya
- menambahkan
- menambahkan
- maju
- keuntungan
- di depan
- Waspada
- meluruskan
- Semua
- memungkinkan
- sudah
- juga
- selalu
- antara
- an
- dan
- Apa pun
- Aplikasi
- aplikasi
- pendekatan
- arsitektur
- ADALAH
- argumen
- Tiba
- Gudang senjata
- AS
- aspek
- ditugaskan
- At
- menghindari
- berdasarkan
- dasar
- BE
- karena
- sebelum
- Pemula
- Awal
- laku
- bermanfaat
- TERBAIK
- Blok
- batas
- kedua
- Membawa
- penyangga
- built-in
- tapi
- by
- CAN
- kasus
- melayani
- melayani
- Menyebabkan
- tertentu
- karakteristik
- memeriksa
- pilihan
- Pilih
- jelas
- koleksi
- bagaimana
- menarik
- kompleks
- kompleksitas
- komputasi
- komputer
- Komputer Ilmu
- konsep
- konsep
- kesimpulan
- bersamaan
- terhubung
- Mempertimbangkan
- konstan
- mengandung
- Wadah
- Core
- Melawan
- membuat
- kriteria
- sangat penting
- adat
- pelanggan
- data
- entri data
- Struktur data
- kumpulan data
- berurusan
- mendalam
- lebih dalam
- menggali
- menuntut
- tergantung
- dirancang
- Menentukan
- pengembang
- Pengembangan
- berbeda
- Mengganggu
- berbeda
- do
- Kelemahan
- setiap
- asyik
- efektif
- efisien
- elemen
- elemen
- muncul
- akhir
- berakhir
- memastikan
- Memastikan
- memastikan
- masuk
- Setara
- kesalahan
- terutama
- esensi
- dasarnya
- contoh
- pengecualian
- secara eksplisit
- Dieksplorasi
- Menjelajahi
- luar
- membiasakan diri
- luas
- FAST
- Menemukan
- Pertama
- aliran
- Fokus
- berikut
- Untuk
- bentuk
- dari
- depan
- sepenuhnya
- mendasar
- pergi
- Memberikan
- Pemberian
- besar
- dasar
- Tumbuh
- membimbing
- menangani
- Penanganan
- hands-on
- Memiliki
- memiliki
- membantu
- High
- sangat
- jujur
- melayang-layang
- Seterpercayaapakah Olymp Trade? Kesimpulan
- How To
- Namun
- HTTPS
- ICON
- ideal
- if
- menggambarkan
- melaksanakan
- implementasi
- diimplementasikan
- mengimplementasikan
- implikasi
- mengimpor
- penting
- pengimporan
- in
- termasuk
- menunjukkan
- ketidakefisienan
- contoh
- ke
- menarik
- Pengantar
- intuitif
- masalah
- IT
- NYA
- ikut
- hanya
- pemandangan
- bahasa
- besar
- Terakhir
- meletakkan
- memimpin
- pengetahuan
- kurang
- membiarkan
- LG
- perpustakaan
- Perpustakaan
- 'like'
- Terbatas
- baris
- Daftar
- daftar
- hidup
- ll
- Panjang
- melihat
- membuat
- pengelolaan
- pelaksana
- banyak
- cara
- mekanika
- mekanisme
- Memori
- metode
- metode
- mungkin
- Modul
- lebih
- paling
- pindah
- Perlu
- kebutuhan
- New
- tidak
- tidak ada
- nuansa
- obyek
- mengamati
- of
- Penawaran
- Penawaran
- sering
- on
- ONE
- operasi
- sistem operasi
- operasi
- Operasi
- Optimize
- dioptimalkan
- or
- urutan
- Lainnya
- Lainnya
- kami
- di luar
- hasil
- palet
- lulus
- prestasi
- melakukan
- orang
- plato
- Kecerdasan Data Plato
- Data Plato
- Bermain
- kebanyakan
- pop
- Pops
- potensi
- berpotensi
- kuat
- Praktis
- mencegah
- sebelumnya
- prinsip
- Mencetak
- prioritas
- masalah
- proses
- Diproses
- pengolahan
- proyek
- milik
- menyediakan
- tujuan
- Ular sanca
- Cepat
- menaikkan
- jarak
- RE
- dunia nyata
- mengurangi
- memperhalus
- Dihapus
- menghapus
- mewakili
- permintaan
- membutuhkan
- Persyaratan
- membutuhkan
- Beresonansi
- Kaya
- Cincin
- kuat
- Peran
- aturan
- s
- penghematan
- skenario
- skenario
- penjadwalan
- Ilmu
- script
- mulus
- Kedua
- melayani
- yang telah dilayani
- Server
- set
- beberapa
- bayangan
- lembar
- harus
- penting
- menandakan
- Sederhana
- kesederhanaan
- situasi
- Ukuran
- So
- Perangkat lunak
- pengembangan perangkat lunak
- Solusi
- beberapa
- mutakhir
- Space
- khusus
- Spektrum
- penyalahgunaan
- standar
- standar
- berdiri
- awal
- Mulai
- Status
- Langkah
- berhenti
- tersimpan
- menyimpan
- mudah
- stream
- struktur
- struktur
- selanjutnya
- Mendukung
- SVG
- Beralih
- sintaksis
- sistem
- sistem
- tabel
- memecahkan
- Dibutuhkan
- tugas
- tugas
- teknik
- buku pelajaran
- dari
- bahwa
- Grafik
- Pemandangan
- mereka
- Mereka
- teoretis
- teori
- Sana.
- Ini
- mereka
- berpikir
- ini
- itu
- Melalui
- tiket
- waktu
- untuk
- alat
- transisi
- benar
- benar-benar
- MENGHIDUPKAN
- dua
- di mana-mana
- menemukan
- pokok
- pemahaman
- tak terduga
- us
- menggunakan
- user-friendly
- menggunakan
- nilai
- variasi
- berbagai
- Ve
- memeriksa
- volume
- vs
- Menunggu
- we
- jaringan
- web server
- Apa
- Apa itu
- Roda
- ketika
- yang
- sementara
- SIAPA
- lebar
- Rentang luas
- akan
- dengan
- tanpa
- Kerja
- Alur kerja
- kerja
- membungkus
- namun
- Kamu
- Anda
- diri
- zephyrnet.dll