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

Download Attachments
    Prev | Next | Inbox
Date: Fri, 16 Mar 2001 15:14:28 -0800 (PST)
From: Cristian Francu <cristian@google.com>  | Block Address | Add to Address Book
To: Lista de/cu probleme <probleme@ldc.ro>
Subject: Re: patrascu - O problema de concurs

> Incredibil, dar chiar am implementat flow de cost minim la concurs.
> Bine, nu era un concurs, ci era o pregatire de la Cluj. Stiu ca nu
> mi-a luat mult. Adica 30 mins e indeajuns, daca stii ce faci.

Oau. Asta-i tot ce pot sa zic. Esti tare. Asta e o informatie 
importanta
pentru olimpici, cred. 30 de minute este foarte rezonabil.

> Daca vreti pot sa va fac un sumar despre flows, dar trebuie sa 
asteptati 1
> saptamana sa iau o mica vacanta de primavara.

Eu vreau :)

> nu e clar ca merge. s-ar putea ca solutia sa aibe drumurile de la 1x1 
la
> NxN diferite, si nu mai e clar cum poti sa gaseshti perechile fara sa
> treci prin 1 nod de 2 ori.

Intre timp m-am apucat si am demonstrat (cred) ca algoritmul ala e 
corect,
cu mici modificari. Deci, algoritmul complet este:

1. scoate nodul N si muchiile lui din graf
2. construieste toate caile de lungime 2 care trec prin 1, din vecinii
nodului 1.
3. construieste toate caile de lungime 3 prin adaugarea unui vecin la
capetele cailor de lungime 2. Se ignora cai pe care le avem deja. Adica
daca obtinem o cale (i, 1, j) de lungime 3 dar o aveam deja listata ca
lungime 2 atunci o ignoram.
...
k. Construieste toate caile de lungime k din cai de lungime k - 1 prin
adaugarea unui vecin la ambele capete. Caile pe care lea aveam deja cu
lungime mai mica se ignora.
...
Pina cind la pasul tz nu se mai obtine nici o cale noua.

In final ciclul dorit este minim de (i, 1, j) cu i si j vecini ai lui
N. La care se adauga doi.

Demonstratie prin inductie: sa presupunem ca totul este corect pina la
pasul k, adica obtinem toate caile de lungime k. Vom demonstra ca
algoritmul calculeaza corect toate caile de lungime k + 1. In primul 
rind
e clar ca toate caile de la pasul k + 1 sint intr-adevar de lungime k +
1. Daca ar fi mai mici ar insemna ca nu am calculat toate caile de 
lungime
k-1 sau k-2, etc. Ramine de demonstrat ca le calculam pe toate. Sa
presupunem ca nu calculam o cale (i,1,j) de lungime k + 1. Atunci pe
drumul de la i la j vom avea un vecin direct fie al lui i fie al lui j. 
Sa
presupunem ca este al lui i si calea este: (i-i1,1,j). Rezulta ca
(i1,1,j) este o cale de lungime k, deci a fost calculata la pasul
anterior. Conform algoritmului trebuia sa dam peste calea noastra, caci 
i
este vecin al lui i1 si in mod evident (i,1,j) nu este printre caile
noastre construite deja. Demonstratia este aproape gata, mai avem numai 
de
aratat ca (i1,1,j) este intr-adevar o cale de lungime k si nu mai
mica. Dar aici intervine proprietatea de solutie partiala optima care
permite programarea dinamica: daca ar exista o cale (i1,1,j) de lungime
mai mica decit k atunci se demonstreaza usor ca (i,1,k) nu este optima,
deci nu e de lungime k+1, ci k sau mai mica, caz in care am fi 
calculat-o
la un pas anterior.

Algoritmul este (cred) O(n^3) nu prea am chef sa il estimez. Ceea ce 
l-ar
face valabil pentru concurs atunci cind N <= 100.

Toate bune,

Cristi

     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.