Forum » Programiranje » urejanje - python
urejanje - python
ktka ::
Napisala sem program za urejanje seznama s stresanjem.
Zanima me, kaj naj program naredi v naslednjih primerih:
- []
- [2,3]
- [3,2]
- [1,2,3,4,5]
- [5,4,3,2,1]
Ali je smiselno da program vrne za rezultat prazen seznam ali izjemo?
Ali je smiselno, da prvotni seznam pogledamo, če je že urejen, in če je ne urejamo ponovno?
Zanima me, kaj naj program naredi v naslednjih primerih:
- []
- [2,3]
- [3,2]
- [1,2,3,4,5]
- [5,4,3,2,1]
Ali je smiselno da program vrne za rezultat prazen seznam ali izjemo?
Ali je smiselno, da prvotni seznam pogledamo, če je že urejen, in če je ne urejamo ponovno?
phyro ::
Ali je smiselno da program vrne za rezultat prazen seznam ali izjemo?
python vrne []. Lahko si predstavljaš da je seznam že v naraščajočem/padajočem vrstnem redu.
Ali je smiselno, da prvotni seznam pogledamo, če je že urejen, in če je ne urejamo ponovno?
jaz ne bi tega delal, razen če je v dosti primerih že sortiran in mogoče s tem kaj pridobiš na času, ampak načeloma ne.
v unih primerih pa ne vem kaj te muči, odvisno al sortiraš padajoče al naraščajoče, ti pač program sortira primerno
ktka ::
ok. potem ne rabim nobenih izjem.
Potem izgleda to tako:(v unittestu)
Potem izgleda to tako:(v unittestu)
import unittest from urejanje import * class Urejanje(unittest.TestCase): def urejanjeZstresanjem(self): #seznam z enim elementom self.asserEqual([1],[1]) #seznam z dvema elementoma self.assertEqual([1,2],[1,2]) self.assertEqual([3,2],[2,3]) #prazen seznam self.assertEqual([],[]) #naraščajoče urejen seznam self.assertEqual([1,2,3,4],[1,2,3,4]) #padajoče urejen seznam self.assertEqual([4,3,2,1],[1,2,3,4]) #števila od 1 do 15, na sodih mestih seznama so soda števila, na lihih pa liha števila self.assertEqual([2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]) #vsi elementi seznama so enaki self.assertEqual([2,2,2,2,2,2,2,2],[2,2,2,2,2,2,2,2]) #vsak element seznama nastopa trikrat elf.assertEqual([[12,42,94,18,6,12,42,94,18,6,12,42,94,18,6],[6, 6, 6, 12, 12, 12, 18, 18, 18, 42, 42, 42, 94, 94, 94]]) #seznam dolžine 20 iz naključnih števil med 1 in 100 #>>> import random #>>> sez = [] #>>> for i in range(20): #sez.append(random.randint(1,100)) #>>> print(sez) #[26, 63, 43, 39, 11, 52, 51, 61, 20, 37, 42, 77, 63, 29, 61, 68, 98, 66, 33, 45] self.assertEqual([26, 63, 43, 39, 11, 52, 51, 61, 20, 37, 42, 77, 63, 29, 61, 68, 98, 66, 33, 45],[11, 20, 26, 29, 33, 37, 39, 42, 43, 45, 51, 52, 61, 61, 63, 63, 66, 68, 77, 98]) if __name__ == '__main__': unittest.main()
Zgodovina sprememb…
- spremenila: ktka ()
phyro ::
self.assertEqual([3,2],[2,3])
si mogoce mislila kaj v stilu:
self.assertEqual(sortiraj([3,2]),[2,3])? ker drugače trdiš da sta seznama [3,2] in [2,3] enaka, kar pa ni res
ktka ::
še eno pomoč bi rabila:
moj algoritem:
Potrebujem pomoč pri časovni zahtevnosti:
ČASOVNA ZAHTEVNOST ALGORITMA:
V najslabšem primeru: O(n^2)
V najboljšem primeru: O(n)
Pričakovana časovna zahtevnost: O(n^2)
Ali so najslabši primeri naslednji? Ali so to najboljši primeri?
- self.assertEqual(urejanjeSstresanjem([1]),[1])
- self.assertEqual(urejanjeSstresanjem([1,2,3,4]),[1,2,3,4]
- self.assertEqual(urejanjeSstresanjem([4,3,2,1]),[1,2,3,4])
- self.assertEqual(urejanjeSstresanjem([2,2,2,2,2,2,2,2]),[2,2,2,2,2,2,2,2])
moj algoritem:
def urejanjeSstresanjem(seznam): '''Funkcija, ki uredi neurejen seznam, tako da med sabo primerja elemente seznama. V lihih korakih začne primerjati na koncu seznama, v sodih korakih pa od leve proti desni. Ko pregleda cel seznam, poišče najmanjše število seznama, ki je postavljeno na začetek seznama. V drugem koraku primerja vse elemente seznama brez tistega, ki je postavljen na začetek, torej tistega, ki je najmanjši. Algoritem ponavljamo dokler seznam ni urejen.''' #primer:[8,4,5,2] n = len(seznam) #dolžina seznama #pregled vseh elementov seznama iz desne proti levi for i in range(n-1,-1,-1): #pregled elementov seznama iz desne proti levi #poiščemo najmanjši element, ki ga postavimo na začetek seznama #tega elementa v naslednjih korakih ne primerjamo več for j in range(i,0,-1): if seznam[j] < seznam[j-1]: #primerjamo po dva elementa seznama #če je eden manjši od drugega #zamenjamo jima mesta v seznamu seznam[j],seznam[j-1] = seznam[j-1],seznam[j] #za zgornji primer #[8, 4, 2, 5] #[8, 2, 4, 5] #[2, 8, 4, 5] #pregled elementov seznama iz leve proti desni #poiščemo največji element, ki ga postavimo na zadnje mesto seznama #tega elementa v naslednjih korakih ne primerjamo več for j in range(i): if seznam[j] > seznam[j+1]: #primerjamo po dva elementa seznama #če je eden večji od drugega #zamenjamo jima mesta v seznamu seznam[j],seznam[j+1] = seznam[j+1],seznam[j] #za zgornji primer #[2, 4, 8, 5] #[2, 4, 5, 8] #na koncu vrnemo urejen seznam return seznam
Potrebujem pomoč pri časovni zahtevnosti:
ČASOVNA ZAHTEVNOST ALGORITMA:
V najslabšem primeru: O(n^2)
V najboljšem primeru: O(n)
Pričakovana časovna zahtevnost: O(n^2)
Ali so najslabši primeri naslednji? Ali so to najboljši primeri?
- self.assertEqual(urejanjeSstresanjem([1]),[1])
- self.assertEqual(urejanjeSstresanjem([1,2,3,4]),[1,2,3,4]
- self.assertEqual(urejanjeSstresanjem([4,3,2,1]),[1,2,3,4])
- self.assertEqual(urejanjeSstresanjem([2,2,2,2,2,2,2,2]),[2,2,2,2,2,2,2,2])
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Python - pomoč (strani: 1 2 3 )Oddelek: Programiranje | 17964 (8712) | black ice |
» | PythonOddelek: Programiranje | 3031 (1717) | d_DJ |
» | [Raptor] Razcep na prafaktorjeOddelek: Šola | 2421 (1963) | Math Freak |
» | Coursera naloga (python)Oddelek: Programiranje | 1942 (1570) | jype |
» | Python - pomoč!Oddelek: Programiranje | 1194 (1030) | lknix |