Elemen perbedaan dalam O (n) waktu?

21

Kita semua tahu bahwa perbedaan elemen dalam model berbasis perbandingan tidak dapat dilakukan dalam waktu . Namun, pada RAM kata, seseorang mungkin dapat mencapai yang lebih baik.o(nlogn)

Tentu saja, jika kita mengasumsikan adanya fungsi hash sempurna yang dapat dihitung dalam waktu linier, kita mendapatkan algoritma waktu linier untuk perbedaan elemen: tetap saja hashing angka satu per satu dan kembalikan 1 jika ada tabrakan.

Namun, ada dua masalah: 1) sebagian besar konstruksi fungsi hash sempurna yang saya dapat menemukan keacakan digunakan dan 2) Saya tidak dapat menemukan diskusi tentang waktu pra-pemrosesan di mana saja, yaitu, waktu yang diperlukan untuk memutuskan fungsi hash mana yang sedang berjalan untuk digunakan berdasarkan set input angka.

Fredman et al. " Menyimpan tabel jarang dengan waktu akses kasus terburukO(1) O ( 1 ) " tidak menyelesaikan masalah pertama dengan menyediakan fungsi hash dengan waktu akses dalam kasus terburuk, tetapi tidak mengatakan apa pun tentang masalah kedua .O(1)

Singkatnya, inilah yang saya inginkan:

Merancang sebuah algoritma yang diberikan satu set dari angka (masing-masing nomor yang bit panjang) pada kata-RAM dengan panjang kata , menemukan fungsi hash di waktu, di mana . Fungsi harus memiliki properti yang untuk setiap , jumlah elemen yang dipetakan ke adalah konstan dan menghitung harus mengambiln w w h : S { 1 , ... , m } O ( n ) m = O ( n ) h j { 1 , ... , m } S j h ( i ) O ( 1 )Snwwh:S{1,,m}O(n)m=O(n)hj{1,,m}Sjh(i)O(1)waktu dalam model kata-RAM "masuk akal", yaitu, model tidak boleh membiarkan fungsi "eksotis" pada kata-kata dievaluasi dalam waktu .O(1)

Saya juga ingin tahu apakah ada algoritma untuk menyelesaikan elemen yang berbeda pada kata-RAM yang tidak menggunakan fungsi hash sama sekali.

Vinayak Pathak
sumber
8
Re: "Saya juga ingin tahu apakah ada algoritma untuk menyelesaikan perbedaan elemen pada kata-RAM yang tidak menggunakan fungsi hash sama sekali." - selama Anda hanya menginginkan dan tidak linier, ada banyak pekerjaan untuk mengurutkan kata RAM (lihat en.wikipedia.org/wiki/Integer_sorting ). Beberapa algoritma ini menggunakan hashing tetapi yang lain tidak. o(nlogn)
David Eppstein
Apakah solusi perkiraan diperbolehkan?
PADA
(Saya pikir itu) Proses berpikir Anda melewatkan satu langkah: 1. Anda mendalilkan bahwa kompleksitas terbaik dalam model perbandingan adalah 2. Anda bertanya bagaimana ini dapat ditingkatkan dalam model RAM 3. Anda langsung meminta solusi dalam waktu dalam model RAM. Sebaliknya, Anda harus mempelajari solusi dalam dalam model RAM dan melihat apakah Anda dapat memperbaikinya? O ( n ) o ( n log n )Θ(nlogn)O(n)o(nlogn)
Jeremy
Apakah Radix terlalu lambat untuk Anda?
Thomas Mueller

Jawaban:

8

Perbedaan elemen dapat dipecahkan secara deterministik dalam model RAM dalam waktu dalam :O(nloglogn)o(nlogn)

Urutkan waktu dalam Anda jumlah bit menggunakan algoritma sorting dijelaskan oleh Han di stoc 2002 ( "deterministik menyortir di waktu dan ruang linear"), kemudian memindai dalam waktu linier untuk tabrakan.n w O ( n log log n )O(nloglogn)nwO(nloglogn)

Sejauh yang saya tahu, itulah hasil terbaik yang diketahui sampai hari ini.

Jeremy
sumber