ile bir aralığın en az kapsama bulma {( i a, b i)} i olan birlik tüm (I bir aralık alt aralık (a, b) ve bir dizi olduğunu varsayalım a, b). Hala (a, b) kapsamındaki bu alt-kaynakların minimal-asalet alt kümesini seçmenin etkili bir yolu var mıdır?alt aralıkları
cevap
Kanıt: S: Ssetini aşağıdakileri içeren tüm alt kaynaklardan kabul edin. Açıkçası, bunlardan biri en uygun çözüme ait olmalı. Biz S den ( maksimum b maksimum) bir alt aralık ile değiştirin kimin sağ uç b maksimum S bir (ulaşır sağa en uzak), geri kalan ortaya aralığı içinde maksimum (bir b max, b) en uygun çözümden kalan aralığın bir alt kümesi olacaktır, bu yüzden optimal çözümden analog açılmamış aralığa göre daha fazla altinterle kaplanamaz.Bu nedenle, ( max, en max) ve kalan aralık için optimal çözüm (b maks, b) 'den yapılan bir çözüm de optimal olacaktır.
Bu yüzden, en sağa (ve önceki aralığın sonunu kaplayan) aralıktan bir ve iteratif olarak devam edin, b tuşuna basana kadar tekrarlayın. Aralıkları aralıklı bir aralık ağacında saklarsanız, sonraki aralığı seçmek log (n) 'de yapılabilir.
Aşağıdakileri detaylandırır mısınız: "kalan kapanmamış aralık (bmax, b) en uygun çözümden kalan aralığın bir alt kümesi olacaktır"? – jfs
Bu çözümün işe yaradığını düşünüyorum ve benimkinden daha iyi. – Artelius
@JFS: En uygun çözümün, (a, bi) ve yaprakları (bi, b) kaplayan bir aralık (ai, bi) ile başladığını varsayalım. (Amax, bmax) tanımından, bmax> = bi, yani (bmax, b), (bi, b) 'nin bir alt kümesidir (altbölgesi). –
Dinamik programlama gibi görünüyor.
//works backwards from the end
int minCard(int current, int must_end_after)
{
if (current < 0)
if (must_end_after == 0)
return 0; //no more intervals needed
else
return infinity; //doesn't cover (a,b)
if (intervals[current].end < must_end_after)
return infinity; //doesn't cover (a,b)
return min(1 + minCard(current - 1, intervals[current].start),
minCard(current - 1, must_end_after));
//include current interval or not?
}
Ama aynı zamanda önbelleğe (memoisation) içermelidir:
İşte (aralıkları zaman biten göre sıralı listede olduğunu varsayıyorum) algoritmasının bir açıklama verilmiştir.
'minCard()' asgari bir asallık elde etmek için tasarlanmıştır, ancak soru asgari düzeyde asaleten bir alt set ister. – jfs
Bu algoritmanın bir uzantısı olacak ve bu da en uygun değeri oluşturmak için hangi alt kümenin kullanıldığını takip ediyor. – Artelius
@Artelius Algoritmanızın karmaşıklığı nedir? –
Yani, alt-tabakalar hala (a, b) tüm noktalarda tamamen kapalı kalacak şekilde üst üste binecek şekilde mi?
Belki de alt röleleri kendilerinin geldikleri yerle ilişkili temel bloklara ayırmak, böylece altbölümün kapsadığı diğer bölgeler için her bir temel blok aralığı muhasebesi için seçenekleri listeleyebilirsiniz. Ardından, her bir alt alt veri kaynağına dayalı bir arama kullanabilir ve en azından hiç boşluk kalmadığından emin olun.
O halde, daha verimli arama yapmalıyız. Bu daha zor olurdu.
Tamamen başka bir küçük sayı kümesi tarafından kapsanan aralıkların toplanmasını kaldırabilir ve önişlemden sonra sorunu çözebilir.
En azından bir buçuk için minimal olmaz mıydı? Emin değilim.
Bir günlüğe bir link bulundu, ancak okuyamadı. :(
Bu hitting set sorun olacağını ve genel olarak NP_hard edilecek.
this okumak ya ama sorunun karşısındaki tür gibi görünüyor alınamadı.
bunu okunamadı ama bölme aralıkları yukarı bahseder başka link.
Here GeometricOptimization Sorunları randomize Algoritmalar kullanılabilir bir referanstır. Bu pdf
Sayfa 35 açgözlü bir algoritma vardır.
Sayfa Karp (1972) 11 isabet-set bahseder ve çok çağırılır.
Google result. Araştırmak eğlenceliydi ama şimdi gitmeliyim. A veya b ile başlayan açgözlü bir algoritma her zaman en uygun çözümü verir.
Göz önünde bulundurulması gereken iki durum vardır: Durum 1: Bir aralığın bitiş zamanından sonra üst üste binme aralıkları yoktur. Bu durumda, en küçük başlangıç zamanı ve en uzun son işlem süresi ile bir sonraki aralığı seçin. (amin, bmax). Durum 2: Baktığınız son aralıkla 1 veya daha fazla üst üste binme aralığı vardır. Bu durumda, başlangıç zamanı önemli değil çünkü bunu zaten biliyorsunuz. Bu yüzden bitiş zamanı için optimize edin. (a, bmax).
Örnek 1, her zaman ilk aralığı optimum ayardaki ilk aralık olarak seçer (kanıt, @RafalDowgrid'in sağladığı ile aynıdır).
- 1. düz alt aralıkları böyle numarası listesi göz önüne alındığında
- 2. Birleştirme tarih aralıkları
- 3. Python tamsayı aralıkları
- 4. Zaman aralıkları nasıl ortalama?
- 5. TortoiseHG 2.0.5, Changeset Aralıkları
- 6. Amaç C'deki Zaman Aralıkları
- 7. Tarih aralıkları arasındaki Postgresql sorgu
- 8. Matplotlib'deki verilerin ek açıklama aralıkları
- 9. Mathematica'da İşaretleyicilerin Özel Aralıkları PlotMarkers
- 10. Webkit'teki seçme aralıkları (Safari/Chrome)
- 11. zaman aralıklarını (zaman birliği aralıkları)
- 12. CSS3 Flexbox aralıkları arasındaki boşluk
- 13. Kibana ve sabit zaman aralıkları
- 14. Güven aralıkları ggplot2 ile manuel olarak gölgelendirme
- 15. Java'da Lucene ile tarih aralıkları mı arıyorsunuz?
- 16. GUI sayısal aralıkları ayarlamak için Delphi
- 17. NA değerleriyle birlikte güvenlik aralıkları çizme
- 18. Tamsayı aralıkları için Delphi durum bildirimi
- 19. (Python) tahmin regresyon parametre güven aralıkları
- 20. İmzalı tamsayı aralıkları işaretsiz olarak işaretlendi
- 21. GCE bölgeleri için IP aralıkları nelerdir?
- 22. Solr sonuçlarında faset aralıkları nasıl elde edilir?
- 23. Orman Plotu'nda farklı güven aralıkları çizin
- 24. Alt tabakaya ilişkin alt tabaka alt dizesi
- 25. nasıl kullanarak ekran görüntülerinden maven versiyon aralıkları durdururum
- 26. Highcharts graph farklı tarih aralıkları için X ekseni etiketine sahip
- 27. wcf data service $ filtre aralıkları arasında arama yapmak için
- 28. Çakışan aralıkları bulmak için düzenli bir algoritma nedir?
- 29. El capitan OS X Server 5.1 yükseltme aralıkları sanal sunucular
- 30. SQL: Birden çok satırda sürekli tarih aralıkları buluyor musunuz?
En az sayıda alt iş parçacığı veya en az sayıda öğeye (ve dolayısıyla en az çift kopyaya sahip) sahip alt veri kümesi kümesini mi arıyorsunuz? –