Sorun: Bob'un Satışı
Not: bu gerçek bir sorun, Flash Player sipariş kayıtları ile ilgili bir özet uygun sözcükler kullanmak. Bir çözüm bana açık kaynak kodlu bir uygulama geliştirmemize yardımcı olacaktır.
Bob bir mağaza var, ve bir satış yapmak istiyor. Onun mağaza ürün numarası taşır ve stokta her ürünün adet tam sayı belli bir miktar var. Ayrıca raf-monte fiyat etiketleri (ürün sayısı kadar) bir numara, fiyatlar zaten üzerlerinde. O yerde herhangi bir fiyat etiketi üzerinde herhangi bir ürün (üniter bir fiyata tek bir madde için, onun bütün stok ürün), ancak bazı ürünler var ek bir kısıtlama - böyle bir ürün olmayabilir daha ucuz belli bir diğer ürün.
Fiyat etiketleri, mümkün olduğu kadar düşük olduğunu, toplam maliyet gibi düzenlemek için nasıl bulmak gerekir. Toplam maliyet her ürünün atanan fiyat etiket stokta olan ürün miktarı ile çarpımı toplamına eşittir.
Verilen:
- N-ürün sayısı ve fiyat etiketleri
- S
ben, 0-No.ben&; N-indeksi ile ürünün stok miktarı ltben(integer) - P
j, 0-No.j&; N-fiyatı üzerinde fiyat endeksi ile etiket ltj(integer) - K & - ek kısıtlama çiftleri sayısı
- Bir
kB k, 0-No.k<K-ürün endeksleri ek kısıtlaması için - Herhangi bir ürün, endeks bir kez B. en çok bu Nedenle, bu grafik, bu bitişiklik listesi oluşturduğu aslında yönetmen ağaçları bir dizi görünebilir.
Programı bulmak gerekir:
- M
ben, 0-No.ben<N-Etiket fiyat endeksi (P . ürün dizinden eşleme ^alt>M benürünün fiyatıben)
Şartları karşılamak için:
- P
M Bir kNo. P M B k, 0-No. içink&; K) lt - K = (S
ben× P M ben) 0-No. içinben&; N minimal lt
İlk koşul için değil, çözüm sadece miktar fiyat ve ürün etiketleri sıralama ve doğrudan hem eşleştirme olacağını unutmayın.
Giriş için tipik değerler N,K&; 10000 lt olacak. Gerçek hayattaki sorun, sadece birkaç farklı fiyat etiketleri (1,2,3,4) vardır.
Burada en basit çözüm (topolojik sıralama dahil) çalışmaz neden bir örnek:
Fiyatları $10 ile $1 ile 10 ve 10 fiyat etiketleri ile miktarları 1 ile 10 öğe var. Tek bir şartım var: 10 miktar 1 öğe daha ucuz olmalı değil miktar madde.
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
$249 toplam maliyeti ile birlikte. Eğer ya aşırı yakın 1,10 çifti koyarsanız, toplam maliyeti daha yüksek olacaktır.
CEVAP
Sorun genel durum için NP-tamamlandı. Bu 3-Bölüm azalma bin paketleme hala güçlü NP-tam sürüm () gösterilebilir.
İzin verinw
Azaltılması için, N= kurdukkbve her bin tarafından temsil edilirbaynı fiyat fiyat etiketleri (P düşün
İçint
- 3-bölüm için bir çözüm, daha sonra ise oradabürün nesnelere karşılık gelenw
ben ,wj ,wl aynı bin atanan kısıtlamaları ihlal etmeden aynı fiyat ile etiketlenmiş olabilir. Böylece, çözümün bir maliyeti vardır2bF1 No.benNo.kt ben (fiyat ile ürünlerin toplam miktarı beritben 2b).
- Bob'un Satış optimal bir çözüm düşünün.
İlk izlediğimiz herhangi bir çözümü vardı daha 3 kök ürünlerinin payı aynı fiyat etiketi, her kök ürün bu "çok fazla" orada daha ucuz bir fiyat etiketi olan sopa üzerinde en az 3 kök ürünleri. Bu herhangi bir çözüm, tam 3 fiyat etiketi mevcut ise) başına kök ürün var daha da kötü.
Şimdi hala başı fiyatı 3 kök etiketleri ile Bob satıldığı bir çözüm olabilir, ama bırakın kendi ürünlerini aynı fiyat etiketleri (bidonları tür akış üzerinden) giymeyin. En pahalı fiyat bir kök ürün etiketleri etiket söylüyorlarwben daha ucuz etiketli bırakacak bir ürüne sahip. Bu 3 Etiketler kök anlamına gelirwben ,wj ,wl en pahalı fiyat ile etiketlenmiş eklemeyinb. Dolayısıyla, bu ürünlerin fiyatı ile etiketli toplam maliyeti en az2b 1.
Dolayısıyla, böyle bir çözüm maliyeti vardırtk(2b / 1) başka bir atama maliyeti. Bir mevcut için en uygun maliyetli beri 3-Bölüm2bF1 No.benNo.kt ben sadece kabul durum daha kötü olduğunu göstermek zorundayız. Bu durumdatkF 1 No.benNo.k-1t ben (bu notk-1toplamı). Ayartben = (2b / 1)ben, 1-No.benNo.kbu böyledir. Bu ise en pahalı fiyat etiketi "" bir, ama başka.kötü ise bu da tutar
Eğer farklı fiyat etiketleri sayısı sabit ise, bu yıkıcı bir parçasıdır ;-) Ancak, dinamik programlama polinom zaman çözmek için kullanabilirsiniz.
Hareketli ve kod satırları ufuk;'...
Böyle bir tablo'sorun ne android_...
Nasıl bir sorun NP tam olduğunu kanıtl...
Sorun giderme "alfabe" Yasadı...
Başka bir sorun yüzünden parça parça...