Algoritmul Kernighan-Lin

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Notă despre dezambiguizare.svg Dezambiguizare - Dacă sunteți în căutarea algoritmului pentru problema vânzătorului călător de către aceiași autori, consultați euristicile Lin-Kernighan .

Algoritmul Kernighan-Lin este un algoritm euristic pentru soluționarea problemei partiționării unui grafic cu complexitate de calcul .

Acest algoritm, propus în 1970 de Shen Lin și Brian Kernighan , are aplicații importante pentru proiectarea circuitelor digitale și VLSI .

Descriere

Luați în considerare graficul , unde este denotă mulțimea vârfurilor și setul de arcade .

Algoritmul își propune să găsească o partiție a în două subseturi Și de cardinalitate egală, astfel încât suma a costului arcurilor dintre elementele de Și să fie minimizate.

În special, dacă este notat cu

costul intern al (adică suma costului arcurilor între și alte elemente care se află în același subset, fie el sau )
costul extern (adică suma costului arcurilor între și toate celelalte vârfuri care nu aparțin aceluiași set de )
diferența de cost

Atunci avem asta dacă se schimbă două elemente Și (unul aparținând , cealaltă a ), există o reducere a costurilor

unde cu costul arcului este notat între Și .

Algoritmul caută o succesiune optimă de permutații ale unui element de este unul din precum pentru a maximiza . [1] este unul dintre algoritmii optimizați.

Pseudo cod

Vezi [2]

 1 funcție Kernighan-Lin ( G (V, E) ):
 2 determină o partiție inițială a vârfurilor în A și B
 3 fac
 4 A1: = A; B1: = B
 5 calculează D pentru toate a din A1 și b din B1
 6 pentru (i: = 1 până la | V | / 2)
 7 găsește un [i] din A1 și b [i] din B1 astfel încât g [i] = D [a [i]] + D [b [i]] - 2 * c [a [i]] [b [ i]] este maxim
 8 deplasează a [i] la B1 și b [i] la A1
 9 omite a [i] și b [i] din alte considerații
 10 actualizează valorile lui D pentru elementele A1 = A1 / {a [i]} și B1 = B1 / {b [i]}
 11 sfârșit pentru
 12 găsește k care maximizează g_max = g [1] + ... + g [k]
 13 if (g_max> 0) atunci
 14 Schimbă a [1], a [2], ..., a [k] cu b [1], b [2], ..., b [k]
 15 până la (g_max <= 0)
 16 retur G (V, E)

Notă

  1. ^ BW Kernighan și Shen Lin , O procedură euristică eficientă pentru partiționarea graficelor , în Bell Systems Technical Journal , vol. 49, 1970, pp. 291-307.
  2. ^ Da. Pi Ravikumār, Ravikumar, CP, Metode paralele pentru proiectarea aspectului VLSI , Greenwood Publishing Group, 1995, p. 73, ISBN 978-0-89391-828-6 ,OCLC 2009-06-12 .