Results (
Indonesian) 1:
[Copy]Copied!
Presorting adalah ide lama dalam ilmu komputer. Pada kenyataannya, minat dalam algoritma pengurutanjatuh tempo, ke tingkat yang signifikan, fakta bahwa banyak pertanyaan tentang daftarlebih mudah untuk menjawab jika daftar diurutkan. Jelas, efisiensi waktu algoritmaitu melibatkan penyortiran Mei tergantung pada efisiensi yang algoritma pengurutandigunakan. Demi kesederhanaan, kita menganggap seluruh bagian ini yang daftardiimplementasikan sebagai array, karena lebih mudah untuk menerapkan beberapa algoritma sortinguntuk array.Sejauh ini, kita telah membahas tiga dasar algoritma sorting-urut pilihan,semacam gelembung, dan mengurutkan penyisipan — kuadrat dalam kasus terburuk dan rata-rata,dan dua maju algoritma — mergesort, yang selalu di (nlogn), danquicksort, efisiensi yang juga (nlogn) dalam kasus tapi rata-rata kuadrat dalamkasus terburuk. Ada lebih cepat algoritma pengurutan? Seperti yang kita telah menyatakan diBagian 1.3 (Lihat juga bagian 11,2), tidak umum berdasarkan perbandingan algoritma sorting dapat memiliki thannlognin efisiensi lebih baik kasus terburuk, dan hasil yang sama memeganguntuk rata-rata-kasus efisiensi.1Berikut adalah tiga contoh yang menggambarkan ide presorting. Lebihcontoh dapat ditemukan dalam bagian ini latihan.CONTOH 1Checking elemen keunikan dalam array jika masalah keunikan elemen ini tampak akrab bagi Anda, seharusnya; Kami menganggap brute force algoritma untuk mengatasi masalah di bagian 2.3 (Lihat contoh 2). Algoritma brute forcedibandingkan dengan berbagai elemen pasang sampai kedua-dua elemen yang sama ditemukanatau banyak pasangan yang tersisa. Efisiensi terburuk pada (n2).Selain itu, kita dapat mengurutkan array pertama dan kemudian periksa hanya yang berturut-turutelemen: jika array memiliki unsur-unsur yang sama, sepasang dari mereka harus di sebelah setiaplainnya, dan sebaliknya.Saat menjalankan algoritma ini adalah jumlah waktu yang dihabiskan pada penyortirandan waktu yang dihabiskan untuk memeriksa elemen konsekutif. Karena memerlukan mantandi leastnlogncomparisons dan yang kedua membutuhkan tidak lebih thann−1 perbandingan,ini adalah bagian pengurutan yang akan menentukan efisiensi keseluruhan algoritma. Jadi,Jika kita menggunakan kuadrat di sini algoritma sorting, seluruh algoritma tidak akan lebihefisien daripada brute force satu. Tetapi jika kita menggunakan algoritma pengurutan yang baik, sepertisebagai mergesort, dengan efisiensi yang terburuk di (nlogn), efisiensi terburukalgoritma berbasis presorting seluruh akan juga di (nlogn):CONTOH 2Computing a modus Amodeis nilai yang paling sering terjadi padaDaftar nomor yang diberikan. Misalnya, untuk 5, 1, 5, 7, 6, 5, 7, modus adalah 5. (Jika beberapanilai-nilai yang berbeda terjadi paling sering, salah satu dari mereka dapat dianggap sebagai modus.) Thebrute force pendekatan komputasi mode akan memindai daftar dan menghitungfrekuensi semua nilai yang berbeda, kemudian menemukan nilai dengan frekuensi yang terbesar.Dalam rangka melaksanakan gagasan ini, kita dapat menyimpan nilai-nilai yang sudah temui,bersama dengan frekuensi, dalam daftar terpisah. Setiap kali iterasi, elemen theithDaftar asli dibandingkan dengan nilai-nilai yang telah dihadapi oleh melintasiDaftar ini bantu. Jika pencocokan nilai ditemukan, frekuensi bertambah;Jika tidak, elemen saat ini akan ditambahkan ke daftar nilai-nilai yang berbeda, melihat begitu jauhdengan frekuensi 1.Hal ini tidak sulit untuk melihat bahwa input yang terburuk untuk algoritma ini adalah daftar dengantidak ada unsur-unsur yang sama. Untuk daftar tersebut, elemen itsith adalah unsur-unsur dibandingkan withi−1Bantu daftar nilai-nilai yang berbeda terlihat begitu jauh sebelum sedang ditambahkan ke daftar denganfrekuensi 1. Sebagai hasilnya, jumlah kasus terburuk perbandingan dibuat olehalgoritma dalam menciptakan daftar frekuensi adalah perbandingan additionaln−1 diperlukan untuk menemukan frekuensi terbesar dalam daftar penolong tidak mengubah kelas efisiensi terburuk kuadrat dari algoritma.Sebagai alternatif, mari kita pertama mengurutkan input. Kemudian semua nilai yang sama akanberdekatan satu sama lain. Untuk menghitung modus, semua yang perlu kita lakukan adalah untuk menemukanterpanjang Jalankan berdekatan sama nilai dalam array diurutkan.Analisis di sini mirip dengan analisis contoh 1: saat menjalankanalgoritma akan didominasi oleh waktu yang dihabiskan pada penyortiran sejak sisanyadari algoritma waktu linear (mengapa?). Akibatnya, dengan annlognsort, inimetode yang terburuk efisiensi akan lebih baik asimtotik kelas dari efisiensi worstcase algoritma brute force.EXAMPLE 3Searching problem Consider the problem of searching for a givenvaluevin a given array of nsortable items. The brute-force solution here issequential search (Section 3.1), which needsncomparisons in the worst case. Ifthe array is sorted first, we can then apply binary search, which requires onlylog2n+1 comparisons in the worst case. Assuming the most efficientnlognsort, the total running time of such a searching algorithm in the worst case will beT (n)=Tsort(n)+Tsearch(n)=(nlogn)+(logn)=(nlogn),which is inferior to sequential search. The same will also be true for the averagecase efficiency. Of course, if we are to search in the same list more than once, thetime spent on sorting might well be justified. (Problem 4 in this section’s exercisesasks to estimate the minimum number of searches needed to justify presorting.)Before we finish our discussion of presorting, we should mention that many,if not most, geometric algorithms dealing with sets of points use presorting inone way or another. Points can be sorted by one of their coordinates, or bytheir distance from a particular line, or by some angle, and so on. For example,presorting was used in the divide-and-conquer algorithms for the closest-pairproblem and for the convex-hull problem, which were discussed in Section 5.5.Further, some problems for directed acyclic graphs can be solved more easilyafter topologically sorting the digraph in question. The problems of finding thelongest and shortest paths in such digraphs (see the exercises for Sections 8.1and 9.3) illustrate this point.Finally, most algorithms based on the greedy technique, which is the subject ofChapter 9, require presorting of their inputs as an intrinsic part of their operations.
Being translated, please wait..
