Saya membaca sebuah pertanyaan, dan saya mencari masukan tentang bagaimana menyelesaikannya:
Angka-angka secara acak dihasilkan dan disimpan ke dalam array (memperluas), Bagaimana Anda melacak median?
Ada dua struktur data yang bisa menyelesaikan masalah. Satu adalah pohon biner seimbang, yang lain adalah dua tumpukan yang melacak bagian terbesar dan bagian terkecil dari elemen. Saya pikir dua solusi ini memiliki waktu berjalan yang sama O(n lg n)
, tetapi saya tidak yakin dengan penilaian saya.
Apa cara terbaik untuk melacak median?
Usaha saya:
Dalam pertanyaan ini, saya pikir tumpukan adalah cara terbaik untuk melacak median. Ada dua tumpukan, tumpukan besar dan tumpukan kecil, yang tidak perlu berurutan. Pertama, kami menghitung nilai rata-rata elemen dalam array. Jika elemen kurang dari nilai rata-rata, kami menempatkan num ke tumpukan kecil. Sebaliknya, kami menempatkan num ke tumpukan besar. Jika jumlah tumpukan besar sama dengan jumlah tumpukan kecil, yang terbesar di tumpukan kecil dan yang terkecil di tumpukan besar adalah median. Jika kedua tumpukan memiliki ukuran yang berbeda, kita cukup membuang elemen root dari tumpukan dengan ukuran lebih besar dan mendorongnya ke akar tumpukan ukuran yang lebih kecil. Untuk tumpukan besar, elemen akar adalah yang terkecil, dan untuk tumpukan kecil, elemen akar adalah yang terbesar. Dengan cara ini, jika kedua tumpukan memiliki ukuran yang sama atau perbedaan digital,
Saya pikir solusi ini memiliki waktu berjalan sebagai O (m * n), m berarti waktu kita menyesuaikan tumpukan tidak seimbang.
Apakah ini cara terbaik untuk melacak median?
std::nth_element
siapa saja?