Jump to content

cmiN

Active Members
  • Posts

    1609
  • Joined

  • Last visited

  • Days Won

    27

Everything posted by cmiN

  1. Edited 1st post.
  2. Pentru cei care vor sa mai prinda cate ceva fara sa se chinuie pe wiki... Am scris o clasa in Python (mai mult pentru implementare teoretica nu si pentru aplicabilitate) care sorteaza un tablou unidimensional (vector), mai exact o lista ce poate contine orice, iar in functie de compatibilitatea operatorilor in alte limbaje de programare lista se poate rezuma doar la intregi. Am pus accentul pe 2 metode de sortare foarte usoare si destul de populare (bubblesort si quicksort) si am mai folosit o metoda aflata printre functiile implicite in Python (timsort) de asemenea aceeasi metoda este folosita si in Java. Cea mai optima este timsort (functia sorted din Python) O(n*log(n)), dar mai la indemana este bubblesort O(n*(n+1)/2) si ceva mai bun de atat este quicksort O(n*log(n)). In cel mai rau caz se poate obtine O(n^2) atat pentru bubblesort cat si pentru quicksort in schimb pentru timsort nu se poate obtine un timp mai mare ca O(n*log(n)) deci ca performanta timsort > quicksort > bubblesort. Voi incepe cu cea mai simpla, bubblesort. Sunt luate doua cate doua elemente la rand si sunt schimbate intre ele in caz de nu respecta conditia (primul sa fie mai mic decat al doilea). Cat timp este efectuata cel putin o schimbare se reia procesul de cautare + schimb pana cand nu se va mai gasi niciun element care sa fie mai mare ca urmatorul. De fiecare data cand se reia procesul de cautare se va cauta pana la un index mai mic cu 1 decat cel anterior deoarece pe acea pozitie se stie sigur ca se afla cel mai mare element. Exemplu: 5 3 6 5 4 ... se parcurge pana la penultimul element al vectorului ... 5 > 3 -> adevarat atunci swap -> 3 5 6 5 4 5 > 6 -> fals -> 3 5 6 5 4 6 > 5 -> adevarat atunci swap -> 3 5 5 6 4 6 > 4 -> adevarat atunci swap -> 3 5 5 4 6 ... se termina prima parcurgere a vectorului ... <dupa cum se vede cel mai mare element a fost impins in coada vectorului si au existat schimburi> 3 5 5 4 6 ... se parcurge pana la antepenultimul element al vectorului ... 3 > 5 -> fals -> 3 5 5 4 6 5 > 5 -> fals -> 3 5 5 4 6 5 > 4 -> adevarat -> 3 5 4 5 6 ... se termina a doua parcurgere a vectorului ... <dupa cum se vede au existat schimburi iar cel mai mare element in afara de ultimul a fost mutat imediat in stanga ultimului> 3 5 4 5 6 ... se parcurge pana la cel din stanga antepenultimului ... 3 > 5 -> fals 3 5 4 5 6 5 > 4 -> adevarat -> 3 4 5 5 6 ... se termina a treia parcurgere ... <desi vectorul e ordonat au existat schimbari> 3 4 5 5 6 ... se mai parcurge inca o data vectorul pana la o pozitie cu 1 mai la stanga cazului anterior (acelasi procedeu ca si in celelalte cazuri) ... 3 > 4 -> fals -> 3 4 5 5 6 ... se termina a patra parcurgere ... <vectorul e ordonat si NU au existat schimbari> sortarea se termina cu rezultatul final: 3 4 5 5 6 Cealalta metoda, quicksort. Se alege si se elimina un element din vector numit pivot (de obicei ultimul). Se creeaza inca 2 vectori goi sa zicem "mic" si "mare". Se ia fiecare element din noul vector format (cel fara pivot) si este comparat cu pivotul, daca este mai mic sau egal cu el elementul este adaugat in "mic" altfel daca este mai mare atunci este adaugat in "mare". Apoi vectorul "mic" este supus aceluiasi procedeu ca si primul vector, este concatenat cu pivot si din nou concatenat cu "mare" care si el la randul lui este supus aceluiasi procedeu cat timp vectorul argument are lungimea mai mare ca 1. Astfel solutia este creeata recursiv prin dezbina si cucereste. Exemplu: procedeu(5 3 6 5 4) pivot1: 4 mic1: 3 mare1: 5 6 5 solutia1 = procedeu(mic1) + pivot1 + procedeu(mare1) procedeu(3) solutia2 = 3 procedeu(5 6 5) pivot3: 5 mic3: 5 mare3: 6 solutia3 = procedeu(mic3) + pivot3 + procedeu(mare3) procedeu(5) solutia4 = 5 procedeu(6) solutia5 = 6 Deci: solutia1 = solutia2 + pivot1 + solutia3 dar solutia3 = solutia4 + pivot3 + solutia5 Astfel: solutia1 = solutia2 + pivot1 + solutia4 + pivot3 + solutia5 Adica: solutia1 = 3 4 5 5 6 Ultima metoda, timsort este un hibrid intre mergesort si insertionsort vezi wiki pentru mai multe detalii. E ceva mai complicat gen quicksort, insa nu este folosit pivotul si se insereaza in alt vector elemente spre deosebire de bubblesort si quicksort care sunt metode de comparatie. Python 3.x (vezi python.org) #! /usr/bin/env python3 # 04.01.2011 cmiN class Sort: pyvec = list() bubblevec = list() quickvec = list() def pysort(self, vec): return sorted(vec) def bubblesort(self, vec): flag = True length = len(vec) j = 1 while flag: flag = False for i in range(length - j): if vec[i] > vec[i + 1]: tmp = vec[i] vec[i] = vec[i + 1] vec[i + 1] = tmp flag = True j += 1 return vec def quicksort(self, vec): if len(vec) > 1: lss, grt = list(), list() piv = vec.pop() for x in vec: if x <= piv: lss.append(x) else: grt.append(x) return self.quicksort(lss) + [piv] + self.quicksort(grt) else: return vec def str_to_int(self, vec): for i in range(len(vec)): vec[i] = int(vec[i]) return vec def __init__(self, vec): self.pyvec = self.pysort(vec[:]) self.bubblevec = self.bubblesort(vec[:]) self.quickvec = self.quicksort(vec[:]) def show(args): for arg in args: for x in arg: print(x, end=" ") print() def main(): vec = input("Enter numbers separated by spaces: ") sob = Sort(vec.split()) show([sob.pyvec, sob.bubblevec, sob.quickvec]) if __name__ == "__main__": main() Credite: cmiN (inspirat de pe wiki, am scris doar si la inceput "alora carora le este sila") Data: 04.01.2011
  3. frustrare, practica, ajutor, viitor
  4. Daca ceva poate fi in 2 locuri in acelasi timp inseamna ca poate fi si in 2 * 2 locuri, mai exact in 2^n unde n apartine lui N, iar masa ii poate fi infinita ? Inseamna ca a atins viteza luminii care parca era imposibil , oricum asta ar inseamna ca tot universul sa fie atras de acel obiect sau mai exact orice entitate sa fie atrasa de orice entitate cu o forta infinita, singura explicatie fiind: existenta universurilor paralele, dar numai sub anumite proprietati poti cuantifica existenta materiei unui alt univers in afara de cel in care existi.
  5. Am un mail care il trimit la toti care ma intrebau asta ... si mailul acela spune asa:
  6. Da, dar cei care o vor face vor sti mai departe ce sa faca si cum sa se "comporte" cu codul respectiv, bat la pariu ca e mai mult un sistem anti-ratati .
  7. cmiN

    IT Security

    Nu sectiunea (cu tot cu proprietatile ei) va fi cea care va schimba calitatea discutiilor si materialelor, ci userii, devotamentul si IQ lor. Uita-te si tu in tot forumul, vezi ca se discuta numai lucruri de calitate si fiecare sublucru este atent teoretizat si practicat pana la capat iar ce e legat de securitate se discuta cu mai putin interes deoarece nu exista o sectiune potrivita pentru asa ceva si nu stiu eu ?
  8. Abia astept sa implementez in Python, doar ca trebuie sa vad mai low level treaba cu socket. Ceva de genul merge si la FTP, dar nu stiam ca sunt limitate conexiile active.
  9. Importi/incluzi o librarie de sistem ca sa te folosesti de shell apoi folosesti variabilele alea globale de sistem: Doar batch ar fi: cd %programfiles% start . Python: import os os.chdir(os.getenv("programfiles")) os.system("start .") Trebuie sa ai ceva similar si in Delphi si daca te uiti mai adanc prin clase si functii ai sa vezi ca trebuie sa fie si o metoda prin care nici macar nu te folosesti de shell, doar cauta referinte spre libraria aia care se foloseste de sistemul de operare sau pur si simplu de sistem.
  10. 1 pagina si deja stii Python .
  11. cmiN

    Singuratate

    Imi iau mancare din kauf, bag niste jazz (thefabulousstrip) si joc DotA sau citesc ceva de algoritmica. Is buni si prietenii aia virtuali la ceva, cel putin aia (majoritatea) se comporta mai "adecvat".
  12. Si mie imi place ... da faceti sigla 3D .
  13. Prea mult scris subtire si ros-albastru (ce ai marcat tu si ce se vede din link-uri). Meniul ala trebuia sa fie meniu, mare, boldat, un overlay in degradeu. Sunt prea vizibile toate chestiile si dau dureri de cap, trebuia ceva mai simplu structurat in anexe si sa vada clar ceea ce chiar vrea utilizatorul.
  14. Puneti ceva zapada pe sigla cu pensula ... da bine.
  15. wtf ... mirror la alea cu cai.
  16. Dap 3 e falsa, 1, 2 si 4 evident adevarate. *Note: coada (la magazin) primul venit primul servit stiva (de farfurii) primul venit ultimul servit
  17. Am pastrat psd-ul ... mai adaug chestii daca e sa-mi mai vina idei.
  18. cmiN

    RST Messenger

    Look: http://rstcenter.com/forum/28570-propun-o-ideie-daca-sunteti-deacord.rst#post191200
  19. Smecher, chestiile mai vechi (de ex. FAT) mi s-au parut dintotdeauna mai logice, simple. Nu stiu daca e pe forum un guide ca lumea despre 32 vs 64 bit la procesoare, daca gasesti cauta si pune tot ceva de genu asa frumos cu exemple si ceea ce vrea sa auda utilizatorul nu termeni specifici. Sau si despre chestii hardware ... de exemplu cum e mai bine sa luam RAM 2 placi de 1 gb sau 4 de 512 dual channel sau nu in fiecare caz pe rand.
  20. cmiN

    Romania Webmasters

    Daca trece unu cumva de filtru si merge exploatat un rfli / lfi (imi place parametrul ala dar poate fi periculos ) ?
  21. O suma asa mare atrage atentia asupra acelor numere cu suprataxa care banuiesc ca is in numar mic fata de cate sipuri au folosit. Iar aia nu erau asa prosti sa vada cum le este umpluta factura de apeluri catre diverse rahaturi asa ca au investigat. Sa le ataci / folosesti prin socks / proxy ia extrem de mult, sa "creezi" o persoana si date imaginare care sa sustraga banii in locul tau e iarasi prea complex si in final ar fi fost prea simplu daca doar toate astea ar fi fost cauza depistarii baietilor .
  22. cmiN

    Algoritm

    Mai pe programeste ;p. Fara sortari, cautari, vectori, draci, laci, craci. Totul se face liniar in O(n). #include <iostream> using namespace std; int main() { int n, nr, max = -32767, ap = 0; bool flag = false; cout << "n: "; cin >> n; cout << "Introdu " << n << " numere...\n"; while (n-- > 0) { cin >> nr; if (nr < 0) { flag = true; if (nr == max) { ap++; } else if (nr > max) { max = nr; ap = 1; } } } if (flag) { cout << max << " " << ap; } else { cout << "NU EXISTA"; } system("pause >nul"); return 0; }
  23. Nu-ti merge Adobe .
  24. De fapt linuxul, mai ales distributia Ubuntu a fost creata sa fie mult mai fiabila si mai usoara de utlizat decat oricare windows, dar cum majoritatea sunt familiari cu micr0shit li se pare mult mai usor.
  25. C++ code by cmiN - 42 lines - codepad Eroarea este de un epsilon > 0 (->0) (adica daca ii dai ca valoare: x, iar aria unui triunghi va da tot x atunci x de triunghi va fi mai mare ca x introdus ... limita din dreapta) #include <iostream> #include <fstream> #include <math.h> #define fname "triunghiuri.in" using namespace std; struct Punct { int x, y; }; double dist(Punct A, Punct { return sqrt(pow((B.x - A.x), 2) + pow((B.y - A.y), 2)); } int main() { int n, i, nr = 0; double val, lat[3], sp; Punct tgl[3]; cout << "Valoare: "; cin >> val; ifstream fin(fname); fin >> n; while (n-- > 0) { for (i = 0; i < 3; i++) { fin >> tgl[i].x >> tgl[i].y; } lat[0] = dist(tgl[0], tgl[1]); lat[1] = dist(tgl[0], tgl[2]); lat[2] = dist(tgl[1], tgl[2]); // Heron sp = (lat[0] + lat[1] + lat[2]) / 2; if (sqrt(sp * (sp - lat[0]) * (sp - lat[1]) * (sp - lat[2])) > val) { nr++; } } fin.close(); cout << nr; system("pause >nul"); return 0; }
×
×
  • Create New...