Tampilkan postingan dengan label wiwik suryanti. Tampilkan semua postingan
Tampilkan postingan dengan label wiwik suryanti. Tampilkan semua postingan

Kamis, 21 Mei 2015

Bucket Sorting



Bucket sort adalah algoritma sorting yang bekerja dengan partisi array ke dalam jumlah terbatas sort. Setiap kotak ini kemudian diurutkan secara individual, baik menggunakan algoritma sorting yang berbeda, atau dengan rekursif menerapkan algoritma bucket sort. Sebuah variasi dari metode ini disebut semacam hitungan tunggal buffered lebih cepat dari jenis cepat dan membutuhkan waktu sekitar waktu yang sama untuk berjalan pada set data.

Algoritma Sorting (Bucket Sort)
Bucketsort Kode Java
Semacam ember, atau bin semacam, adalah algoritma sorting yang bekerja dengan partisi array ke sejumlah bucket. Setiap bucket kemudian diurutkan secara individual, baik menggunakan algoritma sorting yang berbeda, atau dengan rekursif menerapkan algoritma sorting bucket. Ini adalah semacam distribusi, dan merupakan sepupu dari radix semacam di paling untuk setidaknya rasa signifikan digit. Semacam bucket adalah generalisasi semacam mengesampingkan. Sejak semacam bucket bukanlah perbandingan semacam, yang Ω (n log n) batas bawah tidak dapat diterapkan. Perkiraan kompleksitas komputasi melibatkan jumlah ember.
Bucket semacam bekerja sebagai berikut:
1. Mengatur array awalnya kosong " bucket "
2. Scatter: Pergi array asli, menempatkan setiap objek dalam bucket nya.
3. Urutkan setiap kotak tidak kosong.
4. Kumpulkan: Kunjungi bucket dalam rangka dan menempatkan semua elemen kembali ke array asli.

Isi

    1 Pseudocode
    2 Optimasi
    3 Varian
        3.1 ember Generic semacam
        3.2 ProxmapSort
        3.3 Histogram semacam
        3,4 semacam Postman dunia
        3,5 semacam Shuffle
    4 Perbandingan dengan algoritma pengurutan lainnya
    5 Referensi
    6 Pranala luar

Pseudocode

Fungsi bucketSort (array, n) adalah
  ember ← array baru n daftar kosong
  untuk i = 0 sampai (panjang (array) -1) melakukan
    masukkan array [i] ke dalam
bucket [msbits (array [i], k)]
  untuk i = 0 sampai n - 1 lakukan
    nextSort (ember [i]);
  kembali gabungan dari ember [0], ...., ember [n-1]
Berikut array array akan diurutkan dan n adalah jumlah bucket untuk digunakan. The msbits fungsi (x, k) mengembalikan k bit yang paling signifikan dari x (lantai (x / 2 ^ (ukuran (x) -k))); fungsi yang berbeda dapat digunakan untuk menerjemahkan berbagai elemen dalam array ke n bucket, seperti menerjemahkan huruf A-Z ke 0-25 atau mengembalikan karakter pertama (0-255) untuk menyortir string. Fungsi nextSort adalah fungsi pemilahan; menggunakan bucketSort dirinya sebagai nextSort menghasilkan relatif radix semacam; khususnya, kasus n = 2 sesuai dengan quicksort (meskipun berpotensi dengan pilihan poros miskin).

Optimasi
Sebuah optimasi umum adalah untuk menempatkan elemen unsorted dari bucket kembali array pertama asli, kemudian jalankan insertion sort lebih array lengkap; karena runtime insertion sort didasarkan pada seberapa jauh setiap elemen adalah dari posisi akhir, jumlah perbandingan masih relatif kecil, dan hirarki memori yang lebih baik dimanfaatkan dengan menyimpan daftar contiguously dalam memori.

Varian Generik semacam bucket
Varian yang paling umum dari bucket semacam beroperasi pada daftar n input numerik antara nol dan beberapa nilai maksimum M dan membagi rentang nilai ke n bucket masing-masing ukuran M / n. Jika setiap kotak diurutkan menggunakan insertion sort, semacam itu dapat ditunjukkan untuk berjalan dalam waktu linier diharapkan (di mana rata-rata diambil atas semua masukan mungkin) Namun, kinerja semacam ini mendegradasi dengan clustering.; jika banyak nilai-nilai terjadi berdekatan, mereka semua akan jatuh ke dalam bucket tunggal dan diurutkan secara perlahan.

