Quiz oder auch: suche Begriff für "nicht-linear"..

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 30. April 2007, 08:27

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?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Montag 30. April 2007, 13:55

Könntest du noch mal genauer sagen wie du die 2. Liste erstellst.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 30. April 2007, 14:08

Japp -- nämlich das, was du sagtest, trifft auf diese Liste nicht zu...
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.
Also im Prinziep solch einen Sortiervorgang(rein in der theorie):

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
(richtig verstanden?)

Hmm -- sollte nicht so schwer sein, so etwas umzusetzen. Aber wie das heißt... puhh...
suche Begriff für "nicht-linear
ööhm... unregelmäßig?
(wobei obiges ja in einer gewissen Weise auch wieder linear ist. Zumindest der Ablauf)

MfG EnTeQuAk
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Montag 30. April 2007, 14:25

Japp -- nämlich das, was du sagtest, trifft auf diese Liste nicht zu...
Gott sei dank, ich hab schon gedacht es liegt wiedermal an mir :)

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.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 30. April 2007, 14:28

Warum ist beim 2. Schritt eigentlich "5" die Mitte?
Die liste ist 8 Felder lang und da ist die 5 die vierte *g*

Ich weiß ja nicht, wie er sich das gedacht hat...


MfG EnTeQuAk
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Montag 30. April 2007, 14:30

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
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Montag 30. April 2007, 14:35

rafael hat geschrieben:Median (wäre dann das, was du suchst)
Nicht wirklich...
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Montag 30. April 2007, 14:37

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? :D
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 30. April 2007, 14:56

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:

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)
Sieht zwar nicht so wunderschön aus... funktioniert aber *g*


MfG EnTeQuAk
BlackJack

Montag 30. April 2007, 15:43

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:

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))
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Montag 30. April 2007, 16:52

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 'ß'?]
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Montag 30. April 2007, 17:02

schlangenbeschwörer hat geschrieben:wenn, dann wohl nur unter Mathe-Profs
Sortieralgorithmen sind eigentlich eher was fuer Informatiker... :wink:
BlackJack

Montag 30. April 2007, 17:17

Und noch ein Versuch, der eine "ähnliche" Umordnung vornimmt und ohne die ganze Kopien von Teillisten auskommt:

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
@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.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Montag 30. April 2007, 17:47

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. :-)
Hey! Und wieder etwas dazugelernt. Das wusste ich nun wirklich nicht. Daher ist mir nichts besseres eingefallen *g*

Code: Alles auswählen

            result.append(elements.pop(len(elements) // 2 - 1))
öö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

def main():
    for length in xrange(11):
        print strangely_sorted(xrange(1, length + 1))
Und das schreiben von

Code: Alles auswählen

strangely_sorted([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
wäre zu einfach oder? *g*


MfG EnTeQuAk
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 30. April 2007, 17:49

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?
Integer-Only-Division:

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 Modvoice
Antworten