Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Irgendwie...
Irgendwie...
Ich danke Ihnen! Man kann die Hand des Meisters sofort erkennen! Ich werde es morgen ausprobieren, um zu sehen, was dabei herauskommt.
Irgendwie...
Ich habe angefangen, den Code auszuprobieren und ein künstliches Beispiel erstellt - das Array ausgefüllt
Ich hab's:
Das heißt, wir haben eine Variante, aber wir erwarten auch eine andere Variante.
Ist es möglich, dem Algorithmus beizubringen, sie auch zu finden?
Ich habe angefangen, den Code auszuprobieren und ein künstliches Beispiel erstellt - das Array ausgefüllt
Ich hab's:
Das heißt, wir haben eine Variante, aber wir erwarten auch eine andere Variante.
Kann der Algorithmus lernen, sie auch zu finden?
Und die Variante "0-1 3-6 7-9" ist nicht besser als die Variante "0 - 0-1 2-5 7-9" - beide gehen von 0 bis 1 und haben jeweils 2 Auslassungen der Länge 1.
In diesem Fall gibt es zwei Möglichkeiten:
1 - machen Sie dasselbe, aber ab dem Ende des Satzes von Überspringen.
2 - suchen Sie nicht gleich nach dem nächstgelegenen Segment, sondern mit einer Toleranz. Aber in diesem Fall werden es noch mehr sein, wenn es viele Daten und viele Andocksequenzen gibt.
Nach Variante 1 werden Sie jedoch damit beginnen wollen, Ketten aus allen möglichen Ausgangspositionen zu bilden. Das ist richtig, aber der Arbeitsaufwand für den Algorithmus steigt dadurch erheblich.
Ja! Es ist notwendig, die Konstruktion von Varianten von jedem der Segmente der Ausgangsmenge aus zu beginnen und die Konstruktion bis zum Anfang und Ende fortzusetzen.
Und die Option "0-1 3-6 7-9" ist nicht besser als die Option "0 - 0-1 2-5 7-9" - beide gehen von 0 bis 1 und haben jeweils 2 Auslassungen der Länge 1.
In diesem Fall sind sie gleich, da stimme ich zu, aber sie sind unterschiedlich, und gemäß der Aufgabenstellung müssen wir die Summe ihrer Punkte schätzen, und bis wir eine Linie bilden, werden wir die kombinierte Punktzahl aller Segmente nicht kennen.
Nach Option 1 besteht jedoch der Wunsch, mit der Konstruktion von Zeichenketten von allen möglichen Ausgangspositionen aus zu beginnen. Das ist richtig, aber der Arbeitsaufwand für den Algorithmus steigt dadurch erheblich.
Ja! Es ist notwendig, die Konstruktion von Varianten von jedem der Segmente der Ausgangsmenge aus zu beginnen und die Konstruktion bis zum Anfang und Ende fortzusetzen.
Das scheint mir auch die richtigere Strategie zu sein! Ich denke jedoch, dass es möglicherweise doppelte Varianten gibt.
Können Sie helfen, indem Sie einen Code schreiben?
Da jede Variante die Segmente nun in zwei Arrays speichert, können diese der Einfachheit halber mit der MethodeCombine() zu einem Array zusammengefasst werden.
Da nun jede Variante die Segmente in zwei Arrays speichert, kann man sie mit der MethodeCombine() zu einem Array zusammenfassen, um es bequemer zu machen.
Dmitry, vielen Dank für den neuen Algorithmus!
Ja, es gibt in der Tat sehr viele Kopien.
So wie ich es verstehe, können sie nicht gezählt werden. Ich hatte es nicht geschafft, auf die Kombination von 1000 Elementen zu warten - meinem Netbook ging der Speicher aus :(
Und ist es möglich, beim Hinzufügen eines Segments nicht alle Kombinationen zu verwenden, sondern nur eine bestimmte Anzahl von möglichen im aktuellen Schritt, z. B. die besten 10?
Dmitry, vielen Dank für den neuen Algorithmus!
Ja, es gibt tatsächlich viele Kopien.
Soweit ich weiß, kann man sie nicht zählen. Ich konnte die Kombination von 1000 Elementen nicht abwarten - meinem Netbook ging der Speicher aus :(
Ist es möglich, beim Hinzufügen eines Segments nicht alle Kombinationen zu verwenden, sondern nur eine bestimmte Anzahl von möglichen im aktuellen Schritt, z. B. die besten 10?
Um zu wissen, dass sie die besten sind, muss man sie mit anderen vergleichen, d. h. man muss sie erst einmal alle haben. Eine andere Sache ist, den Algorithmus irgendwie zu optimieren, aber ich habe nicht das Ziel, mein Leben diesem Algorithmus zu widmen).
Vielleicht entscheiden Sie sich für das Kriterium der Suffizienz und erhalten zunächst alle Optionen, ausgehend von nur einem Segment, das zufällig ausgewählt wird, und so weiter, bis eine zufriedenstellende Option erscheint.
Und die zweite Option kann beschleunigt werden - um das Array mit Varianten nicht ein Element zu einer Zeit, sondern mehrere Dutzend Elemente auf einmal zu skalieren, und am Ende zu trimmen es.
Um zu wissen, dass sie die besten sind, muss man sie mit anderen vergleichen, d. h. man muss sie erst einmal alle haben. Eine andere Sache ist, den Algorithmus irgendwie zu optimieren, aber ich habe nicht das Ziel, mein Leben diesem Algorithmus zu widmen).
Ich spreche über ein einzelnes Segment, sagen wir, es hat einen Koeffizienten, um seine Qualität zu bewerten, dann verzweigen wir nach jeder Iteration, zum Beispiel, nur auf die Top 10 dieser Koeffizienten.
Vielleicht entscheiden Sie sich für ein Suffizienzkriterium und erhalten zunächst alle Varianten, ausgehend von nur einem Segment, das zufällig ausgewählt wird, und so weiter, bis eine zufriedenstellende Variante erscheint.
Leider ist die "Hinlänglichkeit" hier schwer einzuschätzen - dazu muss man eine Norm kennen, dann kann man daraus eine Toleranz definieren, und ich habe keine Norm.
Und die zweite Option kann beschleunigt werden - zu skalieren Array mit Optionen nicht ein Element zu einer Zeit, aber mehrere Dutzend Elemente, und am Ende der es auszurichten.
Ich bin mir nicht ganz sicher, was Sie mit der Parallelisierung mit OpenCL meinen?
1. Ich spreche von einem einzelnen Segment, sagen wir, es hat einen Koeffizienten, um seine Qualität zu bewerten, dann verzweigen wir nach jeder Iteration zum Beispiel nur zu den Top 10 dieser Koeffizienten.
2. Leider lässt sich die "Hinlänglichkeit" hier nur schwer einschätzen - man muss die Benchmark kennen, dann kann man daraus die Toleranz bestimmen, und ich habe keine Benchmark.
3. ich bin mir nicht ganz sicher, was Sie mit Parallelisierung mittels OpenCL meinen?
1. wo liegt dieser Koeffizient?
2. Was ist mit Punkt 1?
3. Nein, es ist einfacher. Okay, ich werde versuchen, es morgen zu beschleunigen.