Mirip dengan bucket generik semacam seperti dijelaskan di atas, ProxmapSort bekerja dengan membagi array kunci ke subarrays melalui penggunaan "peta kunci" fungsi yang melindungi sebuah memesan parsial pada tombol; karena setiap tombol ditambahkan ke subarray yang, insertion sort digunakan untuk menjaga subarray diurutkan, sehingga seluruh array yang terurut saat ProxmapSort selesai. ProxmapSort berbeda dari macam bucket dalam penggunaan kunci peta untuk menempatkan data sekitar tempatnya untuk disortir, menghasilkan "proxmap" - pemetaan kedekatan - kunci.

Histogram semacam
Varian lain dari semacam ember dikenal sebagai histogram semacam atau menghitung semacam menambahkan lulus awal yang menghitung jumlah elemen yang akan jatuh ke dalam setiap kotak menggunakan array count. Dengan menggunakan informasi ini, nilai array dapat diatur menjadi urutan ember di tempat dengan urutan pertukaran, tanpa meninggalkan overhead ruang untuk penyimpanan bucket.

Semacam tukang pos
Semacam itu Postman adalah varian dari semacam bucket yang mengambil keuntungan dari struktur hirarki elemen, biasanya dijelaskan oleh satu set atribut. Ini adalah algoritma yang digunakan oleh mesin sortasi surat-in kantor pos: mail diurutkan pertama antara domestik dan internasional; kemudian oleh negara, provinsi atau wilayah; maka dengan kantor pos tujuan; maka dengan rute, dll Sejak kunci tidak dibandingkan terhadap satu sama lain, memilah waktu O (cn), di mana c tergantung pada ukuran kunci dan jumlah ember. Hal ini mirip dengan radix semacam yang bekerja "top down", atau "yang paling digit signifikan pertama."

Semacam Shuffle
Shuffle semacam [5] adalah varian dari semacam bucket yang diawali dengan menghapus pertama 1/8 item n yang akan diurutkan, macam mereka secara rekursif, dan menempatkan mereka dalam array. Hal ini menciptakan n / 8 " bucket " yang tersisa 7/8 item didistribusikan. Setiap " bucket" kemudian disortir, dan " bucket" di rubah menjadi array diurutkan. Semacam Shuffle digunakan sebagai langkah semacam J.
Perbandingan dengan algoritma pengurutan lainnya

Bucket sort dapat dilihat sebagai generalisasi dari menghitung semacam; pada kenyataannya, jika setiap kotak memiliki ukuran 1 maka bucket semacam merosot ke menghitung semacam. Ukuran bucket variabel semacam bucket memungkinkan untuk menggunakan O (n) memori bukan O (M) memori, di mana M adalah jumlah nilai-nilai yang berbeda; dalam pertukaran, itu menyerah menghitung semacam ini O (n + M) perilaku terburuk.

Semacam bucket dengan dua bucket secara efektif versi quicksort mana nilai poros selalu dipilih untuk menjadi nilai tengah kisaran nilai. Sementara pilihan ini berlaku efektif untuk input merata, cara lain memilih pivot di quicksort seperti pivot yang dipilih secara acak membuatnya lebih tahan terhadap pengelompokan dalam distribusi input.

Algoritma mergesort n-cara juga dimulai dengan mendistribusikan daftar ke n sublists dan memilah masing-masing; Namun, sublists diciptakan oleh mergesort memiliki rentang nilai yang tumpang tindih sehingga tidak dapat digabungkan dengan Rangkaian sederhana seperti di semacam ember. Sebaliknya, mereka harus disisipkan oleh algoritma merge. Namun, biaya tambahan ini diimbangi dengan fase pencar sederhana dan kemampuan untuk memastikan bahwa setiap sublist adalah ukuran yang sama, memberikan waktu yang baik terburuk terikat.

