Ich habe an einer scheinbar einfachen Aufgabe gearbeitet, die mich verrückt macht. Also, wenn Sie Lust auf eine Programmieraufgabe haben ... lesen Sie weiter.Binärer Auswahlprozess
Ich möchte in der Lage sein, einen Nummernbereich z. [1:20] und drucken Sie die Werte mit einem Mechanismus ähnlich einem binären Suchalgorithmus. Drucken Sie zuerst den niedrigsten Wert (in diesem Fall 1) und dann den mittleren Wert (z. B. in diesem Fall 10) und teilen Sie dann den Bereich in Viertel und drucken Sie die Werte bei 1/4 und 3/4 (in diesem Fall 5) und 15) und dann in Achten aufteilen, bis alle Werte im Bereich gedruckt sind.
Die Anwendung von diesem (das nicht wirklich notwendig ist, um hier zu verstehen) ist für einen Speicherseitenzugriffsmechanismus, der sich effizienter verhält, wenn auf Seiten zuerst in den mittleren Bereichen zugegriffen wird.
Für dieses Problem wäre es ausreichend, einen beliebigen Zahlenbereich zu nehmen und die Werte in der oben beschriebenen Weise zu drucken.
Irgendwelche Gedanken dazu? Eine Pseudo-Code-Lösung wäre in Ordnung. Ich würde versuchen, dies zu versuchen, aber alles, was ich bisher versucht habe, schneidet es nicht ab. Vielen Dank.
Update: Wie gewünscht, würde die gewünschte Ausgabe für das Beispiel [1:20] etwa so aussehen: 1, 10, 5, 15, 3, 7, 12, 17, 2, 4, 6, 8, 11, 13, 16, 18, 9, 19, 20
Dieser Ausgang könnte auf viele ähnliche Arten dargestellt werden, abhängig vom verwendeten Algorithmus. Aber, die Idee ist, zuerst die halben Werte, dann die Viertel, dann die Achten, dann die Sechzehntel usw. anzuzeigen, wobei vorher präsentierte Werte weggelassen werden.
Können Sie bitte die gewünschte vollständige Ausgabe für einen Musterkoffer bereitstellen? –
aber Sie können nur Seiten verwenden, die Sie zuweisen, bin ich richtig? –
Diese Antwort auf ähnliche Frage kann hilfreich sein: http://stackoverflow.com/a/11761192/1009831 –