Ich weiß nicht ob es dafür einen Mathematischen Begriff gibt, aber wahrscheinlich schon und wenn den einer kennt, das bestimmt einer hier aus dem Forum...
Also, wenn man z.B. einen Bereich hat wie 1 bis 10, dann kann man den linear durchgehen, also man fängt bei 1 an und geht mit +1 weiter, also so:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Doch man könnte auch in einer art "gleichmäßiger Auslastung" die Liste druchgehen... Also z.B. die Reihenfolge:
1, 10, 5, 3, 8, 2, 4, 9, 6, 7...
Naja, so ungefähr.
Also erst vorn, dann hinten, dann Mitte und so weiter. So vervollständigt man die Liste durch "stetiges Auffüllen" so nach und nach, bis sie komplett ist.
Gibt es dafür einen Typischen Algorithmus für? Wie heißt der?
Quiz oder auch: suche Begriff für "nicht-linear"..
Japp -- nämlich das, was du sagtest, trifft auf diese Liste nicht zu...
(richtig verstanden?)
Hmm -- sollte nicht so schwer sein, so etwas umzusetzen. Aber wie das heißt... puhh...
(wobei obiges ja in einer gewissen Weise auch wieder linear ist. Zumindest der Ablauf)
MfG EnTeQuAk
Also im Prinziep solch einen Sortiervorgang(rein in der theorie):Also erst vorn, dann hinten, dann Mitte und so weiter. So vervollständigt man die Liste durch "stetiges Auffüllen" so nach und nach, bis sie komplett ist.
Code: Alles auswählen
>> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
>> saved: 1, 10
>> remaining: 2, 3, 4, 5, 6, 7, 8, 9
>> saved: 5
>> remaining: 2, 3, 4, 6, 7, 8, 9
>> saved: 2, 9
>> remaining: 3, 4, 6, 7, 8
>> saved: 6
>> remaining: 3, 4, 7, 8
>> saved: 3, 8
>> remaining: 4, 7
>> saved: 4
>> remaining: 7
>> saved: 7
>> FINISH Here are the numbers: 1, 10, 5, 2, 9, 6, 3, 8, 4, 7
Hmm -- sollte nicht so schwer sein, so etwas umzusetzen. Aber wie das heißt... puhh...
ööhm... unregelmäßig?suche Begriff für "nicht-linear
(wobei obiges ja in einer gewissen Weise auch wieder linear ist. Zumindest der Ablauf)
MfG EnTeQuAk
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Gott sei dank, ich hab schon gedacht es liegt wiedermal an mirJapp -- nämlich das, was du sagtest, trifft auf diese Liste nicht zu...

Ist das ein gebräuchlicher ... wie hast du's genannt ... "Sortiervorgang"?
Warum ist beim 2. Schritt eigentlich "5" die Mitte?
Begriff: Vorne-Hinten-Mitte-alternierend.
Die liste ist 8 Felder lang und da ist die 5 die vierte *g*Warum ist beim 2. Schritt eigentlich "5" die Mitte?
Ich weiß ja nicht, wie er sich das gedacht hat...
MfG EnTeQuAk
Wir haben sowas im Moment bei Stochastik in Mathe.
Um einen Mittelwert auszurechnen, gibt es das Arithmetische Mittel und den Median (wäre dann das, was du suchst), wobei wir den Median bei Sachen wie Boxplots verwenden.
Cheers,
Rafael
Um einen Mittelwert auszurechnen, gibt es das Arithmetische Mittel und den Median (wäre dann das, was du suchst), wobei wir den Median bei Sachen wie Boxplots verwenden.
Cheers,
Rafael
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
rafael hat geschrieben:Median (wäre dann das, was du suchst)
Meinst du mit "du" mich?

Der Median von 2, 3, 4, 5, 6, 7, 8, 9 wäre ja 5.5 ...
Geh jens, denkst du dir sowas nur aus um uns zu beschäftigen?

