Nasıl doğrusal zaman sayı medyan yığınları kullanarak bulabilirim?
Wikipedia diyor ki:
Seçim algoritmaları: min Bulma, max, min ve max hemmedyanya hatta k-th en büyük unsur olabilir doğrusal zaman kümeler kullanılarak yapılmıştır.
Dediklerinin hepsi yapılabilir ve nasıl değil.
Bana bunun nasıl yapılacağı hakkında bazı başlangıç yığınları kullanarak verebilir misiniz?
CEVAP
Sabit zaman (ve doğrusal zaman öbek oluşturmak için) min, max ve ortalama bulmak için min-max-medyan bir yığın kullanın. Hazırlanmasında, en küçük/en büyük değeri bulmak için-istatistik ağaçları kullanabilirsiniz. Bu veri yapılarının her ikisi de this paper on min-max heaps [pdf link] olarak açıklanmıştır. Min-max yığınları alternatif ikili kümeler min-ve max kümeler-kümeler arasında.
Gazeteden: min-max-medyan Bir yığın aşağıdaki özelliklere sahip: ikili bir yığın
1) Tüm elemanları ortanca kök yer almaktadır
2) kök sol Alt boyutu tavan min-max, bir yığın Hl[((n-1)/2)] içeren unsurları az ya da ortalama eşit. Sağ alt boyut katın max-min heap İk bir[((n-1)/2)] içeren tek öğeleri daha büyük veya medyan eşit.
Kağıt gibi bir yığın oluşturmak için nasıl açıklar.
Edit: okuma Üzerine kağıt daha iyice göründüğü gibi olsa bina min-max-medyan yığınları gerektiren, yapma medyan (FTA: "Bul medyan tüm n eleman kullanarak herhangi bir bilinen doğrusal-zaman algoritmaları"). Bu, yığın yerleşik sonra medyan sadece soldaki min-max yığın ve sağdaki max-min heap arasındaki dengeyi koruyarak koruyabilirsiniz " dedi. DeleteMedian ya da max-min heap dk ya min-max yığın maksimum dengesini korur (hangisi) ile kökünden değiştirir.
Eğer öyleyse şansın yokmuş sabit bir veri kümesinin ortanca değeri bulmak için min-max-medyan bir yığın kullanmayı planlıyorsanız ama eğer değişen bir veri seti kullanıyorsanız mümkündür.
Nasıl bir yöntem stacktrace veya yansı...
Nasıl bir sıra iki yığınları kullanara...
nasıl bir zaman dilimi kullanarak bir ...
Gıt değişikliği nasıl bulabilirim aras...
Python python kullanarak nasıl yolumu ...