Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zadaci za wannabe pythoniste

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 5 6 7 8 9 10 11 12 13 14 ... Dalje > >>

[ Pregleda: 51016 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste17.01.2020. u 12:03 - pre 51 meseci
Zašto samo tri broja?
Pa jer smo tako u mogućnosti u ovom trenutku :)

Elem, izborih se ja nekako sa 14. zadatkom i svoje rešenje sam postavio ovde.


E sad kad smo ovu preponu preskočili, da vidimo šta predlaže Berislav.

Dakle, treba da bude matrica.
Ali čekaj, pa još nisam radio sa matricama!?

Pa šta čekaš!? :)

I to što kažeš. Dobro, misliš nešto ovako?

brojevi = [[8, 29, 22, 17]
[14, 38, 21, 18]
[15, 52, 40, 39]
[31, 20, 26, 41]]


Jesi ti siguran da se ovo može rešiti samo sa if... else?

Dobro, ako idem ovim metodom kojim sam rešio zadatak četrnaest, red po red, naći ću najveći neparan broj u svakom redu.
Onda od ta četiri broja opet nađem najveći.
Ali mi nije baš jasno kako ću odrediti njegovo mesto.
Jedino za svaki broj da bude promenljiva po nekom nizu, recimo
[a1, a2, a3, a4
b1, b2, b3, b4...]

pa da u odnosu na to koja bude najveća određujem poziciju. Gore bi to bila c2, dakle treći red, druga kolona.
Ili ima neka prečica?
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 794



+630 Profil

icon Re: Zadaci za wannabe pythoniste17.01.2020. u 13:31 - pre 51 meseci
Citat:
a1234567: Jesi ti siguran da se ovo može rešiti samo sa if... else?

Ocigledno ne, treba ti i petlja ... 'for' petlja. :-) Mislim, ako resavas opsti slucaj (dimenzija M x N).
Citat:
Ali mi nije baš jasno kako ću odrediti njegovo mesto. Jedino za svaki broj da bude promenljiva po nekom nizu, recimo

Zato sam ti i savetovao da prodjes onaj kurs sa MIT. Tamo lepo objasnjavaju strukture podataka, pocev od skalarnih tipova (str, int, float ...) do vektorskih (list, dict ...). Kada imas listu:
a = [ 10, 20, 50, 100, 200 ]

Elemente liste mozes da dobijes sa:
>>> a[0]
10
>>> a[2]
50

Prvi element liste s leve strane ima indeks 0, slede 1, 2 itd. Slicno tome, u matrici iz tvog primera (zaboravio si zareze na kraju vrsta).
brojevi = [[8, 29, 22, 17],  [14, 38, 21, 18], [15, 52, 40, 39], [31, 20, 26, 41]]

vrednost pojedinih elemenata dobijas sa:
>>> brojevi[0][0]
8
>>> brojevi[0][1]
29
>>> brojevi[2][3]
39

U opstem slucaju brojevi[x][y], gde je x vrsta (0-3), a y kolona (0-3). Znaci, za svaki element liste, odnosno 'liste lista' (matrice) mozes lako da dobijes indeks elementa.

Kako mozes da odstampas / analiziras elemente liste, jedan iza drugog? Koriscenjem 'for' petlje. Imas dva nacina - iterativno, element po element:
lista = [ 10, 11, 12, 13, 14]
for element in lista:
print element

Ili pristupajuci klasicno, indeks po indeks:
for id in range(len(lista)):   # len(lista) = 5 u gornjem primeru:
print lista[id]


A sada nesto sto mozda nisi znao: za razliku od nekih drugih programskih jezika u Pythonu su liste dinamicke, implementirane kao ulancane liste s pointerima. Ako napravis praznu listu:
lista = []

Ona nece imati nijedan element, a ako pokusas da pristupis ili da direktno dodelis vrednost desetog elementa u listi, dobices:
>>> lista[9] = 12
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

Listu mozes da definises ili direktno (lista = [1, 3, 5, 7, 11]) ili metodom element po element, koriscenjem append() metode:
>>> lista.append(51234)
>>> lista.append(51)
>>> lista.append(3)
>>> lista
[51234, 51, 3]
>>> lista[1]
51

