Inbox for mugurel_ionut@yahoo.com    Yahoo! - My Yahoo!     Options - Sign Out - Help
Mail    Addresses    Calendar    Notepad   

Download Attachments
    Prev | Next | Inbox
Date: Mon, 19 Mar 2001 16:36:08 -0500 (EST)
From: Mihai Badoiu <mihai@MIT.EDU>  | Block Address | Add to Address Book
To: Mihai Patrascu <mihai_p@pcnet.ro>
CC: probleme <probleme@ldc.ro>
Subject: Re: re la diverse

Ok, se pare ca nu am dat exemplul cel mai potrivit. (prea multe solutii
diferite care merg) Ideea este in felul urmator (baga la cap ca o sa-ti
foloseasca):

Ideea este sa foloseshti RANDOM. Permutezi elementele random si apoi 
faci
un mic qsort (original). De ce merge? Pai qsort ia timp O(n lg n) cu
probabilitate mare (cel putin n-1/n). Cum ai randomizat inputul o sa fi
sigur ca pt orice test timpul o sa fie ok (adica c*n lg n) si o sa-ti
mearga ok si pe testul care probabil ca e facut ca qsort sa ia n^2.
Daca faci calculul, o sa vezi ca constantele ies bine. Poti sa
implementezi asa ceva foarte repede in timp de concurs si poti sa fi 
sigur
(cu probabilitate cel putin 1-1/1M la testul mare) ca o sa-ti mearga.

Ideea este foarte importanta si foarte folositoare la concurs. Sunt 
multe
probleme la care timpul cel mai rau este mai mic cu un factor de cel 
putin
c*n/lg n timpul mediu. Bine, la olimpiada poate ca nu ai timp sa
demonstrezi, dar o intuitie tot ai. Cand iti dai seama ca algoritmul 
tau
merge mai bine pe cazul mediu, considera ce se intampla daca 
randomizezi
inputul.

Termenul de "chaos from order" chiar exista si se refera exact la ideea
asta, bine aplicata la demonstratii probabilistice. Informatica e cea 
care
imprumuta din alte domenii...

ps O sa raspund la alte eventuale mesaje la sfarsitul saptamanii.

--mihai

On Mon, 19 Mar 2001, Mihai Patrascu wrote:

> ==========================
> === Chaos from order
>
> Well, well... Dupa cum e formulata problema, presupun ca vrei sa afli 
daca
> membrii listei stiu sa faca un merge sau un qsort calumea 
(median-of-three,
> optimizarile alea pentru stiva O(lgN) etc.). Eu personal raman la 
preferinta
> mea pentru heapsort la concurs, dar pe 1M merge probabil groaznic, 
deoarece
> nenoroceste cache-ul procesorului (pe de alta parte quick si merge 
sunt
> foarte localizate). Despre regula cu max 40 de linii, poate tu nu ai 
vazut
> flux maxim scris in <700 de caractere (daca TOP e abonat cumva la 
lista:
> ti-am batut recordul de la lot din '98).
>
> Programul meu merge in 7 sec (generarea fisierului de intrare in 
4sec), ceea
> ce e foarte bine avand in vedere ca e sub Borland C si n-ai memorie. 
Ideea e
> sa faci qsort pe bucati mari si sa interclasezi dup-aia bucatile cu
> heap-uri. Programul are peste 10k, dar e si portabil (merge atat sub 
DOS,
> cat si pe sisteme POSIX).
>
> Totusi, ideea lui Mihai e super (adica ce ne-a interzis sa facem). 
Daca
> sortezi intai dupa mantise (cu radix) si apoi dupa exponenti (tot cu 
radix),
> chiar merge pe IEEE-uri (e un fel de generalizare la radix). Daca ai 
si
> numere negative si pozitive, trebuie sa le sortezi separat.
>
> Promit ce implementez quick, merge, heap si radix pe 1M de double-uri 
maine
> sau poimaine si va trimit rezultatele. Presupui ca nu vrei bucket sau 
alte
> minuni d'astea probabiliste (daca pui limita de 5*solutia comisiei, 
presupun
> ca nu vrei chestii probabilistice).
>
> Inca o nota: daca foloseste cineva qsort-ul din C si se incadreaza in 
de 5
> ori solutia comisiei inseamna ca comisia a dat ca solutie 
bubble-sort. Ideea
> e ca qsort() face un apel la fiecare comparatie, iar un apel costa 
enorm.
> BTW, sub Linux qsort() e implementat cu merge-sort :-)
>
> Si-nca o nota la propunerea de rezolvare cu template-uri C++. La 
concurs nu
> e recomandabil sa folosesti asta (adica nu prea merg template-urile 
pe
> compilatoarele date; la USACO zice clar "do not use..."). Plus, 
credeam ce e
> o lista pentru algoritmicieni, nu persoane care programeaza tragand
> compenente cu mouse-ul in fereastra :-)... Daca vrei, punem pariu ca 
iti
> implementez ceva care sa mearga de 5 ori mai repede ca 
template-urile.
>
> mihai_p
>
>
>

     Prev | Next | Inbox
Download Attachments

Yahoo! Messenger - Send instant messages to friends!
Address Book · Alerts · Auctions · Bill Pay · Bookmarks · Briefcase · Broadcast · Calendar · Chat · Classifieds · Clubs · Companion · Domains · Experts ·Games · Greetings · Home Pages · Invites · Mail · Maps · Member Directory · Messenger · My Yahoo! · News · PayDirect · People Search · Personals · Photos · Shopping · Sports · Stock Quotes · TV · Travel · Weather · Yahooligans · Yellow Pages · more...

Privacy Policy- Terms of Service - Guidelines
Copyright © 1994-2001 Yahoo! Inc. All rights reserved.