User:Realazthat/Notes/Scrap: Difference between revisions

From Rosetta Code
Content added Content deleted
Line 146: Line 146:
& = &
& = &
\begin{cases}
\begin{cases}
W_{0}(q) \text{if } b(E,C_{p-1},C_{q+1}) = 0 \text{,}\\
W_{0}(q) & \text{if } b(E,C_{p-1},C_{q+1}) = 0 \text{,}\\
W_{1}(q) \text{if } b(E,C_{p-1},C_{q+1}) = 1 \wedge f(E,C_{p-1},C_{q+1}) = 0\text{,}\\
W_{1}(q) & \text{if } b(E,C_{p-1},C_{q+1}) = 1 \wedge f(E,C_{p-1},C_{q+1}) = 0\text{,}\\
W_{2}(q) \text{if } b(E,C_{p-1},C_{q+1}) = 1 \wedge f(E,C_{p-1},C_{q+1}) = 1
W_{2}(q) & \text{if } b(E,C_{p-1},C_{q+1}) = 1 \wedge f(E,C_{p-1},C_{q+1}) = 1
\end{cases}\\
\end{cases}\\
\end{array}
\end{array}

Revision as of 19:37, 4 January 2011

Du


Naive algorithm


newedgdes(C,p,q,r,s):
  return { (C[p-1],C[q+1]), (C[q],C[s]), (C[p], C[r]) }

countbps(E,NE):
  newbps = 0
  for ( ne in NE )
    if ( ne !in E )
      ++newbps
  return newbps


countmainbps(F,E,NE):
  newmainbps = 0
  for ( ne in NE )
    if ( ne !in E && ne in F )
      ++newmainbps
  return newmainbps



m(C,F,E,p):
  min = infinity
  n = |C|
  for ( q in range(p,p-2) )
    for ( s in range( q + 2, p ) )
      r = s - 1
      for ( i in range(2) )
        NE = newedges(C,p,q,r,s)
        if ( |NE| != 0 )
          newbps = countbps(F,E,NE)
          newmainbps = countmainbps(F,E,NE)
          
          if ( newbps == 0 || newmainbps > 0 )
            min = newbps < min ? newbps : min
       
        swap(r,s)
  return min

Better algorithm