Elemente liste mozes i da brises (pop() / remove()), da umeces elemente usred postojece liste (insert()) itd. Osnovne operacije sa listama mozes da vidis ovde

Medjutim, ponekad ti moze zatrebati prazna lista koja sadrzi svuda nule, a gde mozes proizvoljno da pristupis bilo kom elementu i dodelis mu vrednost. To je narocito pogodno kada prevodis prastare programe koje su neke fortrandzije pisale pre 40 godina, tamo su nizovi staticki definisani i automatski popunjeni nulama. Ili neki Perl skript, u Perlu su sve promenljive kada ih prvi put pozoves uvek nule (osim ako ne koristis 'use strict').

Praznu listu od 10 nula kreiras sa:
lista = [0]*10
>>> lista
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> lista[5]=111
>>> lista
[0, 0, 0, 0, 0, 111, 0, 0, 0, 0]

Slicno tome, matricu 3 x 3 popunjenu nulama mozes da dobijes sa:
>>> matrica = [[0, 0, 0]]*3

ili:
>>> matrica = [[0]*3]*3

U oba slucaja rezultat je isti:
>>> matrica
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

Takozvanu jedinicnu matricu:
1 0 0
0 1 0
0 0 1

dobijas ovako:
Code:
e = [] # Kreira praznu listu
for i in range(3):
    e.append([]) # Dodaje praznu vrstu matrice
    for j in range(3):
        if (i==j):
           e[i].append(1)
       else:
           e[i].append(0)

U gornjem izrazu 'i==j' je izraz tipa boolean, ciji je rezultat True ili False. Boolean se moze konvertovati u integer funkcijom int() (int(False) = 0, int(True) = 1). Samim tim, ovo gore mozes da skratis:
Code:
e = [] # Kreira praznu listu
for i in range(3):
    e.append([]) # Dodaje praznu vrstu matrice
    for j in range(3):
        e[i].append(int(i==j))  # Daje 0 ako je i!=j, a 1 ako je i==j

Moze li jos krace? Moze! U Pythonu imas lepu stvar koja se zove comprehension, koja ti omogucava da gornji kod skratis na jednu liniju (verovatno si video ovaj trik u Pantinim kodovima, na linku koji sam ti dao imas vise o tome):
Code:
e = [ [ int(i==j) for i in range(3) ] for j in range (3) ]


Mislim da ti sada nece biti tesko da uradis zadatak.


[Ovu poruku je menjao B3R1 dana 17.01.2020. u 15:40 GMT+1]
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 794



+630 Profil

icon Re: Zadaci za wannabe pythoniste17.01.2020. u 14:46 - pre 51 meseci
Citat:
a1234567:
Dobro, ako idem ovim metodom kojim sam rešio zadatak četrnaest, red po red, naći ću najveći neparan broj u svakom redu.

Zamisli da stojis pred ljudima (oba pola, imuskarci i zene) postrojenim u vrstu. Ljudi nisu sortirani po visini. U ruci drzis kanap i lenjir. Kako ces odrediti visinu najvise zene u vrsti?

Ako znas odgovor na to pitanje znas da resis i ovaj problem. Misilm da sam ti dovoljno pomogao.
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste18.01.2020. u 06:43 - pre 51 meseci
Citat:
Dobro, ako idem ovim metodom kojim sam rešio zadatak četrnaest, red po red, naći ću najveći neparan broj u svakom redu.
Onda od ta četiri broja opet nađem najveći.
Ali mi nije baš jasno kako ću odrediti njegovo mesto.

Python lista ima index() funkciju koja vraća poziciju tj. indeks elementa u listi, npr.
Code:
[31, 20, 26, 41].index(41)
3


Sad samo prođi kroz listu i proveri da li je broj neparni i da li je veći od prethodnih, i ako je True, zabeleži ga, kao i njegovu poziciju.
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 794



+630 Profil

icon Re: Zadaci za wannabe pythoniste18.01.2020. u 12:31 - pre 51 meseci
Zaboravio sam da pomenem i enumerate(). Kada prolazis kroz listu u for-petlji, listajuci element po element:
for elem in [11, 13, 14, 17, 21]:
print elem

Dobices spisak elemenata liste, jedan ispod drugog. Ali ako zelis da uz to vodis racuna i o njihovim indeksima, mozes da koristis enumerate():
for i, elem in enumerate([11, 13, 14, 17, 21]):
print "%d\t%d" % (i, elem)

U slucaju matrice to je:
matrix = =[[1,3,5], [2, 4, 8], [3, 5, 3]]
for j, row in enumerate(matrix):
for k, cell in enumerate(row):
print "Matrica (%d,%d):\t%d" % (j, k, cell)
# Rezultat:
Matrica (0,0): 1
Matrica (0,1): 3
Matrica (0,2): 5
Matrica (1,0): 2
Matrica (1,1): 4
Matrica (1,2): 8
Matrica (2,0): 3
Matrica (2,1): 5
Matrica (2,2): 3

Inace, ovo je jedan od prvih algoritama koji se obradjuje na svakom pocetnom kursu programiranja - nalazenje minimuma i maksimuma niza. Analogija sa kanapom i strojem ljudi je bas potpuna. Prosta pravolinijska procedura. Ostavljam tebi da sam dodjes do tacnog postupka, nije tesko. A uz enumerate() funkciju diskusija o listama je recimo kompletna.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste18.01.2020. u 12:50 - pre 51 meseci
Prošao sam taj deo sa listama, indexima i ostalim.
Lupao glavu danas i evo došao do nekog rešenja kad je obična lista u pitanju:

Code:
niz = [23, 33, 44, 55, 11]
niz_deo = len(niz) - 1
max = [niz[0]]
for i in niz[1:niz_deo]:
    if i%2 != 0 and i > niz[0]:
        max.append(i)
        max1 = max.pop(0)
kolona = niz.index(max[0]) + 1
print('Najveći neparni broj je u koloni: ', kolona)


rezultat:

Najveći neparni broj je u koloni: 4

Onda sam krenuo na listu lista, tj matricu i jasno mi je da treba da imam dve petlje

niz = [[23, 33, 44, 55, 11],
[13, 39, 74, 85, 61],
[67, 49, 94, 37, 10],
[42, 66, 44, 83, 27]]

Code:
max = niz[0][0]

for i in niz:
    for j in i:
        if j%2 != 0 and j > max:


ali imam problem sa upoređivanjem veličine dva broja.
Ovako u prvom prolazu upoređujem j sa prvim brojem u matrici,
ali ne vidim kako da taj max broj posle zamenjujem brojem iz prethodnog prolaza kako prolazim kroz petlju.
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 794



+630 Profil

icon Re: Zadaci za wannabe pythoniste18.01.2020. u 14:13 - pre 51 meseci
Mislim da tebi ozbiljno nedostaje algoritamski nacin razmisljanja. Nisam pomenuo uzaludno onu analogiju sa kanapom i vrstom ljudi. Recimo da treba da nadjes najviseg coveka, sta ces uraditi? Imas kanap i lenjir. Znaci, uzmes kanap, stanes ispred prvog coveka, izmeris ga od pete do glave i tacku na kanapu koja dodiruje vrh njegove glave uhvatis prstima (ili vezes cvor, obelezis flomasterom ... sta god ...). Stanes ispred sledeceg, izmeris ga ... pa ako je polozaj prstiju/cvora/fleke na kanapu iznad njegove glave, znaci on je nizi od prethodnog, tako da ides dalje ne menjajuci polozaj prsta ... kada nadjes nekog viseg, pomeras prst navise (ili vezes novi cvor). Na kraju, kada prodjes celu vrstu ljudi, uzmes lenjir i izmeris duzinu kanapa od pocetka do pozicije na kojoj se finalno nalazi prst (odnosno vezao cvor ili sta vec ...) Znaci:
Code:
ljudi = [ 165, 190, 185, 172, 168, 173, 189, 188 ]   # Visine ljudi u vrsti
kanap = ljudi[0]   # Stajem ispred prvog coveka i izmerim ga
covek = 0            # Njegova pozicija je 0
for id, h in enumerate(ljudi):
    if h > kanap:      # Ako je glava coveka iznad kanapa - nasli smo viseg!
        kanap = h      # Pomeramo prst na njegovu visinu
        covek = id      # Upisujemo njegovu poziciju
