কম্পিউটার

C/C++-এ 2-সন্তুষ্টি (2-SAT) সমস্যা?


ধরুন f =(x1 ∨ y1) ∧ (x2 ∨ y2) ∧ ... ∧ (xn ∨ yn)।

সমস্যা:f কি সন্তোষজনক?

xi ∨ yi এবং C/C++-এ 2-সন্তুষ্টি (2-SAT) সমস্যা? এবং C/C++-এ 2-সন্তুষ্টি (2-SAT) সমস্যা?

সব সমতুল্য। তাই আমরা প্রতিটি (xi ∨ yi) s কে ঐ দুটি বিবৃতিতে রূপান্তর করছি।

এখন 2n শীর্ষবিন্দু সহ একটি গ্রাফ অনুমান করুন। প্রতিটি (xi∨yi) এর ক্ষেত্রে দুটি নির্দেশিত প্রান্ত যোগ করা হয়

  • ¬xi থেকে yi

  • ¬yi থেকে xi

¬xi এবং xi উভয়ই একই SCC (স্ট্রংলি কানেক্টেড কম্পোনেন্ট) এ থাকলে f সন্তোষজনক বলে ধরা হয় না

অনুমান করুন যে f কে সন্তোষজনক হিসাবে বিবেচনা করা হয়। এখন আমরা f সন্তুষ্ট করার জন্য প্রতিটি ভেরিয়েবলের মান প্রদান করতে চাই। আমরা যে গ্রাফটি তৈরি করি তার শীর্ষবিন্দুগুলির একটি টপোলজিকাল বাছাইয়ের সাথে এটি সম্পাদন করা যেতে পারে। টপোলজিক্যাল সাজানোর ক্ষেত্রে xi-এর পরে xi থাকলে, xi-কে মিথ্যা হিসাবে গণ্য করা উচিত। অন্যথায় এটি সত্য হিসাবে বিবেচিত হওয়া উচিত।

ছদ্ম কোড

func dfsFirst1(vertex v1):
   marked1[v1] = true
   for each vertex u1 adjacent to v1 do:
      if not marked1[u1]:
            dfsFirst1(u1)
      stack.push(v1)
   func dfsSecond1(vertex v1):
      marked1[v1] = true
      for each vertex u1 adjacent to v1 do:
         if not marked1[u1]:
            dfsSecond1(u1)
   component1[v1] = counter
for i = 1 to n1 do:
      addEdge1(not x[i], y[i])
      addEdge1(not y[i], x[i])
for i = 1 to n1 do:
   if not marked1[x[i]]:
      dfsFirst1(x[i])
   if not marked1[y[i]]:
      dfsFirst1(y[i])
   if not marked1[not x[i]]:
      dfsFirst1(not x[i])
   if not marked1[not y[i]]:
      dfsFirst1(not y[i])
set all marked values false
counter = 0
flip directions of edges // change v1 -> u1 to u1 -> v1
while stack is not empty do:
   v1 = stack.pop
   if not marked1[v1]
      counter = counter + 1
      dfsSecond1(v1)
for i = 1 to n1 do:
   if component1[x[i]] == component1[not x[i]]:
      it is unsatisfiable
      exit
   if component1[y[i]] == component1[not y[i]]:
      it is unsatisfiable
      exit
it is satisfiable
exit

  1. C++ এ পার্টিশন সমস্যা

  2. C++ এ বন্ধুদের জোড়ার সমস্যা

  3. সি++ এ তাক লাগানোর সমস্যা

  4. C/C++ এ বার্কলের অ্যালগরিদম