Hallo,
ich arbeite an einem Chatprogramm, in dem sich Benutzer von mehreren Rechnern aus anmelden können. Sie erscheinen also mehrfach in der Liste der Clients. Man kann Nachrichten zwar grundsätzlich an mehrere Clients schicken. Es ist aber gewünscht, dass ein und derselbe Benutzer die Nachricht auch dann mehrfach bekommt, wenn er nicht mehrfach ausgewählt wurde. Dazu folgendes Beispiel:
Client-Liste
------------
Abraham // auf PC 1
Abraham // auf PC 2
Lisa
Ziel: Wähle ich Abraham
nur einmal aus, soll er dennoch
auf beiden Rechnern die Nachricht empfangen.
Mein Code dazu sieht bis jetzt so aus:
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Var
SendTo : Array Of Boolean;
SendList : String;
I : Integer;
Current : String;
J : Integer;
Begin
// Initialisierung
SetLength(SendTo, Clients.Count);
SendList:='';
// Der eigentlich Suchlauf
For I:=0 To Pred(Clients.Count) Do
If Clients.Selected[I] Then
Begin
SendTo[I]:=True;
Current:=Clients.Items[I];
SendList:=SendList + Current + ', ';
For J:=0 To Pred(Clients.Count) Do
SendTo[J]:=(SendTo[J] Or (Clients.Items[J] = Current));
End;
//Ausgabe der Ergebnisse
For I:=0 To Pred(Clients.Count) Do
If SendTo[I] Then
ShowMessage(IntToStr(I) + ': ' + Clients.Items[I]);
System.Delete(SendList, Pred(Length(SendList)), MaxInt);
ShowMessage('Gesendet an:' + #13 + SendList);
// Speicher aufräumen
SetLength(SendTo, 0);
End;
Mein Problem ist nun folgendes:
Der Code funktioniert und bei unseren ca. 15 Teilnehmer ist das auch kein Problem. Wenn das aber größer wird, habe ich so meine Bedenken.
Denn man kann absehen, dass für die Suche genau n * n Durchläufe nötig sind. Bei 3 Einträgen also 9. Wenn es aber 100 Einträge wären, dann wären das schon 10.000 Durchläufe usw..
Was noch wichtig sein dürfte: Die Einträge sind sortiert.
Kann man das irgendwie optimieren?
Ich erinnere mich noch dürftig an meine Schulzeit, wo wir nach Bubblesort dann Quicksort beigebracht bekamen. Ich bin aber nicht in der Lage zu durchdenken, ob ich daraus hierfür etwas ableiten könnte.
Manchmal ist es ja so, dass schon einmal jemand dasselbe Problem hatte und ich da etwas abstauben könnte
Gruß, Alex