print 'Najvisi covek u stroju je # ' + str(covek) + ', njegova visina izmerena kanapom je: ' + str(kanap)

Gornje resenje radi dobro, osim za specijalan slucaj kada rekord u visini deli vise ljudi. Onda bi verovatno trebalo da pamtis negde pozicije tih rekordera. Nije tesko izmeniti program da to postigne:
Code:
ljudi = [ 165, 191, 185, 172, 168, 190, 190, 188 ]   # Visine ljudi u vrsti
kanap = ljudi[0]         # Stajem ispred prvog coveka i izmerim ga
covek = [ 0 ]            # Upisujem ga u listu visinskih rekordera
for id, h in enumerate(ljudi):
    if h > kanap:        # Ako je glava coveka iznad kanapa - nasli smo viseg!
        kanap = h        # Pomeramo prst na njegovu visinu
        covek = [ id ]   # Ispraznimo listu i zapamtimo njegovu poziciju 
    elif h == kanap and id > 0:  # Naisao si na coveka iste visine kao trenutno najviseg, ali koji nije prvi sleva
        kanap = h
        covek.append(id) # Dodaj poziciju na listu
if len(covek)>1:
    print 'Najvisi ljudi u stroju su na pozicijama # ' + str(covek) + ', njihovavisina izmerena kanapom je: ' + str(kanap)
else:
    print 'Najvisi covek u stroju je na poziciji # ' + str(covek[0]) + ', njegova visina izmerena kanapom je: ' + str(kanap)


Ovo je zaista bukvar programiranja i prvi zadatak koji se uci na prvim casovima, danas cak i u osnovnoj skoli. Tebi je potrebna dobra knjiga koja se bavi algoritmima i strukturama podataka. Programiranje ne moze da se uci bez sustinskog razumevanja nacina rada, odnonso algoritma programa.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste18.01.2020. u 14:56 - pre 51 meseci
Cek ti pamtis sve duplikate bez obzira da li je max visina ili nije? Zar ne bi trebalo prvo da odradis maksimum pa onda skupis sve ljude sa datom visinom?

recimo:
Code:

import Data.List
collect l = (foldl (\m (i,h) -> if h == max_h then (i:m) else m) [] $ zip [0..] l , max_h)
    where max_h = maximum l
main = do
    let ljudi = [ 165, 191, 185, 172, 191, 168, 190, 190, 188 ]
    print $ collect ljudi


Code:

~/examples/haskell >>> ./maxheight                                                                                                                                                                                       
([4,1],191)


 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 794



+630 Profil

icon Re: Zadaci za wannabe pythoniste18.01.2020. u 15:35 - pre 51 meseci
Citat:
Branimir Maksimovic: Cek ti pamtis sve duplikate bez obzira da li je max visina ili nije? Zar ne bi trebalo prvo da odradis maksimum pa onda skupis sve ljude sa datom visinom?
Samo ako su ti ljudi isti kao i trenutni maksimum. U suprotnom, kada se pojavi novi maksimum lista se brise. Recimo, ako je niz [ 180 190 190 195 194 195 193 ], tada pamtim pozicije 1 i 2 (gde su ovi od 190), ali kada naidje ovaj 195 na poziciji 3, niz [1, 2] se brise i dobija vrednost [3]. Na kraju liste bice [3, 5]. Ovo mi je prvo palo na pamet i zahteva samo jedan prolaz kroz listu. Ova tvoja ideja zahteva dva prolaza, ako se ne varam? Ne poznajem haskell uopste. Sigurno ima i boljih resenja, ovo je bio sam brzinski demo ...
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste18.01.2020. u 15:43 - pre 51 meseci
Citat:
B3R1:
Mislim da tebi ozbiljno nedostaje algoritamski nacin razmisljanja. Nisam pomenuo uzaludno onu analogiju sa kanapom i vrstom ljudi.

Ovo je zaista bukvar programiranja i prvi zadatak koji se uci na prvim casovima, danas cak i u osnovnoj skoli. Tebi je potrebna dobra knjiga koja se bavi algoritmima i strukturama podataka. Programiranje ne moze da se uci bez sustinskog razumevanja nacina rada, odnonso algoritma programa.


