Xero1991 Δημοσ. 22 Μαΐου 2014 Δημοσ. 22 Μαΐου 2014 Καλησπέρα. Θέλω τα φώτα σας για ένα θέμα που έχω με το πρόβλημα του σάκου και την αναδρομή. Με βάση τα δεδομένα αυτής της σελίδας και ψάξιμο στο net έχω έναν αλγόριθμο σε Java που βγάζει το τελικό αποτέλεσμα(18) μέσω αναδρομής. Θα ήθελα αλλάζοντας κάπως τον κώδικα να μπορώ να φτιάχνω τον 2d πίνακα( matrix) όπως τον έχει το παράδειγμα και μετά να παίρνω από εκεί τον κάτω δεξιά αριθμό. Any ideas? public class test { static int N = 6; // number of items static int W = 9; // maximum weight of knapsack static int[] values = new int[] { 7, 4, 8, 6, 2, 5 }; static int[] weights = new int[] { 2, 3, 5, 4, 2, 3 }; static int[][] matrix = new int[N + 1][W + 1]; private static int knapsack(int i, int W) { if (i < 0) { return 0; } if (weights[i] > W) { return knapsack(i - 1, W); } else { return Math.max(knapsack(i - 1, W), knapsack(i - 1, W - weights[i]) + values[i]); } } public static void main(String[] args) { System.out.println(knapsack(N - 1, W)); } }
georgemarios Δημοσ. 23 Μαΐου 2014 Δημοσ. 23 Μαΐου 2014 Λιγο κάτω απο τον πινακα, εχει τον αλγοριθμο με τον οποιο φτιαχνεται. Αν καταλαβαινεις τον αλγοριθμο μπορεις να τον κανεις κωδικα. Hint: η μεθοδος σου, βασει το input σου, ουσιαστικα υπολογιζει την τελευταια (κατω-δεξια) τιμη του πινακα. Με τη καταλληλη λουπα μπορεις να βρεις και τις αλλες τιμες.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα