Je cherche un algorithme récursif pour partitionner un nombre en k parties.Algorithme de partition Java
Pour exemple:
P(5,2) > { {1,4},{2,3} }
P(7,2) > { {1,6},{2,5},{3,4} }
P(5,3) > { {1,1,3},{1,2,2} }
En Java, mais il peut être un autre langage.
Mon code actuellement
public static void partition(int n, int k) {
partition(n, k, " ");
}
public static void partition(int n, int max, String prefix) {
if (n == 0) {
System.out.println(prefix);
return;
}
for (int i = Math.min(max, n); i >= 1; i--) {
partition(n-i, i, prefix + " " + i);
}
}
et vous avez déjà essayé quoi? – nullpointer
Étape 1) prendre les facteurs premiers. Étape 2) appliquer le théorème binomial. Voir aussi [cette réponse] (http://stackoverflow.com/a/6999554/2071828). –
J'ai un algorithme de base comme celui-ci: partition publique vide statique (int n, int k) { partition (n, k, ""); } partition publique statique vide (int n, int max, préfixe de chaîne) { if (n == 0) { System.out.println (préfixe); retour; Pour (int i = Math.min (max, n); i> = 1; i--) { partition (n-i, i, préfixe + "" + i); } } – Shining