Ters çiftleri sayma


14

Böl ve fethetmenin klasik bir uygulaması, aşağıdaki sorunu çözmektir:

Bir diziye , farklı, karşılaştırılabilir öğelerden oluşan verildiğinde, dizideki ters çevirme çiftlerinin sayısını sayın: çiftler , ve .a[1n](i,j)a[i]>a[j]i<j

Buna bir yaklaşım Bir Birleştirme Sıralaması yapmak, ancak aynı zamanda alt problemlerdeki ters çevirme çiftlerinin sayısını saymaktır. Birleştirme adımı sırasında, (iki) alt soruna yayılan ters çift sayısını sayar ve alt sorunların sayısını ekleriz.

Bu iyi olsa ve bir zaman algoritması verir, bu dizi bozar.O(nlogn)

Dizinin salt okunur olduğu konusunda ek kısıtlamamız varsa, bir kopyasını oluşturabilir ve kopyayla ilgilenebiliriz veya her ikisini de kullanan uzayı.Θ(n)

Mevcut soru, çalışma süresini etkilemeden alanı daha iyi denemektir. yani

Salt okunur bir dizide çalışan ve alt doğrusal (yani ) boşluk kullanan ters çift sayısını saymak için bir zaman algoritması var mı?O(nlogn)o(n)

Tek bir maliyet RAM modeli varsayalım ve elemanlar almak aralarında boşluk ve karşılaştırma olan .O(1)O(1)

Bir referans yapacak, ancak bir açıklama daha iyi olacak :-)

Web'de arama yapmayı denedim, ancak bunun için olumlu / olumsuz bir cevap bulamadım. Sanırım bu sadece bir merak.


3
Chan ve Pătraşcu bir vermek zaman algoritması, ama bildiğim kadarıyla kağıdı kaymağını gelen söyleyebilirim, onlar gerek alanı. o(nlogn)Ω(n)
Raphael

2
Ayrıca, Ajtai ve ark. herhangi bir (tam) zaman akış algoritmasının alanına ihtiyacı olduğunu kanıtlayın . Yine de ölçütlerinize uygun yaklaşımlar var. O(n)Ω(n)
Raphael

1
@Raphael: Teşekkürler! Herhangi bir cevap gelmezse, yorumunuz şimdiye kadarki en iyi cevap olacaktır.
Aryabhata

BTW Ajtai ve diğerlerinin alt sınırı konusunda biraz kafam karıştı. Teorem 8 "herhangi bir algoritma" diyor, ama bana en alt sınır, tek geçişli tam akış algoritmalarına karşı gibi görünüyor, çok kısıtlı bir model
Sasho Nikolov

@SashoNikolov: Sanırım küresel olarak modellerini akış algoritmalarına ayarladılar, bu yüzden "herhangi biri" bunlarla sınırlı olacaktı. Umarım sonuçum - herhangi bir tam zaman algoritması - doğrudur, yani herhangi bir doğrusal zaman algoritması sürekli çok geçişli bir akış algoritması olarak ifade edilebilir. Göreceğiz . O(n)
Raphael

Yanıtlar:


3

Raphael'in yanıtı:

Chan ve Pătraşcu bir vermek zaman algoritması, ama bildiğim kadarıyla kağıdı kaymağını gelen söyleyebilirim, onlar gerek alanı. Ayrıca, Ajtai ve ark. herhangi bir (tam) zaman akış algoritmasının alanına ihtiyacı olduğunu kanıtlayın . Yine de ölçütlerinize uygun yaklaşımlar var.o(nlogn)Ω(n)O(n)Ω(n)


Cevap verdiğiniz için teşekkürler. Yine de biraz daha zaman vereceğim. Trafik toplanıyor gibi görünüyor.
Aryabhata
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.