Kami menginginkan algoritme yang, mengingat array dengan panjang bilangan bulat, menemukan perbedaan minimum antara dua bilangan bulat dalam array.
Salah satu algoritma tersebut adalah untuk mengurutkan array dan memeriksa pasangan angka yang berdekatan. Ini membutuhkan waktu .
Apakah ada cara yang lebih cepat, misalnya algoritma ?
algorithms
arrays
dipukul
sumber
sumber
Jawaban:
Ini tergantung pada model perhitungan Anda. Jika Anda hanya membolehkan aritmatika dan perbandingan (model pohon keputusan aljabar) maka ada batas bawah untuk perbedaan elemen , masalah dalam memutuskan apakah semua elemen berbeda. Masalah Anda tentu saja lebih sulit, jadi batas bawah yang sama berlaku.Ω(nlogn)
(Ada beberapa cetak halus: batas bawah hanya berlaku jika tingkat polinomial yang dibandingkan dibatasi. Jika semua yang Anda lakukan adalah membandingkan berbagai perbedaan , maka Anda baik untuk pergi. Model pohon keputusan aljabar juga memungkinkan Anda untuk membandingkan polinomial yang lebih umum dalam input, selama mereka memiliki tingkat terikat.)xi−xj
Ada model lain yang mungkin berkinerja lebih baik - misalnya, dalam beberapa model Anda dapat mengurutkan bilangan bulat dalam . Tapi saya bayangkan Anda tidak ingin mengizinkan tipuan yang digunakan dalam algoritma seperti itu.o(nlogn)
sumber
Jika integer dalam array memiliki jumlah digit yang terbatas, Anda dapat mengurutkan array dengan algoritma sortir radix , yaitu O (kN) dan kemudian memeriksa pasangan angka yang berdekatan (O (N))? Kompleksitas yang dihasilkan adalah O ((k + 1) N), linier.
sumber