Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mendapatkan Item Khusus yang Disertakan dalam Penyelesaian Optimum Algoritma Knapsack?

Bagaimanakah Saya Boleh Mendapatkan Item Khusus yang Disertakan dalam Penyelesaian Optimum Algoritma Knapsack?

Barbara Streisand
Lepaskan: 2025-01-01 12:03:11
asal
148 orang telah melayarinya

How Can I Retrieve the Specific Items Included in the Optimal Solution of the Knapsack Algorithm?

Mendapatkan Elemen daripada Algoritma Knapsack

Algoritma Knapsack dengan cekap menentukan nilai optimum yang boleh dicapai daripada set item dengan kekangan. Walau bagaimanapun, ia hanya memberikan jumlah nilai tanpa menyatakan item mana yang menyumbang kepadanya.

Untuk mendapatkan elemen khusus yang disertakan dalam penyelesaian optimum, ikuti langkah-langkah ini dalam algoritma:

for (size_t j = 1; j <= n; j++)
{
    for ( int w = 1; w <= W; w++)
    {
        ...
        if (dp[w][j] != dp[w][j-1] && dp[w][j] == dp[w - items[j-1].getWeight()][j-1] + items[j-1].getWeight())
        {
            // Mark element 'j' as included in the solution
        }
    }
}
Salin selepas log masuk

Ini step membandingkan nilai semasa dengan yang sebelumnya, mengenal pasti apabila item telah ditambahkan pada penyelesaian. Elemen yang dipilih membuat perbezaan antara nilai berturutan bersamaan dengan beratnya.

Sebagai alternatif, selepas algoritma telah dilaksanakan, anda boleh melintasi matriks secara terbalik untuk menentukan item yang dipilih:

int line = W;
int i = n;
while (i > 0):
    if (dp[line][i] - dp[line - weight(i)][i-1] == item[i].getValue()):
        // Item 'i' is in the solution
        i--;
        line -= weight(i);
    else:
        i--;
Salin selepas log masuk

Pendekatan ini dengan cekap mendapatkan semula elemen yang menyumbang kepada penyelesaian optimum, memberikan pandangan yang lebih komprehensif tentang penyelesaian masalah.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Item Khusus yang Disertakan dalam Penyelesaian Optimum Algoritma Knapsack?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan