DAG'ı yeni bir DAG'a almanın minimum boyutu


15

Bir DAG'ımız var. düğümlerinde bir fonksiyonumuz var F:VN-(gevşek konuşma, düğümleri numaralandırıyoruz). Bu kurallarla yeni bir yönlendirilmiş grafik oluşturmak istiyoruz:

  1. F(x)F(y)x'y'x'y'F(x)F(y)
  2. Tüm eski kenarları yeni düğümler arasına ekliyoruz: .(x,y)Ex'y'(x',y')E'
  3. Bu yeni grafik hala bir DAG.

Minimum nedir? Minimal yeni bir grafik oluşturan algoritma nedir?|V'|


1
Dolayısıyla, karar problemi şu şekildedir: tepe noktası renkli bir DAG ve bir tamsayı verildiğinde , aynı renkteki köşeleri daraltarak oluşturulan en fazla köşesine sahip bir DAG olup olmadığına karar verin . kkk
András Salamon

1
İki bağlı düğümü büzerseniz, yasak bir öz döngü elde edersiniz?
Yuval Filmus

1
Hayır! Tekrar 2. okuyun: kenarı sadece kasılmadan sonraki iki düğüm hala farklıysa ekleriz. İki düğüm bir tane ile büzülürse, kenarı eklemeyiz.
chx

1
@chx "Minimum" veya "minimum" mu arıyorsunuz?
Realz Lahana Salatası

1
Biraz motivasyon verebilir misin?
vzn

Yanıtlar:


5

Bu sorunun çözümünde bir yaklaşım, tamsayılı doğrusal programlama (ILP) kullanmak olacaktır. Sorunun karar versiyonunu ele alalım: verildiğinde , boyutunda bir DAG almak için aynı renk köşelerini daraltmanın bir yolu var mı?kkk

Bu, standart teknikler kullanılarak bir ILP örneği olarak ifade edilebilir. Orijinal grafikteki her bir tepe noktasının rengi verilir. Her tepe noktasını ; aynı etikete ve aynı renge sahip tüm köşeler daralacaktır. Böylece, karar sorunu şöyle olur: Aynı renkteki aynı etiket köşelerinin daraltılması bir DAG verecek şekilde bir etiketleme var mı?{1,2,,k}

Bunu bir tamsayı doğrusal program olarak ifade etmek için , tepe noktasında etiketi temsil etmek üzere her köşe için tamsayı değişkenini . Eşitsizliği . v v 1 vkvvv1vk

Bir sonraki adım, sözleşmeli grafiğin bir DAG olması gerektiğini ifade etmektir. Uyarı etiketlerin taahhütlü grafik üzerinde topolojik tür (indükleyen bir etiketleme vardır genelliği kaybetmeden, yukarıda listelenen biçimde bir etiketleme, var ise, yani, eğer ilerlettiği taahhütlü grafikte, sonra 'etiketinde etiketinden daha küçüktür ). Bu nedenle, orijinal grafikteki her kenarı için , ve aynı etikete ve aynı renge sahip olduğu ya da etiketinin etiketinden küçük olduğu kısıtlamasını ekleyeceğiz . Özellikle, her kenar içinvwvwvwvwvwvw aynı renge sahip olduğu ilk grafikte eşitsizliği . Her kenar için burada farklı renklere sahiptir, eşitsizliği ekleyin .v,wvwvwv,wv<w

Şimdi bu tamsayı doğrusal programın uygulanabilir bir çözümü olup olmadığına bakın. Sadece etiketleme istenen formda ise (yani, aynı renkteki aynı etiket köşe noktalarının daraltılması bir DAG sağlıyorsa) uygulanabilir bir çözüm olacaktır. Başka bir deyişle, yalnızca orijinal grafiği boyutunda bir DAG ile daraltmanın bir yolu varsa ve uygun bir çözüm olacaktır . Herhangi bir tamsayılı doğrusal programlama çözücüsünü kullanabiliriz; ILP çözücüsü bize bir cevap verirse, orijinal karar sorununa bir cevabımız var.k

Elbette, bunun polinom zamanında tamamlanması garanti edilmez. Hiçbir garanti yok. Ancak, ILP çözücüleri oldukça iyi oldu. Makul boyutlu bir grafik için, bir ILP çözücüsünün bu sorunu makul bir süre içinde çözebilmesi için iyi bir şansınız olmasını beklerim.

Bunu bir SAT örneği olarak kodlamak ve bir SAT çözücü kullanmak da mümkündür. Bunun daha etkili olup olmayacağını bilmiyorum. Yine de ILP versiyonunu düşünmek daha kolaydır.

(Umarım bu doğrudur. Her ayrıntıyı dikkatlice kontrol etmedim, bu yüzden lütfen akıl yürütümü tekrar kontrol edin!


Güncelleme (10/21): Bu formun ILP'leri, DAG'ı topolojik olarak sıralanmış bir sırayla işleyerek ve her bir tepe noktası için etiketin alt sınırını takip ederek doğrusal zamanda çözülebiliyor gibi görünüyor. Bu benim çözümümden şüpheleniyor: bir yerde hata mı yaptım?


Detaylı cevap için teşekkürler! Kısıtlamaları alıyorum ve makul görünüyorlar. Ancak, ILP'de iyi bilgili olmasam da, tamsayı doğrusal programlamanın en üst düzeye çıkarmak (veya en aza indirmek) istediğiniz bir işleve ihtiyacı olduğunu düşündüm ve bunu hiçbir yerde göremiyorum. Sadece Wikipedia'da kontrol ettim, bu yüzden yanlış olabilirim.
chx

@chx, kısıtlamaların fizibilitesini test etmek için ILP kullanıyorum. Bu, ILP çözücüsünden istediğiniz herhangi bir objektif işlevi en üst düzeye çıkarmasını (örn., En üst düzeye çıkar 0) isteyerek ve daha sonra objektif fonksiyonun değerini göz ardı ederek ve sadece ILP'nin uygulanabilir olup olmadığını görmek suretiyle yapılabilir. ILP çözücüsü "Infeasible" yanıtını verir (yani boyutunda sözleşmeli DAG olmadığı anlamına gelir ) veya "Feasible" yanıtını verir ve bulabileceği objektif fonksiyonun en iyi değerini sağlar; bu durumda objektif fonksiyonun değerini görmezden gelirsiniz (ve boyutunda bir DAG olduğunu biliyorsunuzdur ). kk
DW

Bakınız, örneğin, engineering.purdue.edu/~engelb/abe565/... ( "Ben sadece uygun bir çözüm olup olmadığını bilmek istiyorum bulunmaktadır .")
DW

Doğrusal zaman çözümünüzle ilgili olarak; ILP formülasyonunuzu sindirmedim, bu yüzden yargılayamıyorum, ancak sorunun NP-zor olduğunu kanıtlayabildiğimden eminim, bu da doğrusal bir zaman çözümünü oldukça kullanışlı hale getirir: P. Yakında yayınlayacağım.
Realz Lahana Salatası

@RealzSlaw, teşekkür ederim! Bu durumda, bir yerde hata yapmış olabileceğimden şüpheleniyorum (henüz nerede olduğundan emin değilim).
DW

5

NOT: AFAICT, DW bu azaltmada bir delik buldu ve yanlış (yorumlara bakın). Tarihi nedenlerle burada tutmak.

Giriş : Önce Monotone 3SAT problemini sorunumuza indireceğim . Monoton 3SAT sorunu önemsiz olarak tatmin edilebilir olsa da , sorunumuz NP-zor olan Minimum True Monotone 3SAT problemini daha da çözebilir ; dolayısıyla bu problem NP zordur.

Monoton 3SAT'den sorunumuza azalma

Değişkenler dizisi ve cümle dizisi olarak ifade edilen monoton bir boolean formülümüz var. CNF, formundadır , öyle ki:Φ=(V,C)

ve

(ciC) ci=(xjxkxl)||(xj,xk,xlV)

i=1nci|ciC,n=|C|.

Dönüştürmek

Bir grafik yapıyoruz, . G ' deki her tepe noktasının bir etiketi vardır; aynı etikete sahip köşeler büzülmeye uygundur.G=V,EG

İlk önce grafiği aşağıdaki gibi yapılandırıyoruz: her için, her biri x i etiketli iki düğüm ve birinden diğerine yönlendirilmiş bir kenar yapıyoruz (yüksek çözünürlüklü görünüm için resimlere tıklayın).xiVxi

resim açıklamasını buraya girin

Bu düğümler elbette büzülebilir, çünkü aynı etikete sahiptirler. Kıymetli olarak değerlendirilen değişken / düğümleri yanlış, kıymetsiz olanları ise doğru olarak değerlendireceğiz :

resim açıklamasını buraya girin

V'2|V|cbenC, cben=(xjxkxl)|xj,xk,xlVcben

resim açıklamasını buraya girin

cben1cben

2|V|+|C|

xbenxj xkcbencben

İşte yan tümce kısıtlamasını açığa çıkaran başka bir görselleştirme:

resim açıklamasını buraya girin

Bu nedenle, her bir madde kısıtı içerdiği değişkenlerden en az birinin yüklenmemiş kalmasını gerektirir; büzülmemiş düğümler doğru olarak değerlendiğinden, bu değişkenlerden birinin doğru olmasını gerektirir; Monotone SAT'ın cümleleri için tam olarak gerekeni.

Minimum Gerçek Monoton 3SAT'den Azaltma

Monoton 3SAT önemsiz bir şekilde tatmin edilebilir; tüm değişkenleri true olarak ayarlayabilirsiniz.

Ancak, DAG minimizasyon problemimiz en fazla kasılmayı bulmak olduğundan, bu CNF'mizde en yanlış değişkenleri üreten tatmin edici ödevi bulmak anlamına gelir; minimum gerçek değişkenleri bulmakla aynıdır. Bu soruna bazen Minimum True Monotone 3SAT veya burada (bir optimizasyon sorunu veya karar sorunu olarak) veya k-True Monotone 2SAT (daha zayıf bir karar sorunu olarak) denir ; her iki NP zor problem. Bu yüzden sorunumuz NP zor.


Referanslar:

Grafik kaynakları:


1
vay. DW'nin çözümü yanlış olmalıdır (ya da en azından şüphelendiğim NP = P'yi kanıtladık: P) - ama nerede?
chx

(x1x2x6)(x1x4x5)(x3x4x6)x1=x4=x6=Yanlış x2=x3=x5=Doğruc1x1x4x6c1

@DW Sizinle tekrar konuşmak da güzel: D ve iyi şanslar, eğer ikimiz de haklıysak cevabınızda P = NP olabilir! / jk
Realz Lahana Salatası

(x1,x3)

@RealzSlaw, korkarım henüz takip etmiyorum ... Formülümün dönüştürülmesi için herhangi bir neden göremiyorum. Ben zaten inanmak olduğunu Asgari Gerçek Monoton 3SAT örneğidir. Ama bir seviye alayım. Daha genel olarak, önerilen bir azaltma görüyorum, ancak azaltmanın doğru olduğuna dair herhangi bir argüman görmüyorum - bu eksik. İndirgemenin doğru olması için, YES örneklerini YES örneklerine ve NO örneklerini NO örneklerine eşlemelidir. İndirgemeniz için bir doğruluk kanıtı yazmaya çalışırsanız, verdiğim formülü düşündüğünüzde bir sorunla karşılaşacağınızdan şüpheleniyorum.
DW

1

Her değiştirme işleminde (doğrudan ebeveyn-çocuk değiştirmeleri hariç), uzun vadede hangisinin buna değdiğini belirlemeyi önemsiz hale getiren yeni ata-torun ilişkileri eklersiniz. Bu nedenle, basit bir açgözlü algoritma genel durumda başarısız olacaktır. Ancak, kaba kuvvet yaklaşımı yaparsanız, en küçük grafiği belirleyebilirsiniz:

Python-ish (test edilmedi):

def play((V,E),F,sequence=[]):
  """
  (V,E) -- a dag.
  V     -- a set of vertices.
  E     -- a set of directed-edge-tuples.
  F     -- a function that takes a vertex, returns an integer.
  sequence -- the sequence of moved taken so far; starts with/defaults to
              an empty list, will contain tuples of the form (x,y)
              where x is removed and replaced with y.

  Returns the best recursively found solution.
  """

  #find all the integer values in the graph, remember which
  # values correspond to what vertices. Of the form {integer => {vertices}}.
  n2v = {}
  for x in V:
    n = F(x)

    #for each integer, make sure you have a set to put the vertices in.
    if n not in n2v:
      n2v[n] = set()

    #for each integer, add the vertex to the equivalent set.
    n2v[n].add(v)

  #record the best sequence/solution. You start with the current sequence,
  # and see if you can obtain anything better.
  best_solution = list(sequence)

  #Now you will try to combine a single pair of vertices, obtain a new
  # graph and then recursively play the game again from that graph. 

  #for each integer and equivalent set of vertices,
  for n,vset in n2v.iteritems():

    #pick a pair of vertices
    for x in vset:
      for y in vset:

        #no point if they are the same.
        if x == y:
          continue

        #If there is a path from x => y or y => x, then you will be
        # introducing a cycle, breaking a rule. So in that case, disregard
        # this pair.
        #However, the exception is when one is a direct child of the other;
        # in that case you can safely combine the vertices.
        if pathtest((V,E),x,y) and (x,y) not in E and (x,y) not in E:
          continue

        #combine the vertices (function is defined below), discard x,
        # replace it with y, obtain the new graph, (V',E').
        Vp,Ep = combine_vertex((V,E),x,y))

        #record the sequence for this move.
        sequencep = list(sequence) + [(x,y)]

        #recurse and play the game from this new graph.
        solution = play(Vp,Ep,F,sequencep)

        #if the returned solution is better than the current best,
        if len(solution) > len(best_solution):
          #record the new best solution
          best_solution = solution
  #return the best recorded solution
  return best_solution


def combine_vertex((V0,E0),x,y):
  """
  (V0,E0)   -- an initial digraph.
  V0        -- a set of vertices.
  E0        -- a set of directed-edge-tuples.
  x         -- vertex to discard.
  y         -- vertex to replace it with.

  returns a new digraph replacing all relationships to and from x to relate
   to y instead, and removing x from the graph entirely.
  """

  #the final vertex set will have everything except x
  V = set(V0)
  V.discard(x)

  #now you construct the edge set.
  E = set()

  #for every edge,
  for (u0,v0) in E0:
    #recreate the edge in the new graph, but replace any occurence
    # of x.  
    u,v = u0,v0
    #if x is in the edge: replace it
    if u == x:
      u = y
    if v == x:
      v == y

    #sometimes u=v=y and can now be pointing to itself, don't add that
    # edge
    if u == v:
      continue

    #add the new/replaced edge into the edge-set.
    E.add( (u,v) )
  return (V,E)

Gerçekten zor bir sorun olup olmadığından emin değilim, ancak bazı grafikler ile manuel olarak oynamak, çok birleştirici görünüyor. Zor bir şeyin bu probleme indirgenebileceğini veya daha iyi çalışma süresine sahip bir algoritma olup olmadığını merak ediyorum.


1
Ben de merak ediyorum :)
chx
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.