Han

38

Adakah yang akrab dengan Yijie Han , ruang linear, algoritma pengurutan integer? Hasil ini muncul dalam makalah yang cukup singkat ( Deterministic sorting dalam O ( n log log n ) waktu dan ruang linear . J. Alg. 50: 96-105, 2004) yang pada dasarnya menempelkan banyak hasil sebelumnya, dengan adaptasi yang sesuai. Masalah saya adalah bahwa itu ditulis dalam cara yang agak melambaikan tangan tanpa masuk terlalu dalam ke spesifik. Ini sangat bergantung pada kertas sebelumnya, menonjol di antara mereka kertas lain oleh Han ( Peningkatan integer cepat yang menyortir dalam ruang linearO(nloglogn)O(nloglogn). Informasi dan Komputasi 170 (1): 81–94) ditulis dengan gaya yang hampir sama. Saya mengalami kesulitan yang signifikan dalam memahami kedua makalah ini, terutama cara mereka beradaptasi dan menggunakan hasil sebelumnya. Saya sangat menghargai bantuan apa pun.

Ini tentu saja terlalu luas dan tidak jelas untuk dianggap sebagai pertanyaan yang tepat, tetapi saya berharap dapat mengembangkan diskusi di beberapa pertanyaan dan jawaban yang terfokus dengan baik.

Untuk memimpin, inilah pertanyaan spesifik pertama saya. Dalam Lemma 2 dari Info. Comp. kertas ada algoritma waktu rekursif untuk menemukan integer terkecil saya dalam satu set n integer kecil yang dikemas k masing-masing ke dalam kata-kata RAM. Deskripsi algoritma gagal menyebutkan bagaimana kasus dasar k = O ( n ) ditangani. Dalam hal ini diperlukan untuk melakukan seleksi dalam waktu O ( log k ) . Bagaimana ini bisa dilakukan?O(n/klogk)nkk=O(n)O(logk)

Ari
sumber
13
Sangat tepat untuk menulis kepadanya: [email protected].
Joseph O'Rourke
Iya nih. Kami telah membahas masalah umum ini sebelumnya, dan cara yang tepat untuk mengatasinya adalah dengan mengirim email ke penulis.
Suresh Venkat
17
Ini termasuk pertanyaan spesifik tentang makalah yang berumur 7 tahun dan telah melalui proses peer review. Sementara Ari dapat mengirim email kepada penulis, ini sepertinya pertanyaan ideal untuk situs ini. Saya tidak mengerti defleksi.
Huck Bennett
18
Tentu saja hal pertama yang saya lakukan adalah menulis Han. Tidak ada Jawaban. Kemudian saya menghubungi melalui orang lain yang telah melakukan penelitian penyortiran-bilangan bulat, dan dia mengatakan bahwa setelah teliti dia menemukan kertas-kertas itu terlalu berantakan untuk mendapatkan investasi lebih lanjut pada masanya. Saat itulah saya datang ke sini. Jika ada orang di luar sana yang mengenal Han dan bisa mendapatkan perhatiannya atas nama saya, itu akan bagus juga.
Ari
4
Pemilahan umum tidak memiliki batas bawah. Justru sebaliknya --- itu menyortir terbatas pada perbandingan yang memiliki ikatan ini. Masalahnya di sini adalah tidak membatasi input tetapi meningkatkan model komputasi. Model komputasi saya adalah salah satu dari rasa unit cost RAM, dan saya akan mengizinkan asumsi yang masuk akal (seperti ketersediaan konstanta yang bergantung pada panjang kata). Ω(nlogn)
Ari

Jawaban:

18

Saya hanya ingin tahu hal yang sama.

Untungnya, saya dapat menemukan artikel jurnal yang diterbitkan pada 2011 yang menjelaskan hal ini; Terlebih lagi, Anda tidak perlu berlangganan untuk melihatnya: Implementasi dan Analisis Kinerja Penyortiran Pohon Eksponensial

Saya merekomendasikan membaca seluruh artikel untuk mempelajari bagaimana itu dapat diimplementasikan dan untuk lebih memahami teorinya yang mendasarinya. Ini juga menunjukkan bagaimana Pohon Eksponensial bertumpu pada Quick-Sort dan Binary Trees. Berikut kutipan yang relevan terkait dengan Han waktu, ruang linear, integer algoritma sortingO(nloglogn) :

Yijie Han telah memberikan ide yang mengurangi kompleksitas hingga waktu yang diharapkan dalam ruang linear. [6] Teknik yang digunakan olehnya adalah mengoordinasikan penurunan integer pada pohon pencarian eksponensial Andersson [8] dan waktu linear multi-pembagian bit integer. Alih-alih memasukkan bilangan bulat satu per satu ke pohon pencarian eksponensial, ia menurunkan semua bilangan bulat satu level dari pohon pencarian eksponensial sekaligus. Passing yang terkoordinasi tersebut memberikan peluang untuk melakukan multi-pembagian dalam waktu linier dan karenanya mempercepat algoritme. Gagasan ini dapat mempercepat, tetapi dalam implementasi praktis sangat sulit untuk menangani bilangan bulat dalam batch.

[6] Y. Han, pengurutan deterministik dalam O (n log log n) waktu dan ruang linier, 34th STOC, 2002.

[8] A. Andersson, Penyortiran deterministik cepat dan pencarian dalam ruang linear, Simposium IEEE pada Yayasan Ilmu Komputer, 1996.

DI
sumber
Mengapa downvote?
Suresh Venkat
1
Saya baru saja menambahkan tautan artikel jurnal ini ke halaman wikipedia pohon Eksponensial . FYI: Artikel ini mungkin diterbitkan setelah pertanyaan diajukan.
AT
@ ATA, bisakah Anda sedikit memperluas jawaban Anda dan menjelaskan bagaimana jawaban itu menjawab pertanyaan. Saat ini satu-satunya yang diberikannya adalah tautan ke artikel di beberapa jurnal.
Kaveh
1
Yah, saya sudah menyerah di atas kertas Han, jadi saya senang Anda bisa memberikan bantuan ini. Saya benar-benar tidak berharap melihat apa pun ketika saya kembali ke sini hari ini. Terima kasih! Saya akan membaca makalah baru ini dan melihat apakah ini membantu saya membuat kemajuan di makalah Han.
Ari
2
(loglogn)h(h+1)!2(h+1)!h+22(h+2)!2(h+2)!=nh=Ω(logn/loglogn)(loglogn)
1

Saya tidak yakin tentang jawabannya (belum melalui kertas) tetapi saya pikir ini akan membantu. Angka-angka tersebut dikemas menjadi satu kata, sehingga operasi pada satu kata membutuhkan waktu O (1). Jika ada, katakanlah, k jumlah h bit masing-masing maka ukuran kata tergantung pada k, h yang pada gilirannya juga tergantung pada kisaran angka. Jadi kami menggunakan teknik reduksi rentang yang dapat mengurangi rentang angka sehingga banyak angka bisa muat dalam satu kata. Kemudian membuat topeng bit yang tepat, kita dapat menemukan bilangan bulat terpisah yang lebih besar dari yang lebih pendek mempertimbangkan dua kata sekaligus. Ini dapat dilakukan dalam O (1) waktu. (Tanda tangan: untuk ini setiap angka yang disimpan dalam kata memiliki bit bendera yang terkait dengannya dan kemudian kita kurangi dua kata ... jika bit bendera hilang maka itu adalah angka yang lebih kecil).

Demikian pula dengan menggunakan di atas kita juga bisa mengurutkan kata yang mengandung angka k dalam waktu O (log k) (jenis bitonic).

Sunting: Algoritma untuk mengurutkan angka 2k dalam kisaran 0 hingga m-1 yang dikemas dalam kata di mana setiap angka mengambil ukuran L dari = log (m + k) +2.

K1

K2

Ulangi untuk t = log k ke 0.

Bagian 1 - pisahkan kata asli Z menjadi dua kata A dan B.

  1. K2K1

  2. 2tL

  3. B = Z- (Z&M).

Bagian 2

  1. K1K1

  2. M = M- (M bergeser ke kiri tempat L-1).

  3. MIN = (B&M) ATAU (A- (A&M))

  4. MAX = (A&M) ATAU (B- (B&M))

  5. 2tL

  6. Akhirnya dengan tepat ORing MAX dan MIN kita kembali Z.

Saya telah memberikan sketsa, semoga Anda dapat mengisi rincian yang diperlukan.

singhsumit
sumber
Saya tidak jelas tentang apa yang Anda sarankan. Asumsinya adalah bahwa bilangan bulat sudah kecil dan k dari mereka sudah dikemas menjadi satu kata. Apakah Anda ingin mengurangi ukurannya? Jika demikian, apa yang Anda lakukan? Juga, saya tahu bagaimana mengurutkan urutan bitonic yang dikemas menjadi satu kata dalam waktu O (log k), atau untuk mengurutkan urutan umum (non-bitonic) dalam waktu O (log ^ 2 k). Jika Anda mengetahui suatu algoritma yang mengurutkan urutan umum dalam waktu O (log k), dapatkah Anda menjelaskannya secara lebih rinci? (Algoritma semacam itu tentu saja akan menyelesaikan masalah seleksi.)
Ari
Saya tidak mengurangi ukuran lebih lanjut, saya menyarankan cara mengurangi ukuran yang tidak diperlukan dalam jawaban Anda. Maaf bila membingungkan.
singhsumit
Kecuali saya salah paham, ini terlihat seperti algoritma untuk menyortir urutan bitonik. Itu tidak mengurutkan urutan umum. Misalnya, apakah ia mengurutkan urutan 3,0,2,0, di mana 3 berada di bidang paling kiri (paling signifikan)?
Ari
3 0 2 0 dipisahkan n kita mendapatkan A = 3 2 dan B = 0 0 lalu MAX menjadi 3 2 dan MIN adalah 0 0. Kemudian kita memiliki Z baru sebagai 3 2 0 0. Setiap urutan umum memiliki urutan bitonik ukuran 2. dengan setiap iterasi ukuran ini menjadi dua kali lipat dan akhirnya dalam waktu log k kami memiliki jawaban kami.
singhsumit
Tidak. Jumlahnya tidak dipadatkan, hanya digeser ke bawah. Dalam iterasi pertama kami membagi pasangan angka yang berbeda dalam bit tinggi dari posisi mereka sehingga kami mendapatkan A = 0 3 0 2 dan B = 0 0 0 0, jadi MIN = 0 0 0 0, MAX = 0 3 0 2, dan Z = 3 0 2 0. Pada iterasi kedua kami membagi pasangan yang berbeda dalam bit rendah dari posisi mereka, jadi sekali lagi kami mendapatkan A = 0 3 0 2, B = 0 0 0 0, dan lagi Z tetap tidak berubah.
Ari