Ich denke, der Prozess der Aufteilung der zu entschärfenden Objekte muss am Ende des Abschnitts aussehen und sich vorwärts bewegen, um die dahinterliegenden Duples zu umfassen. wenn Sie hatte zum Beispiel:
1 1 2 . 2 4 4 . 5 5 6
Und Sie in Blöcke von 3 aufzuteilen, dann würde der Teilungsprozess 1 1 2
nehmen, aber sehen, dass es eine andere 2
so wäre es 1 1 2 2
wie der erste Block zu erzeugen. Es würde sich wieder 3 vorwärts bewegen und 4 4 5
generieren, aber sehen, dass es Dups vorwärts gab und 4 4 5 5
generieren. Der 3. Thread hätte nur 6
. Es würde:
1 1 2 2 . 4 4 5 5 . 6
Die Größe der Blöcke werden inkonsistent sein, aber als die Anzahl der Elemente in der gesamten Liste groß wird, diese kleinen Veränderungen unbedeutend sein werden. Der letzte Thread kann sehr wenig zu tun haben oder kurz geändert werden, aber wiederum, da die Anzahl der Elemente groß wird, sollte dies die Leistung des Algorithmus nicht beeinträchtigen.
Ich denke, diese Methode wäre besser als irgendwie mit einem Thread die überlappenden Blöcke behandeln. Mit dieser Methode, wenn Sie viele Duplikate hatten, konnten Sie sehen, dass es viel mehr als 2 zusammenhängende Blöcke handhaben musste, wenn Sie Pech hatten, wenn Sie die Duplikate setzen. Zum Beispiel:
Ein Thread müsste die gesamte Liste wegen der 2s und der 5s behandeln.
Meine Vermutung ist, dass das Durchlaufen der sortierten Liste in einem Thread schneller ist als die Sortierung (die für die Schleife immer noch benötigt wird), es sei denn, Sie sortieren bereits Multi-Threading. Denken Sie, dass es notwendig ist, Multi-Threading hier zu verwenden? –
Ja, ich habe schon irgendwie Multithread-Sortierung durchgeführt. Und ja, das ist Voraussetzung, auch wenn es nicht die beste Verwendung ist :) – Igor222
Bitte markieren Sie dies mit dem Hausaufgaben-Tag, wenn es so ist. – Gray