src/work/jacint/READ_FLOW
author marci
Fri, 27 Feb 2004 12:58:17 +0000
changeset 134 e606071614f0
permissions -rw-r--r--
nem hekkelunk.
jacint@110
     1
   Heurisztikak:
jacint@110
     2
jacint@110
     3
gap: ha egy 0<i<n szint kiurul, az [i+1,n-1] szinten levoket felrakjuk az 
jacint@110
     4
	n szintre, ezzel nem sertve a tavolsagcimke tulajdonsagot
jacint@110
     5
jacint@110
     6
highest label: a legnagyobb szintu aktivon pumpalunk (2 phase eseten
jacint@110
     7
	persze az n alattiak kozul a legnagyobb szintun)
jacint@110
     8
jacint@110
     9
bound_decrease: nem highest label. Egy b valtozoval lepegetunk lefele
jacint@110
    10
	mig 0-hoz erunk, amikor megemeljuk n-ig (vagy k-ig ha
jacint@110
    11
	az nyilvan volt tartva). Mindig egy b szintu aktivon
jacint@110
    12
	pumpalunk (ha van ilyen, ha nem: --b). Relabel utan tehat 
jacint@110
    13
	nem megyunk a csucs utan, ot majd csak b ujboli felemelese utan
jacint@110
    14
	tudjuk pumpalni. Meglepoen hatekony.
jacint@110
    15
jacint@110
    16
highest label + bound_decrease: preflow.h-ban H0*n relabel-enkent a 
jacint@110
    17
	bound_decrease, mig H1*n relabel-enkent a highest label valtozatot
jacint@110
    18
	futtatjuk az 1. fazisban (a masodik fazis igen gyors az elsohoz
jacint@110
    19
	kepest, igy itt sima highest label fut). Ez igen hatekonynak 
jacint@110
    20
	tunik, ugy latszik, hogy egyesul a ket eljaras elonye. Teszteles
jacint@110
    21
	alapjan a H0=20, H1=1 valasztas elfogadhatonak tunik.
jacint@110
    22
jacint@110
    23
2 phase: az elso fazisban csak az [1,n-1] szintu aktivokon pumpalunk, 
jacint@110
    24
	es alkalmazzuk gap-et. Ha alul nincs aktiv, fentrol kifujjuk
jacint@110
    25
	s-bol a fenti csucsokat a segedgraf egy vissza bfs-evel, es 
jacint@110
    26
	visszacsurgatunk ugyanugy, mint az elso fazisban. Az elso fazis
jacint@110
    27
	utan az n. szint alatti csucsok egy min vagast adnak, es t
jacint@110
    28
	excesse a max folyamertek.
jacint@110
    29
jacint@110
    30
level_list: kezzel irunk egy listat minden szintre az ottani csucsokrol.
jacint@110
    31
 	Ha meg egy k valtozoban nyilvantartjuk a legnagyobb nemures 
jacint@110
    32
	szintet az [1,n] intervallumban, akkor nagyon gyorsan tudunk
jacint@110
    33
	gap eseten a gap feletti csucsokat az n szintre tenni. Ilyenkor
jacint@110
    34
	arra sincs szukseg (ami maskor igen hasznos), hogy nyilvantartsuk
jacint@110
    35
	melyik szinten hany csucs van. 
jacint@110
    36
jacint@110
    37
jacint@110
    38
    A LEDA flowja
jacint@110
    39
jacint@110
    40
max_flow.t tartalmazza a LEDA flowjait, a legutolso fuggveny, 
jacint@110
    41
MAX_FLOW_T a default. Semmi kulonoset nem csinal, 2 fazisu highest label, 
jacint@110
    42
gap eseten bfs-sel szivja fel a csucsokat az n szintre (ez igen rossz 
jacint@110
    43
megoldas suru grafnal). Nyilvan tartja az aktivokat egy valamilyen stackben,
jacint@110
    44
es hogy melyik szinten hany pont van. 5*m lepesenkent (h=5 defaultbol) 
jacint@110
    45
csinal egy bfs-t vagy t-bol (1. fazis) vagy s-bol (2. fazis). Van benne
jacint@110
    46
par rossz megoldas, pl. az elsorol a 2. fazisra valo atteresnel nem kell
jacint@110
    47
egy bfs a t-bol.
jacint@110
    48
jacint@110
    49
jacint@110
    50
jacint@110
    51
    Egy erdekes tapasztalat:
jacint@110
    52
jacint@110
    53
Meglepo modon nagyon sokat gyorsitott amikor az stl stack-jet kezzel
jacint@110
    54
megirtam. Ez talan a G.id(NodeIt v) hatekonysaganak koszonheto. 
jacint@110
    55