Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Kleinsten Wert einer Liste finden (https://www.delphipraxis.net/144637-kleinsten-wert-einer-liste-finden.html)

argonix 12. Dez 2009 22:33


Kleinsten Wert einer Liste finden
 
Hallo!
Ich habe folgendes Problem: In einer Liste von Listen sind verschiedene Objekte enthalten. Mit list[a].Count kann ich für "a" jeweils ermitteln, wie viele Objekte in der Liste sind.
Nun möchte ich gerne wissen, in welcher Liste am wenigsten Elemente drin sind, und ob in allen Listen gleich viele einheiten drinn sind.
Nun müsste ich ja die ganzen Listen durchgehen und die Count-Werte in eine extra-Liste schreiben, diese dann sortieren, den obersten wert ermitteln, die Liste nochmal durchgehen, schauen, welche Liste diesen Count wert hat - fertig.
Um herauszufinden, ob alle Listen gleich viele Elemente enthalten, muss ich dann jede Zahl der Ergebnisliste mit dem Vorgänger vergleichen. Keine Unterschiede = alles gleich.
So, und jetzt die Frage: Geht das vielleicht einfacher, schneller und effizienter? :mrgreen:

EDIT: Titel angepasst.

SirThornberry 12. Dez 2009 22:41

Re: Kleinsten Wert einer Liste finden
 
Ja das geht einfacher:
Pseudo Code:
Code:
if (listen.count > 0) then
begin
  kleinser_wert := listen.items[0].count;
  alle_gleich := True;
  for i := 1 to listen.count - 1 do
  begin
    if (listen.items[i].count < kleinster_wert) then
      kleinster_wert = listen.items[i].count;
      alle_gleich := False;
    end;
  end;
end
else
  Fehler: kein kleinster Wert weil keine liste vorhanden
Also:
Am Anfang ist der kleinste Wert der wert von der 0ten Liste. Danach geht man alle anderen Listen durch und schaut ob in irgend einer Liste weniger drin ist. Sobald man eine solche Liste gefunden hat sind schonmal nicht alle gleich voll und man merkt sich den Wert der Liste wo weniger drin ist.

Nikolas 12. Dez 2009 22:51

Re: Kleinsten Wert einer Liste finden
 
So hätte ich das auch gemacht (schneller als O(n) kann es auch nicht werden), nur hast du ein Problem wenn das erste Element das Kleinste ist. In dem Fall kommst du nie ins if und hast alle_gleich = True;

und die Fehlermeldung sollte eher "Liste leer" heissen.

argonix 12. Dez 2009 23:17

Re: Kleinsten Wert einer Liste finden
 
:wall: Ja, genau... Da habe ich wohl nicht lang genug nachgedacht! Vielen Dank!

Nikolas 12. Dez 2009 23:42

Re: Kleinsten Wert einer Liste finden
 
Das ist ein Standardcode, den eigentlich jeder mit etwas Erfahrung sofort runterschreibt. So was sieht man ein Mal und vergisst es nicht wieder. Aber die Frage nach "alle gleich" solltest du noch anpassen:

Delphi-Quellcode:
if (listen.count > 0) then
begin
  kleinser_wert := listen.items[0].count;
  alle_gleich := True;
  for i := 1 to listen.count - 1 do
  begin


    if (listen.items[i].count < kleinster_wert) then
      kleinster_wert = listen.items[i].count;
    end;
    if (listen.items[i].count != kleinster_wert) then
      alle_gleich := False;
    end;

  end;
end
else
  Fehler: keine Werte in keine liste vorhanden[/quote]
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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