Hvala na vrlo plastičnom i jasnom primeru. Pomogao je.
Počeo sam inače da idem kroz Guttagovu knjigu koju si preporučio. Doduše ide polako, ali važno je da napredujem.

Analizirajući tvoj primer, rešio sam i nalaženje najvećeg broja za matrix.

niz = [[23, 33, 44, 55, 11],
[13, 39, 74, 85, 61],
[67, 149, 94, 37, 10],
[42, 66, 44, 83, 27]]

max = niz[0][0]
for i in niz:
for j in i:
if j%2 != 0 and j > max:
max = j
print('Najveći broj je', str(max))

Da bih našao njegovu poziciju, da li i u matrixu mogu da nađem index sa nečim sličnim kao niz.index(max), kao što to radi u običnoj listi?

brojevi = [23, 54, 65, 3, 4, 5, 6, 16, 33, 44]

brojevi.index(65)
2
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste18.01.2020. u 15:49 - pre 51 meseci
Ber:"U suprotnom, kada se pojavi novi maksimum lista se brise."

ah, da, taj detalj sam propustio.
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste18.01.2020. u 15:59 - pre 51 meseci
Citat:
ali imam problem sa upoređivanjem veličine dva broja.
Ovako u prvom prolazu upoređujem j sa prvim brojem u matrici,
ali ne vidim kako da taj max broj posle zamenjujem brojem iz prethodnog prolaza kako prolazim kroz petlju.

Napisao sam ti u gornjem postu. Na primer:

Code:
for i in niz:
    for j in i:
        if j%2 != 0 and j > m:
            m = j
            p = i.index(j)         
print(m, p)
85 3

Ili sa enumerate:

for i in niz:
    for index, j in enumerate(i):
        if j%2 != 0 and j > m:
            m = j
            p = index

Sa range i len:

for i in niz:
    for index in range(len(i)):
        if i[index] % 2 != 0 and i[index] > m:
            m = i[index]
            p = index

Bez pomoćnih funkcija:

for i in niz:
    c = 0
    for j in i:
        if j % 2 != 0 and j > m:
            m = j
            p = c
       c+=1


Kao što možeš da vidiš iz navedenih primera, Python ima dosta ugrađenih (built-in) funkcija, pored pomenutih, za tvoj zadatak možeš da iskoristiš npr. max() za najveći broj ili filter() da filtriraš neparne brojeve. Na primer:

Code:
max(filter(lambda n: n[1] % 2 == 1, [(index, row) for sub in niz for index ,row in enumerate(sub)]), key=lambda i: i[1])

(3, 85)


https://docs.python.org/3/library/functions.html
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste18.01.2020. u 16:09 - pre 51 meseci
Bogami, ima dosta načina. Pribeležiću ih.
A ja ni da ubodem makar jedan :))

Za max() sam znao, ali zadatak je bio da se uradi sa for petljom, pa nisam hteo da sabotiram.
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 794



+630 Profil

icon Re: Zadaci za wannabe pythoniste18.01.2020. u 16:52 - pre 51 meseci
Citat:
a1234567:
Analizirajući tvoj primer, rešio sam i nalaženje najvećeg broja za matrix.

Ok, odlican pocetak! Ali ja sam ti nasao jedan bag ... ako je niz[0][0] paran broj veci od svih ostalih (npr. 1000), a ostatak matrice ima i neparne brojeve manje od 1000 najveci neparan broj ce biti pogresno ispisan da bude niz[0][0].

Analogija s kanapom: ako su vrsti ljudi stoje samo muskarci, a tebi je zadatak da nadjes najvisu zenu, ako podjes redosledom da meris prvog coveka bez obzira na pol - tu si pogresio. Znaci, moraces da kanap drzis smotan dok ne naidjes na prvu zenu u vrsti. Ako ne naidjes - rezultat je da medju ljudima nema nikoga zenskog pola.

Imas dva resenja: ako se zadatak ogranici samo na skup prirodnih brojeva, tada je ispravka jednostavna i svodi se na zamen linije:
max = niz[0][0]