Bei mir hats geklappt... hab einfach ma so nen Dnigens geschrieben. Ich versuchs zwar noch in eine einzelne List Comprehension reinzuhauen... nur sollte das glaub ich schwer werden.
Sollte es das sein, was du haben möchtest:
Sieht zwar nicht so wunderschön aus... funktioniert aber *g*
MfG EnTeQuAk
Sollte es das sein, was du haben möchtest:
Code: Alles auswählen
def sort(n):
end = []
while len(n) > 0:
if len(n) == 1:
end.append(n.pop())
print 'saved: %s' % end[-1]
break
n=n[::-1]
end.append(n.pop())
n=n[::-1]
end.append(n.pop())
print 'saved: %s' % end[-2:]
print 'remaining: %s\n' % n
end.append(n[(len(n)-1)/2])
n.remove(n[(len(n)-1)/2])
print 'saved: %s' % end[-1]
print 'remaining: %s\n' % n
return end
if __name__ == '__main__':
print
print sort(numbs)
MfG EnTeQuAk
Oha. Das dauernde "umdrehen" der Liste ist witzig, aber man könnte auch ``n.pop(0)`` schreiben um das erste Element zu entfernen. 
Edit: Ebenfalls eine hässliche Lösung die den Algorithmus nachvollzieht:

Edit: Ebenfalls eine hässliche Lösung die den Algorithmus nachvollzieht:
Code: Alles auswählen
def strangely_sorted(elements):
elements = list(elements)
result = list()
while elements:
if len(elements) == 1:
result.append(elements[0])
break
result.append(elements[0])
result.append(elements[-1])
elements = elements[1:-1]
if elements:
result.append(elements.pop(len(elements) // 2 - 1))
return result
def main():
for length in xrange(11):
print strangely_sorted(xrange(1, length + 1))
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Also ich weiß nicht, obs genau dafür nen Namen gibt(wenn, dann wohl nur unter Mathe-Profs), aber die auswahl erinnert etwas an Gauß und seine Summenformel. Zumindest die paare kleinste<->größte, zweit-kleinste<->zweit-größte, ...
[ps: was ist an dem Link falsch? das 'ß'?]
[ps: was ist an dem Link falsch? das 'ß'?]
Und noch ein Versuch, der eine "ähnliche" Umordnung vornimmt und ohne die ganze Kopien von Teillisten auskommt:
@schlangenbeschwörer: Ich denke es ist das 'ß' was das Board nicht mag.
Edit: Es war das 'ß' ich hab's mal repariert indem ich es durch '%df' ersetzt habe.
Code: Alles auswählen
def strangely_sorted2(elements):
if len(elements) <= 2:
return list(elements)
result = list()
edge_index = 0
mid_index = len(elements) // 2 - (len(elements) % 2 == 0)
mid_increment = 1
mid_direction = 1
while len(result) < len(elements):
if len(elements) - len(result) == 1:
result.append(elements[mid_index])
break
result.append(elements[edge_index])
edge_index += 1
result.append(elements[-edge_index])
if len(result) < len(elements):
result.append(elements[mid_index])
mid_index += mid_increment * mid_direction
mid_increment += 1
mid_direction = -mid_direction
return result
Edit: Es war das 'ß' ich hab's mal repariert indem ich es durch '%df' ersetzt habe.
Hey! Und wieder etwas dazugelernt. Das wusste ich nun wirklich nicht. Daher ist mir nichts besseres eingefallen *g*BlackJack hat geschrieben:Oha. Das dauernde "umdrehen" der Liste ist witzig, aber man könnte auch ``n.pop(0)`` schreiben um das erste Element zu entfernen.![]()
ööhm was macht der Doppelslash?(bei mir macht er das gleiche, wie ein einfacher, hab ich die Vermutung). Hat der eine besondere Bedeutung?Code: Alles auswählen
result.append(elements.pop(len(elements) // 2 - 1))
Und das schreiben vonCode: Alles auswählen
def main(): for length in xrange(11): print strangely_sorted(xrange(1, length + 1))
Code: Alles auswählen
strangely_sorted([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
MfG EnTeQuAk
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Integer-Only-Division:EnTeQuAk hat geschrieben:ööhm was macht der Doppelslash?(bei mir macht er das gleiche, wie ein einfacher, hab ich die Vermutung). Hat der eine besondere Bedeutung?
Code: Alles auswählen
In [13]: 1.0 / 3
Out[13]: 0.33333333333333331
In [14]: 1.0 // 3
Out[14]: 0.0
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Mensch... wie viel ich heute alles lerne... Danke, Leonidas!
MfG EnTeQuAk
PS: ich gebe hiermit wieder zurück ans eigentliche Topic!
MfG EnTeQuAk
PS: ich gebe hiermit wieder zurück ans eigentliche Topic!

Der erste Import in meinen Skripten ist meistens der hier:
Dann ergibt auch die Division von zwei ganzen Zahlen eine Fliesskommazahl, es sei denn man benutzt ``//``.
Die Schleife diente zum Testen. Ich wollte ja nicht, dass es nur bei genau den 10 Elementen funktioniert, sondern auch mit 0─3 bzw. mit gerader und ungerader Anzahl von Elementen und einer Anzahl die modulo 3 jeweils 0, 1 oder 2 ergibt. Das sind so die Randfälle bei denen ich eventuell Probleme erwartet habe.
Dein Quelltext ging zum Beispiel einfach davon aus, dass es nach dem Entfernen der beiden "Ränder" noch mindestens ein Element in der Mitte geben muss.
Code: Alles auswählen
from __future__ import division
Die Schleife diente zum Testen. Ich wollte ja nicht, dass es nur bei genau den 10 Elementen funktioniert, sondern auch mit 0─3 bzw. mit gerader und ungerader Anzahl von Elementen und einer Anzahl die modulo 3 jeweils 0, 1 oder 2 ergibt. Das sind so die Randfälle bei denen ich eventuell Probleme erwartet habe.
Dein Quelltext ging zum Beispiel einfach davon aus, dass es nach dem Entfernen der beiden "Ränder" noch mindestens ein Element in der Mitte geben muss.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Uhi
Ihr habt ja wieder losgelegt 
Also ich wollte das eigentlich nicht implementieren. Ich dachte nur, das wäre schön, wenn ein Netzwerk Rendering Job so abgearbeitet werden würde.
Wenn man 1000 Frames berechnen läßt, ist es dumm, wenn man am Ende sieht, das es mist ist. Worst-Case: ein Fehler macht sich erst am Ende vom Video richtig bemerkbar, und der ganze Job ist was für die Tonne.
Es ist somit ist es netter, wenn es nicht linear abgearbeitet wird, sondern nach und nach fertiggestellt wird. So kann man nach und nach kontrollieren, ob alles ok ist.
Jetzt wo ihr hier schon Beispiele gemacht habt, hab ich mich gefragt, ob es nicht auch einfach geht. Man läßt weg, das erst Anfang und Ende berechnet werden sollen. Somit siehts dann so aus:
1. Rechne aus dem Aktuellen Block das mittlere Bild.
(Es entstehen zwei Blöcke, vor und nach dem gerechneten Bild
2. Arbeite die Blöcke, wie bei 1. ab
Also bei 1 bis 7 (weils gut passt) sieht es dann so aus:
1,2,3,4,5,6,7
rechne 4
1,2,3,X,5,6,7
rechne 2
1,X,3,X,5,6,7
rechne 6
1,X,3,X,5,X,7
rechne 1
X,X,3,X,5,X,7
rechne 3
X,X,X,X,5,X,7
rechne 5
X,X,X,X,X,X,7
rechne 7
fertig.
Vielleicht gibt es da auch keinen typtischen Begriff für...


Also ich wollte das eigentlich nicht implementieren. Ich dachte nur, das wäre schön, wenn ein Netzwerk Rendering Job so abgearbeitet werden würde.
Wenn man 1000 Frames berechnen läßt, ist es dumm, wenn man am Ende sieht, das es mist ist. Worst-Case: ein Fehler macht sich erst am Ende vom Video richtig bemerkbar, und der ganze Job ist was für die Tonne.
Es ist somit ist es netter, wenn es nicht linear abgearbeitet wird, sondern nach und nach fertiggestellt wird. So kann man nach und nach kontrollieren, ob alles ok ist.
Jetzt wo ihr hier schon Beispiele gemacht habt, hab ich mich gefragt, ob es nicht auch einfach geht. Man läßt weg, das erst Anfang und Ende berechnet werden sollen. Somit siehts dann so aus:
1. Rechne aus dem Aktuellen Block das mittlere Bild.
(Es entstehen zwei Blöcke, vor und nach dem gerechneten Bild
2. Arbeite die Blöcke, wie bei 1. ab
Also bei 1 bis 7 (weils gut passt) sieht es dann so aus:
1,2,3,4,5,6,7
rechne 4
1,2,3,X,5,6,7
rechne 2
1,X,3,X,5,6,7
rechne 6
1,X,3,X,5,X,7
rechne 1
X,X,3,X,5,X,7
rechne 3
X,X,X,X,5,X,7
rechne 5
X,X,X,X,X,X,7
rechne 7
fertig.
Vielleicht gibt es da auch keinen typtischen Begriff für...