Karena adalah bilangan bulat sehingga untuk semua , dan kemunculan masing-masing nomor kecuali nomor tertentu dalam adalah angka ganjil. Coba cari nomor yang kemunculannya genap.
Ada algoritma : kita mengurutkan menjadi , dan memecah menjadi beberapa bagian, yang nilainya elemen adalah sama, oleh karena itu kita dapat menghitung terjadinya setiap elemen.
Saya ingin mencari algoritma spasi -terburuk- -waktu-dan- .
Andaikan dan \ epsilon> 0 , maka jenis radix tidak dapat diterima. \ DeclareMathOperator {\ xor} {xor} Operasi bitwise biner dapat diterima, misalnya, A [1] \ xor A [2] .
algorithms
search-algorithms
Yai0Phah
sumber
sumber
Jawaban:
Berikut ini ide untuk algoritma sederhana; hitung saja semua kemunculannya!
Secara keseluruhan, ini memberi Anda algoritma linear-waktu yang dapat menggunakan (dalam arti mengalokasikan) banyak memori. Perhatikan bahwa dapat mengakses acak dalam waktu yang konstan tanpa tergantung pada sangat penting di sini.mC m
tambahan terikat pada ruang lebih sulit dengan pendekatan ini; Saya tidak tahu ada struktur data kamus yang menawarkan pencarian waktu. Anda dapat menggunakan tabel-hash yang di sini adalah implementasi dengan waktu pencarian yang diharapkan ( ukuran tabel, jumlah elemen yang disimpan) sehingga Anda bisa mendapatkan yang sewenang-wenang dengan ruang linear - dengan harapan. Jika semua nilai dalam peta ke nilai hash yang sama, Anda kacau.O ( 1 ) O ( 1 + k / n ) n k AO ( n ) O ( 1 ) O ( 1 + k / n ) n k SEBUAH
sumber
Solusi yang hampir sepele - yang menggunakan ruang - adalah menggunakan peta hash. Ingat bahwa peta hash telah mengamortisasi runtime untuk menambah dan mencari elemen.O ( 1 )Θ ( n ) O ( 1 )
Karenanya, kita dapat menggunakan algoritma berikut:
Mengalokasikan peta hash . Iterate lebih . Untuk setiap elemen , tambah jumlah kejadian yang terlihat, yaitu .H SEBUAH i ∈ A H( i ) + +
Ulangi set kunci peta hash, dan periksa kunci mana yang memiliki jumlah kejadian genap.
Sekarang ini adalah algoritma sederhana yang tidak benar-benar menggunakan trik besar, tetapi kadang-kadang bahkan ini sudah cukup. Jika tidak, Anda mungkin ingin menentukan batasan ruang apa yang Anda tetapkan.
sumber