reklama

Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Ondřej Vaniš

Stran: 1 ... 5 6 [7]
91
Vývoj / Re: Optimální algoritmus výpočtu
« kdy: 30. 09. 2010, 09:04:05 »
Ano to jsi popsal naprosto přesně.
Ale jakým způsobem dokážeš vypočítat tuto rovnici?
a*bal1+b*bal2+c*bal3+d*bal4=PozadovanyPocet

Kromě dosazování za a,b,c,d a zjištování jestli se rovna pozadovanemu poctu jsem nenasel.
Nebo mi neco uniklo?

92
Vývoj / Re: Optimální algoritmus výpočtu
« kdy: 30. 09. 2010, 00:46:10 »
Citace
Algoritmus bude postupně hledat ideální nákupy pro k ks zboží, kde k=1 až 78. Pro každé k si ideální nákup zapamatuje.
A jakým způsobem zjistíš že je nákup ideální. To je práve základní zadání úlohy.
Ideálním nákupem je myslíš co? Kombinaci různých balení která má množství rovno k?

93
Vývoj / Re: Optimální algoritmus výpočtu
« kdy: 29. 09. 2010, 18:24:38 »
Zadání:
V internetovém obchode je možno zakoupit zboží v různých baleních za různou cenu.
např.:
bal1 (1ks, 20kč/ks)
bal2 (5ks, 18kč/ks)
bal3 (10ks, 19kč/ks)
bal4 (50ks, 17kč/ks)

Zákazník požaduje např 78ks zboží a program by měl optimální počty balení vložit do košíku, aby to pro zázaníka bylo cenově nejvýhodnější.
Dle mého názoru je to jednoduché, a o žádný NP-úplný problém se nejedná:

Algoritmus bude postupně hledat ideální nákupy pro k ks zboží, kde k=1 až 78. Pro každé k si ideální nákup zapamatuje.
Známe-li ideální nákupy pro 1 ks až např. 50 ks ( I(1), I(2), I(3)... jsou ideální nákupy), zjistíme ideální nákup pro 51 ks jako nejlevnější z těchto nákupů:
1] jednotlivá balení (nákup je tvořen jedinou položkou, tedy jedním balením (dle zadání je to 1ks nebo 5ks nebo 10ks nebo 50ks)
2] spojení dvou ideálních nákupů  I(50) a I(1); dále I(49) a I(2); dále I(47) a I(3) atd.

(Důkaz: rozložíme-li ideální nákup pro k ks zboží na jakékoli dvě skupiny o počtech zboží k1, k2, kde k1+k2=k, jsou příslušné dva nákupy pro k1 a k2 také ideální. Nelze-li nákup rozložit, jedná se o nákup typu 1] )
V tomto případě je to jednoduché ale zkuste to vypočítat např pro 1000ks to už je jiná.
Pak se dostaneme k tomuto a*k1+b*k2+c*k3+d*k4=k.
Takže opět NP-úplný problém :-/

94
Vývoj / Re: Optimální algoritmus výpočtu.
« kdy: 17. 08. 2010, 21:36:33 »
Typicky laboratorni syndrom :-D Vazne veris, ze muze v realnem svete existovat/prodavat se baleni 1 ks za 100 Kc, kdyz baleni 7 ks stoji 70 Kc?
Jinak problem muze nastat i v realu v mnohem mensich radech, ale jenom tehdy, kdyz uspora dosazena koupi nejvyhodnejsiho baleni je nizsi, nez rozdil ceny baleni potrebneho pro dosazeni pozadovaneho poctu a dalsich vyhodnych baleni, ktere jsme nevzali.

Výše uvedený příklad od Adama:
bal1 (1ks, 12kč/ks)
bal2 (5ks, 8kč/ks)
bal3 (2ks, 8,50kč/ks)

Pri koupi bal2 je uspora proti bal3 5 * 0,50 = 2,50 a 2,50 je mensi, nez 12 - 8,50 = 3,50. V 99% procentech pripadu vyjde, ze uspora je vyssi a nebudes muset resit dalsi moznosti, takze takovy pristup by mel byt vypocetne mene narocny, nez zkouset vsechno se vsim, tedy za predpokladu, ze pocet moznych baleni je vyssi, nez 3 v nasem pripade ;-)
Samozrejme vim ze tato situace v realu by nastat nemela. jen jsem zvolil takto vysoke cislo kvuli nazornosti.
Stale nechavam puvodni jednodussi algorytmus zalozeny na celociselnem deleni ktery pro 99% situaci bude optimalni. jen jsem zde chtel zjistit zda neexistuje 100% metoda ktera neni vypocetne narocna, coz asi neni.

95
Vývoj / Re: Optimální algoritmus výpočtu.
« kdy: 16. 08. 2010, 15:29:24 »
Pro zajímavost zde je kód který používám
Kód: [Vybrat]
class Variation {
var $pieces_arr=array();
var $prices_arr=array();
var $sum_count=0;
var $sum_price=0;

function Variation() {

}

function setPieces($type, $count, $price){
$this->pieces_arr[$type] = $count;
$this->prices_arr[$type] = $count*$price;
$this->sum_count = array_sum($this->pieces_arr);
$this->sum_price = array_sum($this->prices_arr);
}
}

class VariationSolver {
var $itemsArr = array();
var $reqCount = 0;
var $BestVar;

function VariationSolver() {
$this->BestVar = null;
}

function setRequestedCount($count){
$this->reqCount = $count;
}

function addVariationItem($type, $piece, $price){
$this->itemsArr[] = array($type, $piece, $price);
}

function compute($level, $VarObj){
$max_level = sizeof($this->itemsArr)-1;
$increment = $this->itemsArr[$level][1];
for ($i = 0; $i==0 || ($i <= $this->reqCount && ($VarObj->sum_count+$increment)<=$this->reqCount) ; $i=$i+$increment) {
$VarObj->setPieces($this->itemsArr[$level][0], $i, $this->itemsArr[$level][2]);

if ($max_level>$level){
$this->compute($level+1, $VarObj);
}
else {
if ($VarObj->sum_count==$this->reqCount){
if ($this->BestVar == null || $VarObj->sum_price < $this->BestVar->sum_price){
$this->BestVar = $VarObj;
}
}
}
}
}

function getBestVar(){ //slow
$this->BestVar = null;
if (sizeof($this->itemsArr)>0){
$this->compute(0, new Variation());
}
return $this->BestVar;
}
}

//==== Vypocet ====
$VS = new VariationSolver();
$VS->setRequestedCount(100);
$VS->addVariationItem("N",1,100);    // typ baleni, pocet kusu v baleni, cena za kus
$VS->addVariationItem("B",2,95);     // typ baleni, pocet kusu v baleni, cena za kus
$VS->addVariationItem("A1",5,90);    // typ baleni, pocet kusu v baleni, cena za kus
$VS->addVariationItem("D",10,98);    // typ baleni, pocet kusu v baleni, cena za kus
$VS->addVariationItem("IC1",20,81);  // typ baleni, pocet kusu v baleni, cena za kus
$VS->addVariationItem("IC2",50,80);  // typ baleni, pocet kusu v baleni, cena za kus

print "<pre>";
print_r( $VS->getBestVar() );
print "</pre>";

96
Vývoj / Re: Optimální algoritmus výpočtu.
« kdy: 16. 08. 2010, 12:53:33 »
Citace
Grr - já to nedopsal:
1) Najít balení s co nejmenším počtem kusů, jehož cena za kus je menší, než průměrná  dle prvního kroku a zopakovat celý algoritmus s tím, že začneš od tohoto balení.
2) To celé dokola, dokud existuje balení s cenou za kus menší než průměr z předchozího kroku a zároveň s počtem kusů menším, než požadovaný.
Zkusím o tom ještě zauvažovat. Možná to nebude úplně 100%ní ale lepší než metoda celočíselného dělení a rychlejší než rekurzivní zkoušení kombinací.

97
Vývoj / Re: Optimální algoritmus výpočtu.
« kdy: 16. 08. 2010, 12:51:11 »
Tak to vypadá že je to podobná úloha této.
http://cs.wikipedia.org/wiki/Probl%C3%A9m_batohu

takže žádné triviální řešení asi nebude  :-\

98
Vývoj / Re: Optimální algoritmus výpočtu.
« kdy: 16. 08. 2010, 12:34:31 »
Citace
Grr. Tohle je trochu od boku:
Po ukončení algoritmu dle předchozího spočítat průměrnou cenu za kus (280/21 = 13,333) a najít balení s co nejmenším počtem kusů (zároveň menším, než požadovaný), jehož cena za kus je menší, než ten průměr. A tak pořád dokola, dokud existuje balení s menším počtem kusů než požadovaný a zároveň s cenou za kus menší než průměrná cena vypočtená v předchozím kroku.
Takové balení samozřejmě nalézt jde ale co s ním pak. Jaké balení vyhodit z předchozího výpočtu a nahradit novým, výhodnějším??

99
Vývoj / Re: Optimální algoritmus výpočtu.
« kdy: 16. 08. 2010, 12:05:12 »
Co to zkusit takhle :

Požadovaný počet kusů podělíš postupně celočíselně počtem kusů v jednotlivých baleních, (od nejlevnějšího po nejdražší), do dalšího kroku vstupuje vždy zbytek z předchozího dělení. Algoritmus končí ve chíli, kdy je zbytek 0.

78/50 = 1, zbytek 28
28/5 = 5, zbytek 3
3/10 = 0, zbytek 3
3/1 = 3, zbytek 0
Takto to mám uděláno teď ale ve specifických případech to nefunguje.
např.
bal1 (1ks, 100kč/ks)
bal2 (7ks, 10kč/ks)
bal3 (20ks 9kč/ks)
a zákazník požaduje 21ks

dle tohoto by vyšlo 1*bal3 + 1*bal1 výsledná cena 280kč
správně by mělo být 3*bal2 výsledná cena 210kč

100
Vývoj / Re: Optimální algoritmus výpočtu.
« kdy: 16. 08. 2010, 11:57:46 »
Ahoj,

chcelo by to specifikaciu nejakeho prostredia/jazyku v ktorom to ma byt vytvorene, no kazdopadne skus prevod z arabskych cislic do rimskych.
google: decimal to roman algorithm
Melo by to byt pro PHP.
A převod z arabskych cislic do rimskych neni stejna uloha ktera je popsana.

101
Vývoj / Optimální algoritmus výpočtu
« kdy: 16. 08. 2010, 11:30:04 »
Zdravím, potřeboval bych pomoci z vytvořením optimálního algoritmu.

Zadání:
V internetovém obchode je možno zakoupit zboží v různých baleních za různou cenu.
např.:

bal1 (1ks, 20kč/ks)
bal2 (5ks, 18kč/ks)
bal3 (10ks, 19kč/ks)
bal4 (50ks, 17kč/ks)

Zákazník požaduje např 78ks zboží a program by měl optimální počty balení vložit do košíku, aby to pro zázaníka bylo cenově nejvýhodnější.
Takže v tomto případě 1*bal4, 5*bal2, 3*bal1.
Napadá vás jiné řešení než zkoušet všechny možné kombinace a poté vyhodnotit která je nejvýhodnější. Je to časově celkem náročné.
Díky.

102
Sítě / Re: Samba: název domény neexistuje nebo je neplatný
« kdy: 04. 08. 2010, 10:38:47 »
Napada me jeste ze pokud jste upgradoval mezi verzemi 2 a 3 tak tam se změnilo defaultní backend pro ukládání hesel u verze 2 to bylo smbpasswd u verze 3 je to tdbsam.
Take jsem s tim dost zapasil. Mozna je to i vas pripad.
vice info
http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/upgrading-to-3.0.html
http://linuxpoison.blogspot.com/2009/11/how-to-convert-smbpasswd-to-tdbsam-on.html

103
Server / Re: Web server a dvě různé konektivity
« kdy: 26. 05. 2010, 10:41:19 »
Na toto pripojeni musis nastavit policy based routing.

V tomto pripade to znamena z epokud prijde pozadavek z eth0 musi se take odpoved routovat pres eth0 a to stejne pro eth1
Ja osobne to pouzivam takto. Je to sice na Gentoo ale mohlo by te to postrcit spravnym smerem.

Kód: [Vybrat]
config_eth0=( "192.168.168.78 netmask 255.255.255.0" )
routes_eth0=( "default via 192.168.168.1" )

config_eth1=( "10.10.10.110 netmask 255.255.255.0" )
routes_eth1=(
        "127.0.0.0/8 dev lo table upc"
        "10.10.10.0/24 via 10.10.10.110 dev eth1 table upc"
        "default via 10.10.10.1 table upc"
)

postup() {
    if [ ${IFACE} == "eth1" ] ; then
        einfo "Adding IP policy routing rules"
        ip rule add from 10.10.10.110 table upc

        # Flush the route cache
        ip route flush cache dev "${IFACE}"
    fi
}

postdown() {
    if [ ${IFACE} == "eth1" ] ; then
        einfo "Removing IP policy routing rules"
        ip rule del from 10.10.10.110 table upc

        # Flush the route cache
        ip route flush cache dev "${IFACE}"
    fi
    return 0
}

Stran: 1 ... 5 6 [7]

reklama