AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Spezieller Sortieralgorithmus bzw. Pfadfindealgorithmus gesucht
Thema durchsuchen
Ansicht
Themen-Optionen

Spezieller Sortieralgorithmus bzw. Pfadfindealgorithmus gesucht

Ein Thema von mariusbenz · begonnen am 16. Sep 2019 · letzter Beitrag vom 23. Sep 2019
 
Schokohase
(Gast)

n/a Beiträge
 
#10

AW: Spezieller Sortieralgorithmus bzw. Pfadfindealgorithmus gesucht

  Alt 17. Sep 2019, 09:54
4. Für "Stabilität" müsste man bei mehreren Konfigurationen mit gleich wenig Wechseln, ein weiteres Kriterium angeben, das diese gewichtet?
Die Stabilität bekommst du durch die Sortierung innerhalb des Blocks.

Nehmen wir mal folgenden Block
Code:
abcdeabcdeabcde
Wenn wir den sortieren, dann erhalten wir
Code:
aaabbbcccdddeee
und das stabil.

Bei der Permutation des Blocks ist nur der Anfang und das Ende interessant. Die Anordnung in der Mitte ist unerheblich.
Code:
aaabbbcccdddeee
oder
Code:
aaacccbbbdddeee
ist für die gesuchte Optimierung gleich.

Die Permutation von diesem intern sortierten Block bekommt man durch folgenden Pseudocode
Code:
parts = block.split() // aaabbbcccdddeee => aaa,bbb,ccc,ddd,eee
foreach first in parts
  foreach last in parts.except(first)
    permutation = first + parts.except(first).except(last) + last
Und diese Permutation ist stabil.
Code:
aaacccdddeeebbb
aaabbbdddeeeccc
aaabbbccceeeddd
aaabbbcccdddeee
bbbcccdddeeeaaa
bbbaaadddeeeccc
bbbaaaccceeeddd
bbbaaacccdddeee
cccbbbdddeeeaaa
cccaaadddeeebbb
cccaaabbbeeeddd
cccaaabbbdddeee
dddbbbccceeeaaa
dddaaaccceeebbb
dddaaabbbeeeccc
dddaaabbbccceee
eeebbbcccdddaaa
eeeaaacccdddbbb
eeeaaabbbdddccc
eeeaaabbbcccddd
BTW: Die Anzahl der Elemente dieser Permutation ist
Code:
n*(n-1) für n=Anzahl der unterschiedlichen Buchstaben
Für die Optimierung ist der Wechsel innerhalb des Blocks völlig unerheblich, denn diese Wechsel sind immer da, egal wie die Anordnung ist. Man braucht also nur schauen, ob es einen Wechsel zwischen benachbarten Blöcken gibt.

Im Vorfeld kann man dabei schon das theoretisch bestmögliche Ergebnis ermitteln, was man dann als Abbruchkriterium nehmen kann (wenn man nur an einer optimalen Lösung interessiert ist).

Dazu schaut man sich die Blöcke an und ermittelt, ob diese Blöcke überhaupt ohne Wechsel zusammengefügt werden können.

Keine Wechsel zwischen den Blöcken
Code:
abcd
defg
ghij
Keine Optimierung möglich, denn es muss immer zwischen den Blöcken gewechselt werden.
Code:
abc
def
ghi
Natürlich gibt es auch Konstellationen, wo das so ermittelte theoretisch beste Ergebnis nicht erreicht werden kann
Code:
abc
cde
cfg

Geändert von Schokohase (17. Sep 2019 um 10:05 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz