Segment aralıklarını birleştirmek için algoritma - oluşturmaya yardımcı olun

 

Bir segmentin parçalarını (aralıklarını), segmentlerin kesişimleri olmadan, daha sonra doldurulacak olası bir boşlukla tek bir segmentte birleştiren bir algoritma oluşturma konusunda yardım istiyorum.

Başlangıçta belirli bir aralıkta bir sayı dizimiz var, sayılar tekrarlanabilir, bu dizi sınırlara bölünerek segmentlere ayrılır. Sınırlar farklı algoritmalar tarafından oluşturulur, kural olarak sınırlar eşit değildir, bu nedenle sayı dizisinin farklı yöntemlerle kesildiği ve her aralığın farklı bir boyutu olduğu ortaya çıkıyor. Ayrıca, bu tür her segment üç kriterle değerlendirildi, her kriterin kendi sınırı vardır, gözlemlenmezse aralığın bir parçası hariç tutulur. Sonuç olarak, bu içeriğin bir tablosunu alıyoruz.

i - aralığın seri numarası;

S - aralığın başlangıcının sınırı;

F - menzil sonu limiti;

%R - kriter No. 1;

%dP - kriter No. 2;

%K_SCO - kriter #3;

K_Svod - tüm kriterlerin özet puanı.

Aşağıdaki şekil parçaların (segmentlerin) bir düzleme nasıl yerleştirilebileceğini göstermektedir:

Segmentlerin yanında 3 renk kene - soruna olası bir çözüm.

Algoritma, koşulun sağlanacağı şekilde sorunu çözmek için farklı kombinasyonlar sağlamalıdır:

1. Segmentler, aralıkları geçmeden seçilir (S>=A && F<B);

2. Mevcut olanlardan bir segment daha eklemek mümkün değildir - yani. seçilen ve mevcut seçeneklere dayalı olarak belirli bir tamlık ve maksimum yoğunluk;

3. Segmentlerin sırası sıralanır - aynı kombinasyonları hariç tutmak için;

4. Kombinasyonları azaltmak ve en iyi göstergelerin önceliğini korumak için K_Svod'a göre ilk %30'dan en iyi segmentlerden en az birini kullanın.

İdeal olarak, kalite değerlendirmesi K_Svod açısından tüm segmentlerin toplamını maksimize etmelidir, ancak boşluk/boşluk dolgusunu tahmin etmek için biraz düzeltilmesi gerekebilir.

Yanlış terminoloji kullanmış olabilirim ve işim için uzun süredir hazır bir çözüm var - yargılama - aydınlatın.

 
Aleksey Vyazmikin :


1) K_Svod - tüm kriterlerin özet puanı.

2) Aşağıdaki şekil parçaların (segmentlerin) bir düzleme nasıl yerleştirilebileceğini göstermektedir:

3) Segmentler, aralıkları geçmeden seçilir (S>=A && F<B);

1) nedir? neden xx?

2) doğru çözümün ve yanlışın ne olduğunu bir resimle daha iyi gösterin

3) "A" ve "B" nedir?

4) ayrıca veri tablosunun bir "düzenini" yapın ve tatmin edici bir çözüm olarak ne görmek istediğinizi gösterin
 
Muhtemelen grafik teorisi açısından çözüldü. Grafiğin köşeleri - segmentler, grafiğin okları - her köşeyi olası tüm sonraki (en yakın kabul edilebilir segmentler) ile birleştirir. Her köşe ve ok ağırlıklarla işaretlenir ve her yolun ağırlığının hesaplandığı bir kural belirlenir. Grafikte en uygun yolu bulmak için bazı algoritmalar uygulanır. Konuyu daha ayrıntılı incelemeye hazır değilim)
 
mytarmailS :

1) nedir? neden xx?

2) doğru çözümün ve yanlışın ne olduğunu bir resimle daha iyi gösterin

3) "A" ve "B" nedir?

4) ayrıca veri tablosunun bir "düzenini" yapın ve tatmin edici bir çözüm olarak ne görmek istediğinizi gösterin

1. Bu, her 3 tahminin de türevidir, x henüz ağırlıklara karar vermemiş olmamdan - bu zorunlu değildir.

2. Doğru çözüm, boşluğu segmentlerle doldurmaktır (segmentler arasında olası bir doldurulmamış boşluk olan bir çizgi) - yukarıdaki şekilde, olası 3 çözümün her biri için renkleri işaretledim. Ek buluşsal yöntemler hakkında düşünebilirsiniz, diyelim ki tüm segmentlerin seçilen aralığının toplamı mümkün olduğunca büyüktür, ancak toplama ek olarak K_Svod göstergesi de önemlidir.

3. Bu segment içindeki sayıların değeridir, A1>=S1 && A1<F1 && F1<S2 yazmak daha doğru olur.

4. Çözüm, indeksli bir dizi olacaktır. Ya ben soruyu anlamadım Algoritma nasıl daha iyi yapılır, bilmiyorum.

 
Aleksey Nikolayev :
Muhtemelen grafik teorisi açısından çözüldü. Grafiğin köşeleri - segmentler, grafiğin okları - her köşeyi olası tüm sonraki (en yakın kabul edilebilir segmentler) ile birleştirir. Her köşe ve ok ağırlıklarla işaretlenir ve her yolun ağırlığının hesaplandığı bir kural belirlenir. Grafikte en uygun yolu bulmak için bazı algoritmalar uygulanır. Konuyu daha ayrıntılı incelemeye hazır değilim)