Top-down radix sort dapat dilihat sebagai kasus khusus dari bucket semacam mana kedua rentang nilai dan jumlah ember dibatasi menjadi kekuatan dua. Akibatnya, ukuran setiap kotak adalah juga kekuatan dua, dan prosedur dapat diterapkan secara rekursif. Pendekatan ini dapat mempercepat fase pencar, karena kita hanya perlu memeriksa awalan dari representasi bit dari setiap elemen untuk menentukan ember nya.

Bucket sort, atau bisa disebut bin sort ,merupakan sebuah algoritma pengurutan yang berkerja dengan membagi setiap array ke dalam beberapa bucket (keranjang). Setiap bucket mengurutkan sendiri-sendiri array yang ada didalamnya dengan algoritma sorting yang lain atau secara rekursif menggunakan algoritma bucket sort.
Cara kerja algoritma bucket sort dapat dijelaskansebagai berikut :
-Tentukan array yang ingin diurutkan.
-Tentukan jumlah bucket dan rentang masing-masing bucket.
-Masukkan array
-array tersebut ke dalam bucket yang telah ditentukan.
-Di dalam masing-masing bucket, array tersebut di urutkan.
-Setelah itu keluarkan hasil urutan dari dalam bucket dan kembalikan ke array awal.
Bucket Sort :
 Algoritma:
  • Cari nilai maksimum dan minimum di array
  • Inisialisasi array bucket Daftar <> unsur (ukuran maxValue – minValue + 1)
  • Pindahkan elemen dalam array untuk bucket
  • Write bucket keluar (dalam rangka) ke array yang asli

Contoh Coding Bucket Sorting



bucket adalah algoritma sorting yang bekerja dengan partisi array ke dalam jumlah terbatas sort. Setiap kotak ini kemudian diurutkan secara individual, baik menggunakan algoritma sorting yang berbeda, atau dengan rekursif menerapkan algoritma bucket sort.berikut ini contoh coding dari program bucket sorting.  monggo silahkan dicoba


Contoh program :


#define NUMELTS 100
#include <stdio.h>
#include <iostream.h>

class element
{
public:
    int value;
    element *next;
    element()
    {
    value=NULL;
    next=NULL;
    }
};

class bucket
{
public:
element *firstElement;
bucket()
{
firstElement = NULL;
}
};

void main()
{
    int lowend=0;
    int highend=100;
    int interval=10;
    const int noBuckets=(highend-lowend)/interval;
    bucket *buckets=new bucket[noBuckets];
    bucket *temp;

    for(int a=0;a<noBuckets;a++)
    {
        temp=new bucket;
        buckets[a]=*temp;
    }

    cout<<"--------The Elements to be Sorted using Bucket sort are ------------------\n";
    int array[]={12,2,22,33,44,55,66,77,85,87,81,83,89,82,88,86,84,88,99};

    for(int j=0;j<19;j++)
    {
    cout<<array[j]<<endl;
    element *temp,*pre;
    temp=buckets[array[j]/interval].firstElement;
        if(temp==NULL)
        {
            temp=new element;
            buckets[array[j]/interval].firstElement=temp;
            temp->value=array[j];
        }
        else
        {
            pre=NULL;
                while(temp!=NULL)
                   {
               if(temp->value>array[j])
                   break;
                   pre=temp;
                   temp=temp->next;
                   }
                if(temp->value>array[j])
                {
                    if(pre==NULL)
                    {
                        element *firstNode;
                        firstNode=new element();
                        firstNode->value=array[j];
                        firstNode->next=temp;
                        buckets[array[j]/interval].firstElement=firstNode;
                    }
                    else
                    {
                        element *firstNode;
                        firstNode=new element();
                        firstNode->value=array[j];
                        firstNode->next=temp;
                        pre->next=firstNode;
                    }
                }
                else
                {
                    temp=new element;
                    pre->next=temp;
                    temp->value=array[j];
                }

        }
 }

    cout<<"------------------------The Sorted Elements Are---------------\n";
    for(int jk=0;jk<10;jk++)
    {
        element *temp;
        temp= buckets[jk].firstElement;
            while(temp!=NULL)
            {
                cout<<"*"<<temp->value<<endl;
                temp=temp->next;
            }
    }
    cout<<"--------------------------------END--------------------------------\n";

}