alternativnom linijom:
max = -1

Takodje, print na kraju programa mora da postane:
if max < 0:
print 'Matrica ne sadrzi neparne brojeve'
else:
print('Najveći broj je', str(max))

Ako program mora da radi nad skupom celih brojeva, tada ces morati da primenis ovu analogiju s kanapom, pa program postaje nesto slozeniji (ali ne preterano):
Code:
m = niz[0][0]                      # Najveci neparan broj
xm = -1                            # Vrsta sa max neparnim brojem
ym = -1                            # Kolona sa max neparnim brojem

for x, i in enumerate(niz):
    for y, j in enumerate(i):

#  Ako je broj paran, vrti dalje
        if j%2 == 0:
            continue

#  Ako jos nismo nasli prvi neparan broj ILI ga vec imamo, ali ovaj neparan broj je veci ...
        if (xm < 0) or (xm >=0 and j > m): 
            m = j
            xm = x
            ym = y

# Ispis
if (xm < 0):
    print 'Matrica nema neparne brojeve'
else:
    print 'Maksimum %d se nalazi na poziciji: [%d,%d]' % ( m, xm, ym)


U svakom slucaju, napredujes odlicno, svaka cast!
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste19.01.2020. u 01:50 - pre 51 meseci
U ovom drugom primeru mi nije jasno šta ti radi prva polovina ove linija:
if (xm < 0) or (xm >=0 and j > m):

Kad je skratim samo na
if j > m:

Program i dalje radi kako treba.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste19.01.2020. u 05:19 - pre 51 meseci
Posle napornog rada, evo nešto malo za opuštanje :)

 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste19.01.2020. u 06:10 - pre 51 meseci
Citat:
a1234567:
U ovom drugom primeru mi nije jasno šta ti radi prva polovina ove linija:
if (xm < 0) or (xm >=0 and j > m):

Kad je skratim samo na
if j > m:

Program i dalje radi kako treba.


Dobro si to uocio. Za sve vrednosti xm ovo prolazi tako da xm ne utice na uslov.

 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 794



+630 Profil

icon Re: Zadaci za wannabe pythoniste19.01.2020. u 10:44 - pre 51 meseci
Evo novog zadatka, ovog puta jedan od klasicnih algoritama. Ostajemo u svetu nizova i matrica.

Dat je veoma dugacak niz prirodnih brojeva, sortiranih u rastucem redosledu - niz = [ 3, 7, 11, 21, 25, 38, 41 ... ], kao i prirodni broj n (npr. n=123). Ubaciti broj n u niz, na odgovarajuce mesto, tako da niz ostane sortiran. Program treba da radi optimalno i za ekstremno velike nizove.

Na prvi pogled, zadatak je jednostavan: prodjes kroz niz od prvog do poslednjeg elementa, pa kada vidis zgodno mesto tu broj zasadis. To je tzv. linearni algoritam i njegova slozenost je O(n), jer je vreme izvrsavanja programa u opstem slucaju proporcionalno velicini niza. Moze li bolje i efikasnije?

Prednog u odgovoru ima postavljac teme, ostali neka se za sada uzdrze ...
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste19.01.2020. u 11:40 - pre 51 meseci
Evo, javlja se postavljač :)

Ja sam došao do ovakvog rešenja

Code:
niz = [3, 7, 11, 21, 25, 38, 41, 95, 118, 129, 144, 153]
n = 138

for i in niz:
    if i > n:
        ind = niz.index(i)
        niz.insert(ind, n)
        print(niz)
        break


[3, 7, 11, 21, 25, 38, 41, 95, 118, 129, 138, 144, 153]
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste19.01.2020. u 12:04 - pre 51 meseci
Koja je kompleksnost index f-je? Pretpostavljam da je O(n), pa je to ukupno kvadratna slozenost... sto je gore od predlozenog resenja.

edit:
nije kvadratna nego 2n :P

[Ovu poruku je menjao Branimir Maksimovic dana 19.01.2020. u 13:21 GMT+1]
 
Odgovor na temu

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 5 6 7 8 9 10 11 12 13 14 ... Dalje > >>

[ Pregleda: 51016 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.