Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env python
- # Ideea nu e prea dificila ...
- # deoarece nu avem pointeri vom aloca etichete
- # catre diferite bucati de memorie extrase din lista initiala.
- # Algoritmul este liniar iar complexitatea este cat lungimea listei:
- # pentru fiecare segmentare se citesc elementele alocate bucatii respective
- # apoi se citesc restul elementelor necitite, intotdeauna mai putine decat
- # valoarea segmentarii, asemenea lui D = I * C + R de la mate xD.
- elem = range(1, 10) # lista cu elemente [1, 2, ..., 9]
- chunks = list() # lista cu bucati (adica cu alte liste)
- seg = 6 # in cate bucati o segmentam
- lgt = len(elem) / seg # lungimea unei bucati
- # acum generam cele `seg` bucati
- for i in xrange(seg):
- chunks.append(elem[lgt * i:lgt * (i + 1)])
- lgt *= seg # acum `lgt` inseamna cate elemente am distribuit
- # trebuie sa distribuim si elementele de la [lgt:] asta daca mai sunt
- # daca nu mai sunt va rezulta o lista goala deci nu-i problema
- pos = 0 # pozitia de pe care incepe extinderea
- for x in elem[lgt:]:
- chunks[pos].append(x)
- pos += 1
- # astfel elementele ramase sunt distribuite in balans
- # iar diferenta absoluta dintre oricare 2 seturi de ipuri nu va fi mai mare de 1
- # nu-ti face griji daca imparti o lista de A elemente in B bucati
- # unde B > A, vor rezulta B liste goale si in primele A liste din cele B
- # se vor adauga "restul" de A elemente
- for chunk in chunks:
- print chunk
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement