Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   C++ Array in k Teile teilen (https://www.delphipraxis.net/125304-array-k-teile-teilen.html)

CalganX 3. Dez 2008 22:12


Array in k Teile teilen
 
Hallo zusammen,

ich stehe gerade absolut auf dem Schlauch:
Ich soll ein Array mit n Elementen in k Teile teilen, die sich maximal um 1 in der Anzahl ihrer Elemente unterscheiden.
Meine Idee: Ich teile das Array in k Teile mit jeweils [n/k] Elementen ([] für untere Gauß-Klammer), dann bleiben r=(n mod k) Elemente, d.h. 0 bis k-1, übrig, die ich auf die ersten r Teile aufteile. Soweit die Theorie.

Code:
      // Teile das Array in k Teile und teile den Rest (zwischen 0 und k-1)
      // auf die ersten r Teile auf
      int sublen=len/k, rest=len%k, r=0;
      for (int idx = 0; idx < k; idx++)
      {
         if (rest > idx) {
            rest--;
            r++;
         }
         int s = (idx*sublen);
         if (r > 1) start += r-1;
         int e = (idx+1)*sublen;
         if (r > 1) start += r;
         cout << "go sub: k_merge_sort(array, " << s << ", " << e << ", k, alpha)" << endl;
      }
Das macht aber so nicht, was es soll. Für n=10 und k=2 kommt dabei
Code:
go sub: k_merge_sort(array, 0, 5, k, alpha)
go sub: k_merge_sort(array, 5, 10, k, alpha)
Und für n=10 und k=3 kommt
Code:
go sub: k_merge_sort(array, 0, 3, k, alpha)
go sub: k_merge_sort(array, 3, 6, k, alpha)
go sub: k_merge_sort(array, 6, 9, k, alpha)
D.h. ein Element ist immer zu viel drin.

Ich komme darauf echt irgendwie nicht klar. Kann mir da jemand weiterhelfen? ;-)

Dank und Gruß
Christopher

CalganX 4. Dez 2008 20:55

Re: Array in k Teile teilen
 
Ähm, eigentlich dachte ich, das wäre fast schon trivial. :gruebel:
Kommt schon... ich komme echt nicht auf ne Lösung. :cry:

Apollonius 4. Dez 2008 21:08

Re: Array in k Teile teilen
 
Zitat:

Code:
if (rest > idx) {
            rest--;
            r++;
         }

Das ist doppelt. Entweder du prüfst rest > idx und lässt den Wert von rest in Frieden, oder du dekrementierst rest, vergleichst dann aber auf Null und nicht auf idx.
Zweitens verwendest du offensichtlich einen falschen Wert für s, da du nur start korrigierst.


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