Hassas nesnelerin listelerini birleştirme


19

Arka plan: Chao Xu, aşağıdaki soruyu bir süre önce yayınladı: " Her bir öğenin kez karşılaştırılacağı şekilde, sıralama ağlarına indirgenmeyen bilinen bir karşılaştırma sıralama algoritması var mı?Ö(günlükn) " Görünüşe göre sorunla biraz sıkıştık; 2009'da Valentin Polishchuk ile aynı sorunu tartıştım ve hiçbir yere ulaşmadık.

Bazı yeni fikirler almak için, benzer bir tada sahip ve tamamen önemsiz olmayan mümkün olan en basit soruyu bulmaya çalıştım. Dolayısıyla aşağıdaki soru.


Soru: Her biri öğeli iki sıralı liste verilir . Eğer Can birleştirme her element sadece karşılaştırılır, böylece listeleri defa?nÖ(1)

Doğal olarak, çıktı tüm öğelerini içeren sıralı bir liste olmalıdır .2n

[Bu önemsiz olduğu ortaya çıktı, cevap “hayır”.]


Soru 2: Her biri öğeli iki sıralı liste verilir . Eğer Can birleştirme her element sadece karşılaştırılır, böylece listeleri zamanlarda, izin verilmesi halinde elemanlarının küçük bir bölümünü atmak ?nÖ(1)

Daha kesin bir ifadeyle, çıkış içeren bir sıralanmış listesi olmalıdır elemanları ve bir "çöp kutusu" içeren elemanları. değerini ne kadar küçük yapabilirsiniz ? Alma basittir. gibi bir şey açık bir şekilde yapılabilir olmalıdır. Ama misin?2n-T(n)T(n)T(n)T(n)=nT(n)=n/100T(n)=Ö(n)


Notlar:

  • Burada karşılaştırma modelini kullanıyoruz. Sadece deterministik algoritmalar, en kötü durum garantileriyle ilgileniyoruz.

  • Not o ikisi listeleri tam olması unsurlar. Eğer elemanlı bir liste ve elemanlı başka bir listemiz olsaydı , cevap açıkça "hayır" dır; iki liste de uzun ancak, bunun bir gibi görünüyor olabilir bazı "yük dengeleme" yapabilecektir.nn1

  • Bu sefer her türlü algoritma geçerlidir. Algoritmanız sıralama ağlarını yapı taşı olarak kullanıyorsa, gayet iyi olur.

  • Bir başlangıç ​​noktası için, her öğeyi en fazla 200 kez karşılaştıran basit bir algoritma: Standart birleştirme algoritmasını kullanın, ancak listelerin başlıkları için sayaçları koruyun. 200'e ulaştığınızda, öğeyi atın. Şimdi attığınız her öğe için çıktı dizinize başarıyla 200 öğe yerleştirdiniz. Böylece elde ettiniz .T(n)=n/100


8
"Eğer n elemanlı bir liste ve 1 elemanlı başka bir listemiz olsaydı, cevap açıkça hayırdır." Dediniz. Her listedeki n öğenin olduğu durum daha genel bir sorun değil mi? Örneğin, ikinci listedeki tüm öğelerin, ilk öğe dışındaki tüm öğelerin ilk listedeki tüm öğelerden çok daha büyük olacağına söz verilirse, bu ilk soruna neden olmaz mı?
Robin Kothari

Ω(günlükn)

T(n)

Yanıtlar:


5

Hayır, böyle bir algoritma var olamaz.

t

2t2t+1t+1

nn/2tn/2t

tÖ(n)

Bir yan notta, bu sınırın, her öğenin diğer listenin çevresindeki bölümün kabaca günlüğü ile karşılaştırıldığı bir algoritma ile eşleştirilmesi mümkün görünmektedir. Bu ilgi çekiciyse, ayrıntıları çözmeye çalışacağım.

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.