2016-04-13 13 views
0

Ich habe versucht, eine Variation des Change-Count-Problems (in Algorithmen), wo es erforderlich ist, um die Anzahl der verschiedenen Möglichkeiten zu finden, können Sie eine Menge ändern und nach viel Argumentation drehte ein Mathematikproblem zu sein. wenn da zum Beispiel die 50 Münzen, 20, 100, die Anzahl der Wege finden, 300Algorithmus zum Finden aller möglichen Lösungen für eine Gleichung

Das Problem zu ändern, ist eine Gleichung der Form

ax1 + bx2 + ... + kxn = y, a, b, ..., k and y all known and > 0 

Es ist erforderlich, alle möglichen Lösungen zu finden, die für die Menge der positiven ganzen Zahlen einschließlich 0. Eigentlich brauche ich nur die Anzahl der Lösungen. Ich dachte mir normalerweise selbst Algorithmen aus, aber ich bin mir nicht sicher, wie ich das angehen soll.

+2

Dies ist keine funktionale Programmierung, und Sie sollten dynamische Programmierung dafür verwenden. Ein ähnliches Problem: https://en.wikipedia.org/wiki/Change-making_problem. Sie müssen den Algorithmus ein wenig ändern, um Ihr Problem zu lösen. Müssen Sie tatsächlich alle möglichen Lösungen oder nur die Anzahl der Lösungen auflisten? Ihr Titel sagt, dass Sie alle auflisten müssen, aber in der Frage, die Sie sagen, brauchen Sie nur die Anzahl der Lösungen. Bitte klären Sie. – justhalf

+1

Wenn Sie sich für die mathematische Seite interessieren, hat "Polya, wie man es löst" eine gute Diskussion. Ein http://stackoverflow.com/a/20743780/1400793 Beispiel für einen Code, der Polyas Ansatz verwendet. –

+0

@justhalf Sorry für die Verwirrung. Zuerst möchte ich es in einer funktionalen Programmiersprache implementieren. Zweitens erfordert das Problem nur die Anzahl der Lösungen, aber ich möchte die Lösungen auflisten. – theking

Antwort

0

Dies ist ein klassisches dynamisches Programmierproblem.

Lassen Sie a[x] die Anzahl der Möglichkeiten, die Sie x mit den verfügbaren Münzen bezahlen können.

a[0]=1 da die einzige Möglichkeit, 0 zu bezahlen, ist, keine Münzen auszugeben.

Sie bauen dies auf, indem Sie Münzen hinzufügen. Für jede Münze müssen Sie über den Interessenbereich (0-300) iterieren und a[x] = a[x] + a[x - coin] berechnen (wenn x> = Münze).

Wenn Sie mit allen Münzen fertig sind a[x] wird das gewünschte Ergebnis sein.

Verwandte Themen