Böyle bir algoritma uygulamak nasıl?

0 Cevap php

Kutularının x vardır demek, her kutu her harf envanter 1 veya daha fazla olması ile harflerin AZ bir "envanter" içerir.

Şimdi aşağıdaki gerektiğini söylüyorlar:

  • 6 gibi
  • 2 Kahvaltılar
  • 1 C

Nasıl bana ihtiyacım harflerle sağlayabilir kutularının tüm olası kombinasyon / permutation bir listesini nasıl alabilirim?

Algoritması aynı zamanda benim gereksinimlerini karşılamak için kutuları kombinasyonunu üretmek gerekiyor. Örneğin: Kutu-1 sadece 4 Farklı vardır ve Kutu-2 1 A vardır ve Kutu-3 1 A var, ben 6 gibi 3 kutuları arasında yerine getirilebilir belirtmek için algoritmanın sonucu gerektiğini söylüyorlar.

Böyle bir problemin çözümü için temel mantık budur. Bunun için içine bakarak gereken herhangi bir özel algoritmalar var mı?

EDIT 1:

DCP öneri Per, burada benim girişimi PHP uygulama olduğunu bulunuyor:

$boxes = array(
    // box 1
    array(
        'A' => 6,
        'B' => 4,
        'C' => 10
    ),
    // box 2
    array(
        'A' => 8,
        'B' => 4,
        'C' => 2
    ),
    // box 3
    array(
        'A' => 1,
        'B' => 1,
        'C' => 0
    )
);

$n = count($boxes);

for ($mask = 0; $mask <= (1 << $n) - 1; $mask++)
{
    $tots = array();
    for ($i = 0; $i < $n; $i++)
    {
        if (((1 << $i) & $mask) != 0)
        {
            // this is a selected box for this mask, add the A's, B's etc. for this box to the total
            $tots[0] += $boxes[$i]['A'];
            $tots[1] += $boxes[$i]['B'];
            $tots[2] += $boxes[$i]['C'];
        }
        // check the tots array to see if it meets the letter requirements. If it does,
        // then this is a valid combination of boxes.
    }
}

0 Cevap