Tradeoff ruang-waktu untuk masalah elemen yang hilang

14

Inilah masalah yang sudah diketahui.

Diberikan array A[1...n] dari bilangan bulat positif, menghasilkan bilangan bulat positif terkecil tidak dalam array.

Masalah dapat diselesaikan dalam HAI(n) ruang dan waktu: membaca array, keep track di HAI(n) ruang apakah 1,2,...,n+1 terjadi, memindai untuk elemen terkecil.

Saya perhatikan Anda dapat bertukar ruang untuk waktu. Jika Anda memiliki O(nk)hanya memori, Anda dapat melakukannya dalamputarankdan mendapatkan waktuO(kn). Dalam kasus khusus, jelas ada algoritma waktu kuadrat ruang konstan.

Pertanyaanku adalah:

Apakah ini tradeoff yang optimal, yaitu apakah timespace=Ω(n2) ? Secara umum, bagaimana seseorang membuktikan batasan semacam itu?

Asumsikan model RAM, dengan aritmatika terbatas dan akses acak ke array di O (1).

Inspirasi untuk masalah ini: tradeoff ruang-waktu untuk palindrom dalam model satu-pita (lihat misalnya, di sini ).

sdcvvc
sumber
2
Tidak, Anda dapat mengurutkan array di lalu menemukan nomor yang hilang (angka pertama harus 1, kedua harus 2, ... kalau tidak Anda akan menemukannya) di O (n), pengurutan ini dapat dilakukan dengan inplace mergesort, berarti O ( 1 ) ruang ekstra, jadi waktu ruang milik O ( n log n ) . Saya tidak tahu saya mendapatkan masalah Anda dengan tepat atau tidak (karena ini saya tidak menjawabnya, Juga saya tidak tahu apakah ada ikatan yang lebih baik). O(nlogn)O(1)O(nlogn)
Saya menganggap input hanya baca. (Jika tidak, masalah dapat diselesaikan secara optimal dalam ruang waktu / O ( 1 ) : kalikan input dengan 2, dan gunakan paritas untuk mensimulasikan algoritma O ( n ) / O ( n ) )O(n)O(1)O(n)/O(n)
sdcvvc
Apa algoritma ruang konstan? Sepertinya Anda akan memerlukan ruang untuk versi n 2 yang "jelas" bagi sayalognn2
Xodarap
Dalam model ini, bilangan bulat ukuran kata menggunakan ; jika lebih nyaman, Anda dapat menjawab varian pertanyaan apa pun dengan waktu spasi = Ω ( n 2O(1)untuk beberapa konstantak. timespace=Ω(n2logkn)k
sdcvvc
@ sdcvvc, saya tidak dapat memahami algoritma , apakah Anda akan menjelaskannya sedikit lagi? (Catat bahwa membaca bit membutuhkan O ( log n ) ). O(n)/O(1)O(logn)

Jawaban:

2

Ini dapat dilakukan dalam operasi kata O(nlogn) dan O(1) kata memori (masing-masing memori O(nlog2n) dan memori O(logn) dalam model RAM bit-level). Memang, solusinya akan didasarkan pada pengamatan berikut.

Katakanlah ada n0 bahkan dan n1 angka ganjil dalam rentang [1,n+1] (sehingga n0n1 dan n0+n1=n+1 ). Kemudian ada b{0,1} sedemikian rupa sehingga ada paling banyak nilai nb1 dengan paritas b pada input. Memang, jika tidak ada setidaknya n0bahkan dan setidaknya n1 nilai aneh di input, yang berarti bahwa setidaknya ada n0+n1=n+1 nilai dalam input, kontradiksi (hanya ada n dari mereka). Ini berarti bahwa kita dapat terus mencari nomor yang hilang hanya di antara angka ganjil atau genap saja. Algoritma yang sama dapat diterapkan pada bit notasi biner yang lebih tinggi juga.

Jadi algoritma kami akan terlihat seperti itu:

  1. Misalkan kita sudah sekarang bahwa hanya ada nilai x dalam input dengan modulo 2b sisanya sama dengan r[0,2b) tetapi ada setidaknya x+1 angka dalam rentang [1,n+1] yang memiliki sisanya r modulo 2b (pada awalnya kita tahu pasti untuk b=0,r=0 ).

  2. Katakanlah ada nilai x0 pada input dengan sisa r modulo 2b+1 dan nilai x1 pada input dengan sisa r+2b modulo 2b+1 (kita dapat menemukan angka-angka ini dalam sekali jalan melalui input). Jelas, x0+x1=x . Selain itu, karena ada setidaknya x+1 angka dalam input dengan sisa r modulo 2b , setidaknya satu dari pasangan(r,b+1),(r+2b,b+1) memenuhi persyaratan langkah1 .

  3. Kami telah menemukan angka yang hilang ketika 2bn+1 : hanya ada satu angka dalam rentang [1,n+1] yang mungkin memiliki sisa r modulo 2b ( r sendiri jika berada dalam kisaran), jadi ada pada sebagian besar nilai nol dalam input yang memiliki sisa seperti itu. Jadi r memang hilang.

Jelas, algoritme berhenti pada langkah-langkah O(logn) , masing-masing membutuhkan waktu O(n) (satu kali melewati array input). Selain itu, hanya O(1) kata memori yang diperlukan.

Kaban-5
sumber
Saya senang melihat pertanyaan dijawab setelah waktu itu :)
sdcvvc
1

Jika saya memahami definisi Anda, ini dapat dilakukan dalam waktu linier dengan ruang konstan. Ini jelas merupakan batas terendah, karena kita harus setidaknya membaca seluruh input.

Jawaban yang diberikan dalam pertanyaan ini memuaskan.

Tidak mungkin menjalankan ini dengan sedikit waktu atau ruang, dan menambahkan waktu atau ruang tambahan tidak berguna, jadi tidak ada pertukaran ruang-waktu di sini. (Amati bahwa , jadi pengorbanan yang Anda amati tidak berlaku asimptotik, dalam hal apa pun.)n=O(n/k)

Dalam hal pertanyaan umum Anda, saya tidak tahu teorema bagus apa pun yang akan membantu Anda membuktikan pengorbanan ruang-waktu. Pertanyaan ini tampaknya menunjukkan bahwa tidak ada jawaban yang mudah diketahui. Pada dasarnya:

Misalkan beberapa bahasa decidable di waktu (menggunakan beberapa jumlah ruang) dan s ruang (menggunakan beberapa jumlah waktu). Bisakah kita menemukan f , g sedemikian sehingga L dapat ditentukan oleh M yang berjalan dalam waktu f ( t , s ) dan g ( t , s ) ?tsf,gLMf(t,s)g(t,s)

tidak diketahui, dan jawaban yang kuat akan memecahkan banyak masalah terbuka (terutama tentang SC), menyiratkan bahwa tidak ada solusi yang mudah.


EDIT: Ok, dengan pengulangan (tapi aku masih mengasumsikan bahwa dengan masukan dari ukuran jumlah maksimum yang mungkin adalah n + 1 ).nn+1

Perhatikan bahwa algoritma kami harus dapat membedakan antara setidaknya jawaban yang mungkin. Misalkan pada setiap melewati data kita bisa mendapatkan paling banyak k potongan data. Maka kita akan memerlukan n / k pass untuk membedakan semua jawaban. Dengan asumsi k = n / s maka kita jalankan di nnkn/kk=n/swaktu. Jadi saya pikir ini membuktikan apa yang Anda inginkan.nn/sn=sn

Kesulitannya adalah dalam menunjukkan bahwa setiap kali melalui kita hanya mendapatkan bit. Jika Anda menganggap bahwa satu-satunya operasi hukum kami adalah =, maka kami baik-baik saja. Namun, jika Anda mengizinkan operasi yang lebih rumit, maka Anda akan dapat memperoleh lebih banyak informasi.k

Xodarap
sumber
3
Pertanyaan yang Anda tautkan mengasumsikan bahwa setiap nomor muncul paling banyak satu kali. Saya tidak membuat asumsi ini, jadi solusinya tidak berlaku. Terima kasih atas tautan kedua.
sdcvvc
@ sdcvvc: Kesalahan saya, saya berasumsi Anda menggunakan versi yang saya kenal. Saya tidak memiliki jawaban yang lengkap, tetapi terlalu panjang untuk dikomentari - semoga hasil edit saya bermanfaat.
Xodarap
5
k 2kn/2kn/k