AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sortierung mit Abhängigkeit

Ein Thema von bogdan · begonnen am 18. Nov 2013 · letzter Beitrag vom 18. Nov 2013
Antwort Antwort
bogdan

Registriert seit: 15. Apr 2013
77 Beiträge
 
#1

Sortierung mit Abhängigkeit

  Alt 18. Nov 2013, 14:18
Angenommen ich hätte folgenden Text in einer StringList mit folgenden Werten:

D = C
A = D
C
B = A
F

Der Text soll dann so aussehen:

F
C
D = C
A = D
B = A

Dachte erst an 2 Schleifen, die eine liest das Schema und die andere prüft die Abhängigkeit. Vielleicht eine rekursive Function/Procedure?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Sortierung mit Abhängigkeit

  Alt 18. Nov 2013, 14:23
Eigene Sortierungen erledigt man nach meiner Erfahrung am Besten mit TStringlist.CustomSort. Lieder habe ich das Schema Deiner Beispielsortierung nicht erkannt, sonst hätte ich einen Beispielcode posten können.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
bogdan

Registriert seit: 15. Apr 2013
77 Beiträge
 
#3

AW: Sortierung mit Abhängigkeit

  Alt 18. Nov 2013, 14:30
Ich meine eine topologische Sortierung: http://de.wikipedia.org/wiki/Topologische_Sortierung
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Sortierung mit Abhängigkeit

  Alt 18. Nov 2013, 14:34
Sry, das ist mir momentan zu mathematisch
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#5

AW: Sortierung mit Abhängigkeit

  Alt 18. Nov 2013, 15:26
Das sollte recht einfach über eine rekursive Funktion machbar sein.
Du hast 2 Listen: Output und toPrint.

Output ist leer, toPrint ist die Liste der Elemente. Dann schreibst du eine Funktion, die im Endeffekt folgendes prüft:
Hat das Element keine Abhängigkeit? Dann gib das Element aus (sofern es noch nicht ausgegeben wurde)
Hat das Element eine Abhängigkeit? Gib erst die Abhängigkeit aus, dann das Element. - immer sofern es noch nicht ausgegeben wurde.

Code:
printElement(element):
  toPrint.remove(element)
  ist element ohne Anhängigkeiten?
    wenn element nicht in Output
      Output.add(element)
      return
  sonst // Element ist sowas wie A = B
    Abhängigkeit = parseAbhängigkeit(element); // parseAbhängigkeit würde bei (A = B) B zurückgeben.
    if output.contains(abhängigkeit) then
      return; // bereits ausgegeben
    if !toPrint.contains(abhängigkeit) then
      // FEHLER: zyklische Abhängigkeit
    printElement(findeElement(B)); // findeElement findet B in der Liste, und gibt B oder B = ... zurück, je nach dem was in der Liste steht.
    Output.add(element);
Wenn du dann
Code:
while (toPrint.size > 0)
  printElement(toPrint.get(0))
aufrufst, ist in Output die sortierte Liste. Der Sauberkeithalber sollte man toPrint und Output als Parameter übergeben und nicht global definieren.
Wenn du mehr als 1 Abhängigkeit hast (bspw. A = B, C) dann gibt parseAbhängigkeit eine Liste zurück, über die Iteriert werden muss. Sonst ändert sich eig. nichts.
Und noch ne Anmerkung: Keine Garantie dass das funktioniert - reines Kopfkonstrukt.
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Sortierung mit Abhängigkeit

  Alt 18. Nov 2013, 15:53
Und noch ne Anmerkung: Keine Garantie dass das funktioniert - reines Kopfkonstrukt.
Das ähnelt doch sehr dem Tarjan-Algo, sieht also gut aus.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#7

AW: Sortierung mit Abhängigkeit

  Alt 18. Nov 2013, 16:39
F
C
D = C
A = D
B = A
Bis auf die Position von F kann ich das noch nachvollziehen. Da mit F aber keinerlei Abhängigkeiten bestehen, könnte es doch überall stehen, oder?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#8

AW: Sortierung mit Abhängigkeit

  Alt 18. Nov 2013, 16:57
Code:
schleife i (0 bis ende) -> laufe die Liste durch, von oben nach unten
  schleife j (i bis ende) -> schleife über alles, was noch nicht einsortiert wurde
    wenn element j von nichts oder nur von etwas über i abhängt
      dann tausche Elemente an i und j aus und erhöhe i -> also j hochschieben
    erhöhe j
  ende j
  wenn in schleife j nichts getauscht wurde
    dann exception, da nicht auflösbar -> Abhängiges fehlt oder Kreisreferenz
  erhöhe i
ende i
Man kann natürlich vorher erstmal alles ohne Abhängigkeit hochziehen, aber das ist von den Abhängikeiten her ja egal

Denn so ist es ja, im Grund, auch OK
Code:
C
D = C
A = D
B = A
F
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
bogdan

Registriert seit: 15. Apr 2013
77 Beiträge
 
#9

AW: Sortierung mit Abhängigkeit

  Alt 18. Nov 2013, 17:45
Uwe Raabe: Ja, die Werte ohne Abhängigkeit können theoretisch an beliebiger stelle stehen.

Ich versuche mal den Ansatz von JasonDX oder himitsu umzusetzen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz