Bob Satış


15

Bu soruyu bir süre önce Stack Overflow'da sordum: Sorun: Bob'un satışı . Birisi de soruyu buraya göndermeyi önerdi.

Birisi zaten bu sorunla ilgili bir soru sordu - Verilen kardinalitenin minimum ağırlık alt ormanı - ama anladığım kadarıyla sorunumda bana yardımcı olmuyor. StackOverflow'daki en yüksek cevabı da incelemeye değer.

İşte StackOverflow sorumun kelimesi kelimesine kopyası. Muhtemelen bu site için yetersiz bir şekilde formüle edilmiştir (heck, sadece burada soran yetersiz eğitimsiz hissediyorum), bu yüzden düzenlemek için çekinmeyin:


Not: Bu, bir SWF dosyasındaki kayıtların siparişi ile ilgili gerçek hayat probleminin soyut bir şekilde yeniden yazılmasıdır. Bir çözüm, açık kaynaklı bir uygulamayı geliştirmeme yardımcı olacaktır.

Bob'un bir mağazası var ve bir satış yapmak istiyor. Mağazasında bir dizi ürün var ve stoktaki her bir ürünün belirli bir tamsayı miktarına sahip. Ayrıca, rafa monte edilmiş fiyat etiketlerine (ürün sayısı kadar) sahiptir ve fiyatlar zaten üzerlerinde yazılıdır. Herhangi bir ürüne herhangi bir fiyat etiketi koyabilir (bu ürünün tüm stoğu için bir ürün için birim fiyat), ancak bazı ürünlerin ek bir kısıtlaması vardır - bu tür ürünler diğer belirli bir üründen daha ucuz olmayabilir.

Bob'un tüm mallarının toplam maliyeti mümkün olduğunca düşük olacak şekilde fiyat etiketlerini nasıl ayarlayacağınızı bulmalısınız. Toplam maliyet, her bir ürünün atanmış fiyat etiketinin, stoktaki ürünün miktarıyla çarpımıdır.


Verilen:

  • N - ürün ve fiyat etiketi sayısı
  • S i , 0≤ i <N - i endeksine sahip ürün stoktaki miktar (tamsayı)
  • P j , 0≤ j <N - j endeksi ile fiyat etiketindeki fiyat (tamsayı)
  • K - ek kısıtlama çifti sayısı
  • A k , B k , 0≤ k <K - ek kısıtlama için ürün endeksleri
    • Herhangi bir ürün endeksi B'de en fazla bir kez görünebilir. Bu nedenle, bu bitişiklik listesi tarafından oluşturulan grafik aslında bir dizi yönlendirilmiş ağaçtır.

Program şunları bulmalıdır:

  • M i , 0≤ i <N - fiyat etiketi endeksine ürün dizinden haritalama (P M i ürünün fiyatı ise i )

Koşulları karşılamak için:

  1. P M A k ≤ P M B k , 0≤ k <K için
  2. Σ (S i × P M i ) için 0≤ i <N minimum

İlk koşul için değilse, çözümün etiketleri fiyat ve ürün miktarına göre sıralaması ve her ikisini de doğrudan eşleştirmesi olacağını unutmayın.

Giriş için tipik değerler N, K <10000 olacaktır. Gerçek hayat probleminde sadece birkaç farklı fiyat etiketi vardır (1,2,3,4).


En basit çözümlerin (topolojik sıralama dahil) neden işe yaramadığına dair bir örnek:

$$

En uygun çözüm:

Price, $   1  2  3  4  5  6  7  8  9 10
Qty        9  8  7  6  1 10  5  4  3  2

$


Erm, altta örnek için önceden biçimlendirilmiş blok karıştırıldı ve nasıl düzeltileceğinden emin değilim (StackOverflow'un Markdown sözdizimi ve <pre> etiketleri burada çalışmıyor gibi görünüyor).
Vladimir Panteleev

Önceden biçimlendirilmiş blok için biçimlendirme, dolar işaretleri TeX sınırlayıcı olarak kabul edildiğinden tanınmadı (TeX işaretlemesinin önceden biçimlendirilmiş blok için işaretlemeyi neden bozduğunu bilmememe rağmen). Çünkü dolar işaretleri kaçmak için “doğru” yol olarak görünmüyor , ben bir ad-hoc şekilde düzelttim.
Tsuyoshi Ito

Soru nedir? optimal bir çözüm bulmak için (verimli) bir algoritma ister misiniz? sertlik? yaklaşık çözüm?
Marcos Villagra

1
@Ito, teşekkürler. @Marcos - Üzgünüm, bu problemi çözmek için bir algoritma arıyorum, umarım yeterince hızlı, böylece projeme uygulayabilirim. Yaklaşık bir çözüm için birçok fikir vardır, bu yüzden kesin bir çözüm tercih edilecektir.
Vladimir Panteleev

1
Değer için, ilgili soru ( cstheory.stackexchange.com/q/4904/751 ) fiyatların k olanlar ve N N k sıfırlardan oluştuğu durumu düşünüyor.
mhum

Yanıtlar:


6

Bunu Stack Overflow'daki orijinal sorunuza da gönderdim:


Genel durum için problem NP-tamamlandı. Bu, 3 bölümlü bir azalma ile gösterilebilir (bu, bin ambalajının hala güçlü bir NP-komple versiyonudur).

Let w 1 , ..., w , n 3-bölme, örneğin nesnelerin ağırlıklarının fazla olması, izin b kutu boyutu ve olmak k = / 3 N doldurulması için izin verilen bölümlerin sayısının. Bu nedenle, nesneler bölme başına tam olarak 3 nesne olacak şekilde bölünebiliyorsa 3 bölümlüdür.

Azaltılması için, N = set kb ve her bin ile temsil edilir b aynı fiyat fiyatı etiketleri (P düşünmek i her artan b inci etiket). Let t ı , 1≤ ik , karşı gelen etiket fiyatı olması i inci bin. Her biri için ağırlık i biz bir ürün G sahip j miktar ağırlık i + 1 (kök ürün, bu çağrı sağlar w i ) ve başka bir i 1 - G 'den daha ucuz olması gerekmektedir miktarda 1 ürünlerine j (bunlara izinli ürünler deyin).

İçin t ı (2b + 1) = i , 1≤ ik , 3-bölümü olup olmadığını ve Bob satmak için sadece 2b Σ 1≤ ik t i :

  • 3 bölme için bir çözüm varsa , aynı bölmeye atanan w i , w j , w l nesnelerine karşılık gelen tüm b ürünleri , kısıtlamaları ihlal etmeden aynı fiyatla etiketlenebilir. Bu nedenle, çözelti maliyeti vardır 2b Σ 1≤ ik t ı (fiyat ile ürün toplam miktarına itibaren t i olan 2b ).
  • Bob's Sale'in en uygun çözümünü düşünün. İlk olarak, herhangi bir çözümde 3'ten fazla kök ürününün aynı fiyat etiketini paylaştığını, "çok fazla" olan her bir kök ürün için 3'ten az kök ürüne yapışan daha ucuz bir fiyat etiketi bulunduğunu gözlemleyin. Bu, fiyat etiketi başına (varsa) tam olarak 3 kök ürün olması durumunda herhangi bir çözümden daha kötüdür.
    Şimdi Bob's Sale'in fiyat başına 3 kök etiketi olan bir çözümü olabilir, ancak izinli ürünleri aynı fiyat etiketlerini (kutuların akışı bitti) giymez. En pahalı fiyat etiketi etiketlerini daha ucuz etiketli bir bırakma ürününe sahip olan w i'nin kök ürününü söyleyin . Bu, 3 kök etiketin w i , w j , w len pahalı fiyat ile etiketlenmiş kadar b eklemeyin . Bu nedenle, bu fiyatla etiketlenen ürünlerin toplam maliyeti en az 2b + 1'dir .
    Dolayısıyla, böyle bir çözümün maliyeti t k (2b + 1) + başka bir atama maliyetine sahiptir. Mevcut bir 3 bölüm için en uygun maliyet 2b Σ 1≤ ik t i olduğundan, sadece dikkate alınan durumun daha kötü olduğunu göstermeliyiz. Bu, t k > 2b Σ 1≤ ik-1 t i için geçerlidir ( şimdi toplamda k-1 olduğuna dikkat edin ). Ayar t i= (2b + 1) i , 1≤ ik , durum böyledir. Bu aynı zamanda en pahalı fiyat etiketi "kötü" olanı, ancak başka bir etiket değilse de tutar.

Yani, bu yıkıcı kısımdır ;-) Ancak, farklı fiyat etiketlerinin sayısı sabitse, polinom zamanında çözmek için dinamik programlamayı kullanabilirsiniz.


7

Bu Gero'nun cevabının bir devamıdır . Fikir, yapısını güçlü NP sertliği gösterecek şekilde değiştirmektir.

tben=(2b+1)bentben=benP=2bΣ1benktben

wben-1PP

Bu nedenle, talep edilen ödülü elde etmek mümkündür, ancak tüm yaprak ürünleri kök ürünleri ile aynı ödüle sahipse, yani 3 bölümlü olduğu anlamına gelir.

kf(k)nÖ(1)nÖ(k)


Ayrıca orijinal yığın taşması sorusuna çapraz gönderilir.


İki cevabı kabul edemiyorum, bu yüzden içgörü için teşekkür etmem gerek :)
Vladimir Panteleev

0

Bu bir oyun teorisi sorusuna benziyor. Bu durumda, çok basit bir kaba kuvvet çözümü:

Kısıtlamaların formun bazı değişmezlerini temsil ettiğini varsayalım

S-> AkSBk | AkBkS | SAkBk

Çözüm, önce kısıtlamaları ve sonra öğeleri eklemeye devam etmektir. Örneğin: n = 10 diyelim ve A1B1 ve A2B2 olmak üzere 2 kısıtlama var. Sonra kök düğümünde üç çocuk vardır (seviye 2). Bu 3 düğümün her birinde 7 çocuk seviye 3, her birinde 21 çocuk 4 seviye 4 vb. Bulunacaktır. Esasen olası tüm kombinasyonlardan geçiyorsunuz.

                A1B1 - Seviye 1 
               / | \
              / | \
             / | \
            / | \
    A1A2B2A1 A1B1A2B2 A2B2A1B1 - Seviye 2

ve ağacı büyüt. Başlangıçta korkunç bir çözüm gibi görünse de, bazı sezgisel tarama ve budama kullanarak çok pahalı yaprakları kovalamayı bırakabileceğinizi hissediyorum ...

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.