Dies ist ein Problem von Einführungskurs Algorithmen:Summe durch n teilbar
Sie haben ein Array mit n zufälligen positiven ganzen Zahlen (das Array nicht oder die Elemente einzigartig sortiert werden muß) . Schlagen Sie einen O (n) Algorithmus vor, um die größte Summe von Elementen zu finden, die durch n teilbar ist.
Es ist relativ einfach, es in O (n) mit dynamischer Programmierung zu finden und zu speichern größte Summe mit Rest 0, 1, 2, ..., n - 1. Dies ist ein JavaScript-Code :
function sum_mod_n(a)
{
var n = a.length;
var b = new Array(n);
b.fill(-1);
for (var i = 0; i < n; i++)
{
var u = a[i] % n;
var c = b.slice();
for (var j = 0; j < n; j++) if (b[j] > -1)
{
var v = (u + j) % n;
if (b[j] + a[i] > b[v]) c[v] = b[j] + a[i];
}
if (c[u] == -1) c[u] = a[i];
b = c;
}
return b[0];
}
es ist auch einfach in O (n) für zusammenhängende Elemente zu finden, die Teilsumme MOD n zu speichern. Ein weiteres Beispiel:
function cont_mod_n(a)
{
var n = a.length;
var b = new Array(n);
b.fill(-1);
b[0] = 0;
var m = 0, s = 0;
for (var i = 0; i < n; i++)
{
s += a[i];
var u = s % n;
if (b[u] == -1) b[u] = s;
else if (s - b[u] > m) m = s - b[u];
}
return m;
}
Aber wie O (n) im allgemeinen Fall? Irgendwelche Vorschläge werden geschätzt! Ich denke, das hat etwas mit linearer Algebra zu tun, aber ich bin mir nicht sicher, was genau.
EDIT: Kann dies tatsächlich in O (n log n) getan werden?
Sie die O beschreiben konnte (n^2) Algorithmus? – miracle173
Alle Eigenschaften des Arrays? Sind die Werte einzigartig? Ist es sortiert? – Peter
fügen Sie einen Link zu dieser * Einführung in Algorithmen Kurs * –