SORU
8 HAZİRAN 2013, CUMARTESİ


Bir şekilde nasıl ölçmek için bir liste var mı?

Nasıl ölçmek için bir yoldur bir liste var mı?

Eğer bir liste sıralanmış olup olmadığını bilmek değil (boolean), ama bir oran gibi bir şey "" bir şey istatistikte korelasyon katsayısı gibi. sortness yani

Örneğin,

  • Eğer bir listenin öğeleri artan sırada, hızı 1.0 olacaktır

  • Eğer liste azalan sıralama, hızı -1.0 olurdu

  • Eğer liste artan neredeyse sıralanan oranı 0.9 veya bazı değer 1'e yakın olur.

  • Eğer listede hiç sıralanır değilse (rasgele), oranını 0'a yakın olur

Uygulama için Scala küçük bir kütüphane yazıyorum. Sıralama oranı yararlı olacağını düşünüyorum, ama böyle bir şey hakkında herhangi bir bilgi bulamadım. Belki de bu konsept için yeterli şartları bilmiyorum.

CEVAP
8 HAZİRAN 2013, CUMARTESİ


Sadece listesinde çevrimleri saymak.

İnversion

T Tsette bazı < sıralamaya göre sıra dışı görünen sıra öğeleri bir çift türündeki öğeleri bir dizi bir ters's.

Wikipedia:

Resmi olarak, A(1), A(2), ..., A(n) n sayı dizisi olsun.
i < j A(i) > A(j) çift (i,j) denirinversionA.

çevirme numarasıbir dizi kendi sortedness ortak bir ölçü.
Resmen, ters sayı çevrimleri, yani sayısı olarak tanımlanır

definition

Bu tanımları daha net hale getirmek için, örnek sırası 9, 5, 7, 6 düşünün. Bu sıra vardırçalışmalıyız(0,1), (0,2), (0,3), (2,3)çevirme numarası4.

0 1, arasında bir değer istiyorsanız N choose 2 ters numarası bölebilirsiniz.

Aslında bir liste sıralama nasıl bu puanı hesaplamak için bir algoritma oluşturmak için iki yaklaşım vardır:

Yaklaşım 1 (Deterministik)

Ne kadar çok çalışır gibi düzeltme olduğunu izlemek için favori sıralama algoritması değiştirin. Ama bu sıradan olmayan ve farklı uygulamalarını bağlı sıralama algoritması seçin, sen-ecek son yukarıya ile bir algoritma hayır daha pahalı (açısından karmaşıklık) sıralama algoritması ile başladı.

Eğer bu yol, "değiştirir." sayma gibi basit değil unutmayın alırsan Mergesort, örneğin, ** 16 yaşında, henüz bir listesini azalan şekilde sıralanmış üzerinde çalışan, N choose 2 tüm inversiyonları doğru olacak durum kötü. O(N^2) çevrimleri O(N log N) işlemleri düzeltilmiştir. Bu yüzden bazı işlemler kaçınılmaz olarak bir defada birden fazla çarpıklığın düzeltilmesi gerekir. Dikkatli olmanı uygulamanız var.O(N log N) karmaşıklığı ile bunu yapabilirsiniz, sadece biraz zor. not:

İlgili: calculating the number of “inversions” in a permutation

Yaklaşım 2 (Stokastik)

  • Rastgele örnek bulabilirsiniz (i,j), i != j nereye
  • Her çifti için, list[min(i,j)] < list[max(i,j)] belirlemek (0 veya 1)
  • Bu karşılaştırmalar, ortalama hesaplama N choose 2 ile normalize

Şahsen bu kadar kolay uygulamak için değil sadece, çünkü hassas bir şartı var - sürece stokastik yaklaşım ile giderdim.


Eğer gerçekten istediğiniz bir değeri (z') arasında -1 (azalan sıralama) 1 (artan sıralama), sadece harita değerini yukarıda (z), arasında 0 (artan sıralama) ve 1 (azalan sıralama), bu dizi bu formülü kullanarak:

z' = -2 * z   1

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bobinire

    bobinire

    24 EYLÜL 2006
  • MatheusDosGames

    MatheusDosGa

    28 Aralık 2011
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009