Fikir için teşekkürler, bence bir seçenek olarak, her i indeksinin tepesinden bir dizi oluşturmaya başlayabilir ve ardından ortaya çıkan kombinasyonları değerlendirebilirsiniz. Farklı kombinasyonlar elde etmek için sadece bir segment seçim kriterine veya birkaç kritere ihtiyacınız var. Veya kriterleri rastgele seçin .... henüz net değil.

 
Aleksey Vyazmikin :

1. Bu, her 3 tahminin de türevidir, x henüz ağırlıklara karar vermemiş olmamdan - bu zorunlu değildir.

2. Doğru çözüm, boşluğu segmentlerle doldurmaktır (segmentler arasında olası bir doldurulmamış boşluk olan bir çizgi) - yukarıdaki şekilde, olası 3 çözümün her biri için renkleri işaretledim. Ek buluşsal yöntemler hakkında düşünebilirsiniz, diyelim ki tüm segmentlerin seçilen aralığının toplamı mümkün olduğunca büyüktür, ancak toplama ek olarak K_Svod göstergesi de önemlidir.

3. Bu segment içindeki sayıların değeridir, A1>=S1 && A1<F1 && F1<S2 yazmak daha doğru olur.

4. Çözüm, indeksli bir dizi olacaktır. Ya ben soruyu anlamadım Algoritma nasıl daha iyi yapılır, bilmiyorum.

hala anlamadım

 
Aleksey Vyazmikin :

Fikir için teşekkürler, bence bir seçenek olarak, her i indeksinin tepesinden bir dizi oluşturmaya başlayabilir ve ardından ortaya çıkan kombinasyonları değerlendirebilirsiniz. Farklı kombinasyonlar elde etmek için sadece bir segment seçim kriterine veya birkaç kritere ihtiyacınız var. Veya kriterleri rastgele seçin .... henüz net değil.

Ancak onay işaretleri nerede, segmentin bu onay işaretine ait olduğuna dair bir tür ölçütleri var mı?
Aslında, üç onay işaretiniz var. Mavi kırmızı. Yeşil.
Yani, bu örnekte üç tanımlayıcı.
Bu tanımlayıcıları bir şekilde atarsanız, bunlar üç ana dizide birleştirilebilir.
Tanımlayıcıya göre, ortaya çıkan segmentin boyutunu alırız,
tanımlayıcı ile ana alıcı diziyi belirler ve kapasitesini bu boyuta kadar artırırız,
kimliğe göre   dizinin sonuna bir segment ekleyin.
Yani segmentin bu onay işaretine (tanımlayıcı) ait olduğunu bir kriter olarak tanımlamak gerekir.

 
mytarmailS :

hala anlamadım

Lütfen anlamadığınız şeyi açıklayın - başka bir deyişle açıklamaya çalışacağım.

 
Roman :

Ancak onay işaretleri nerede, segmentin bu onay işaretine ait olduğuna dair bir tür ölçütleri var mı?
Aslında, üç onay işaretiniz var. Mavi kırmızı. Yeşil.
Yani, bu örnekte üç tanımlayıcı.
Bu tanımlayıcıları bir şekilde atarsanız, bunlar üç ana dizide birleştirilebilir.
Tanımlayıcıya göre, ortaya çıkan segmentin boyutunu alırız,
tanımlayıcı ile ana alıcı diziyi belirler ve kapasitesini bu boyuta kadar artırırız,
kimliğe göre   dizinin sonuna bir segment ekleyin.
Yani segmentin bu onay işaretine (tanımlayıcı) ait olduğunu bir kriter olarak tanımlamak gerekir.

Parçalar çizdim, sonra kombinasyonlarının bir varyantını göstermenin gerekli olacağını düşündüm - kesişmeyen ve toplamda geniş bir alanı kaplayan kombinasyonlara baktım. Lütfen bazı segmentlerin iki onay işareti olduğunu unutmayın; bu, segmentin birden fazla kombinasyonda olabileceği anlamına gelir.

Onlar. veri işleme başlamadan önce hiçbir tanımlayıcı yoktur.
 
Aleksey Vyazmikin :

Parçalar çizdim, sonra kombinasyonlarının bir varyantını göstermenin gerekli olacağını düşündüm - kesişmeyen ve toplamda geniş bir alanı kaplayan kombinasyonlara baktım. Lütfen bazı segmentlerin iki onay işareti olduğunu unutmayın; bu, segmentin birden fazla kombinasyonda olabileceği anlamına gelir.

Onlar. veri işleme başlamadan önce hiçbir tanımlayıcı yoktur.

Belki de algoritmanıza bağlı olarak, bazı kriterlere göre her bir segmenti tanımlayabilir ve bir tanımlayıcı atayabilirsiniz.
Ve bir segmentin birden fazla kombinasyonda olabilmesi, ana diziye yeniden eklenmesi gerekip gerekmediğine bağlıdır.
Üçlü veya koşullu operatörler bir şekilde mantığı yendi.

 
Roman :

Belki de algoritmanıza bağlı olarak, bazı kriterlere göre her segmenti tanımlayabilir ve bir tanımlayıcı atayabilirsiniz.
Ve bir segmentin birden fazla kombinasyonda olabilmesi, ana diziye yeniden eklenmesi gerekip gerekmediğine bağlıdır.
Üçlü veya koşullu operatörler bir şekilde mantığı yendi.

Bu yüzden devam edecek bir algoritma yok :) Her segment bir seri numarası ile tanımlanır ve koordinatlar (X ekseni boyunca) hakkında bilgi ve bu koordinatlar üzerinde bir tür fayda değerlendirmesine sahiptir.

Şimdiye kadar sadece bir fikir ortaya çıktı - ilkinden en yakın segmenti seçmek. Belki bu şekilde en yakın 3 tanesini seçebilirsiniz, segment sayısına bağlı olarak kombinasyon sayısı artacaktır.