পাঠ ৪৮ · ৫৬-এর মধ্যে · মডিউল ১১
Home / Courses / Formal Language & Automata Theory / Theory of Computation / স্পেস কমপ্লেক্সিটি ও PSPACE

স্পেস কমপ্লেক্সিটি ও PSPACE

Space complexity & PSPACE
৮ মিনিট পড়া উচ্চ · Advanced Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • স্পেস কমপ্লেক্সিটির সংজ্ঞা এবং টাইম কমপ্লেক্সিটি থেকে এটি কীভাবে ভিন্ন
  • ক্লাস PSPACE-এর ফরমাল সংজ্ঞা ও $P \subseteq NP \subseteq PSPACE$ কন্টেইনমেন্ট
  • স্যাভিচের থিওরেম — স্পেসের জন্য নন-ডিটারমিনিজমের প্রকৃত "মূল্য" কেন টাইমের চেয়ে ভিন্ন ও জানা
  • TQBF — PSPACE-কমপ্লিট প্রবলেম, ও এর জন্য একটি বাস্তব রিকার্সিভ এভালুয়েটর

১ · স্পেস কমপ্লেক্সিটি — মেমোরি দিয়ে জটিলতা মাপা

M10 জুড়ে আমরা একটি টুরিং মেশিন সমস্যাটি সমাধান করতে কত সময় (ধাপ) নেয় তা মেপেছি। কিন্তু একটি TM-এর দ্বিতীয়, স্বতন্ত্র সম্পদ (resource) আছে — সেটি চলার সময় কতগুলো টেপ সেল স্পর্শ করে, অর্থাৎ কতটা স্পেস কমপ্লেক্সিটিSpace Complexityইনপুট দৈর্ঘ্য n-এর ফাংশন হিসেবে, worst-case-এ একটি TM কতগুলো টেপ সেল ব্যবহার করে — সময় যতই লাগুক না কেন, সম্পূর্ণ স্বতন্ত্র একটি মাপ। ব্যবহার করে। এই দুটো সম্পূর্ণ স্বতন্ত্র সম্পদ — একটি অ্যালগরিদম কম সময়ে কিন্তু বেশি মেমোরি ব্যবহার করে চলতে পারে, অথবা উল্টোটা। স্পেস কমপ্লেক্সিটি বিশেষভাবে গুরুত্বপূর্ণ কারণ মেমোরি পুনরায় ব্যবহারযোগ্য (একই সেল বারবার ওভাররাইট করা যায়) — তাই একটি অ্যালগরিদম কম স্পেসে অনেক বেশি সময় ধরে চলতে পারে, যা একটি গুরুত্বপূর্ণ, ভিন্ন ট্রেড-অফ তৈরি করে।

২ · ক্লাস PSPACE

$$PSPACE = \{L : L \text{ কোনো TM } O(n^k) \text{ স্পেসে ডিসাইড করে, কোনো ধ্রুবক } k \text{-এর জন্য}\}$$

লক্ষ্য করুন এই সংজ্ঞায় সময়ের কোনো সীমা নেই — শুধু স্পেস পলিনমিয়াল হতে হবে, TM যত সময় খুশি নিতে পারে (যদিও দেখানো যায় পলিনমিয়াল স্পেসে সীমাবদ্ধ একটি TM এক্সপোনেনশিয়াল সময়ের বেশি চলতে পারে না, কারণ TM-এর সম্ভাব্য মোট কনফিগারেশন সংখ্যা স্পেস দ্বারা সীমাবদ্ধ — একই কনফিগারেশনে দুবার ফিরলে লুপ ধরা পড়ে)।

একটি গুরুত্বপূর্ণ, প্রতিষ্ঠিত কন্টেইনমেন্ট সম্পর্ক (state করা, প্রমাণ ছাড়াই এই মুহূর্তে):

$$P \subseteq NP \subseteq PSPACE$$

PSPACE NP P
P ⊆ NP (L44) ⊆ PSPACE (এই পাঠ) — প্রতিটি স্তর আগেরটির একটি সুপারসেট, যদিও P ⊊ NP নাকি P = NP তা অজানা (L49), P ≠ PSPACE প্রমাণিত।

৩ · স্যাভিচের থিওরেম — স্পেসে নন-ডিটারমিনিজমের প্রকৃত মূল্য

$NP \subseteq PSPACE$ কন্টেইনমেন্টের পেছনে আছে একটি সত্যিই গুরুত্বপূর্ণ, নামকরা ফলাফল:

স্যাভিচের থিওরেম · Savitch's Theorem

যেকোনো ল্যাঙ্গুয়েজ যা একটি নন-ডিটারমিনিস্টিক TM $f(n)$ স্পেসে ডিসাইড করতে পারে, সেটি একটি ডিটারমিনিস্টিক TM মাত্র $O(f(n)^2)$ স্পেসে ডিসাইড করতে পারে।

এর মানে — স্পেসের জন্য, নন-ডিটারমিনিজম বাদ দিতে চাইলে সর্বোচ্চ একটি বর্গাকার (quadratic) ব্লো-আপ লাগে, যা $n^k$-এর জন্য এখনো $n^{2k}$ — অর্থাৎ এখনো পলিনমিয়াল। তাই NP (নন-ডিটারমিনিস্টিক পলিনমিয়াল টাইম)-এর প্রতিটি প্রবলেম, নন-ডিটারমিনিজম প্রতিস্থাপন করলেও, পলিনমিয়াল স্পেসে থেকেই যায় — এই কারণেই $NP \subseteq PSPACE$।

এখানে একটি সত্যিই গুরুত্বপূর্ণ, স্পষ্টভাবে বলার মতো অসামঞ্জস্য (asymmetry) আছে: স্পেসের জন্য আমরা জানি নন-ডিটারমিনিজম খুব বেশি খরচসাপেক্ষ নয় (স্যাভিচ) — কিন্তু টাইমের জন্য আমরা জানি না (P বনাম NP, পরবর্তী পাঠ L49-এর মূল প্রশ্ন) — একই ধরনের প্রশ্ন, দুটি ভিন্ন সম্পদের জন্য, দুটি একেবারে ভিন্ন উত্তরের অবস্থা।

৪ · PSPACE-কমপ্লিট প্রবলেম — TQBF

L45-এর মতোই, PSPACE-এর মধ্যেও "সবচেয়ে কঠিন" প্রবলেম আছে — PSPACE-কমপ্লিট প্রবলেম, যেখানে PSPACE-এর প্রতিটি প্রবলেম পলিনমিয়াল-টাইমে রিডিউস হয়। এর ক্লাসিক উদাহরণ — TQBFTrue Quantified Boolean FormulaSAT-এর সম্প্রসারণ যেখানে প্রতিটি ভ্যারিয়েবলে একটি quantifier ($\exists$ বা $\forall$) যুক্ত থাকে — প্রশ্ন হলো পুরো কোয়ান্টিফায়েড ফর্মুলাটি সত্য কি না। — একটি বুলিয়ান ফর্মুলা যেখানে প্রতিটি ভ্যারিয়েবলের সামনে $\exists$ ("কোনো একটি মান আছে যাতে...") অথবা $\forall$ ("সব মানের জন্যই...") বসানো থাকে, যেমন $\exists x \forall y\, (x \vee \neg y)$। TQBF সরাসরি দুই-খেলোয়াড় গেম সমাধানের সাথে সম্পর্কিত (উল্লেখযোগ্য: অনেক বোর্ড-গেমের সাধারণীকৃত/n×n সংস্করণ PSPACE-কমপ্লিট) — এই বিমূর্ত ক্লাসকে পরিচিত কিছুর সাথে যুক্ত করে।

Python
# P / NP / PSPACE তুলনা টেবিল, এবং একটি সত্যিকারের রিকার্সিভ TQBF-এভালুয়েটর

comparison = {
    "P":      {"resource": "পলিনমিয়াল সময়",      "known_containment": "P subseteq NP subseteq PSPACE",
               "canonical_complete_problem": "সার্কিট ভ্যালু প্রবলেম (P-কমপ্লিট)"},
    "NP":     {"resource": "নন-ডিটারমিনিস্টিক পলিনমিয়াল সময়", "known_containment": "P subseteq NP subseteq PSPACE",
               "canonical_complete_problem": "SAT (কুক-লেভিন, L46)"},
    "PSPACE": {"resource": "পলিনমিয়াল স্পেস (সময় সীমাহীন)", "known_containment": "NP subseteq PSPACE, স্যাভিচ থিওরেম দিয়ে",
               "canonical_complete_problem": "TQBF"},
}

print(f"{'ক্লাস':8s} | {'সম্পদ':30s} | {'কমপ্লিট প্রবলেম'}")
print("-" * 70)
for cls, info in comparison.items():
    print(f"{cls:8s} | {info['resource']:30s} | {info['canonical_complete_problem']}")

print()

# --- TQBF এভালুয়েটর -----------------------------------------------------
# কোয়ান্টিফায়েড ফর্মুলা রিপ্রেজেন্টেশন (নেস্টেড টাপল):
#   ('exists', var, subformula) | ('forall', var, subformula)
#   ম্যাট্রিক্স (কোয়ান্টিফায়ার-মুক্ত অংশ): ('var', name) | ('not', e) | ('and', e1, e2) | ('or', e1, e2)

def evaluate_matrix(expr, assignment):
    if expr[0] == 'var':
        return assignment[expr[1]]
    if expr[0] == 'not':
        return not evaluate_matrix(expr[1], assignment)
    if expr[0] == 'and':
        return evaluate_matrix(expr[1], assignment) and evaluate_matrix(expr[2], assignment)
    if expr[0] == 'or':
        return evaluate_matrix(expr[1], assignment) or evaluate_matrix(expr[2], assignment)
    raise ValueError("অজানা এক্সপ্রেশন")

def evaluate_tqbf(formula, assignment):
    if formula[0] == 'exists':
        _, var, sub = formula
        for val in (False, True):          # দুটোর যেকোনো একটি কাজ করলেই যথেষ্ট
            new_assign = dict(assignment); new_assign[var] = val
            if evaluate_tqbf(sub, new_assign):
                return True
        return False
    if formula[0] == 'forall':
        _, var, sub = formula
        for val in (False, True):          # দুটোই কাজ করতে হবে
            new_assign = dict(assignment); new_assign[var] = val
            if not evaluate_tqbf(sub, new_assign):
                return False
        return True
    return evaluate_matrix(formula, assignment)

# উদাহরণ ১: for all x, exists y : (x XOR y) -- হাতে-যাচাই: x=T হলে y=F কাজ করে, x=F হলে y=T কাজ করে -> সবসময় True
xor_expr = ('or',
            ('and', ('var', 'x'), ('not', ('var', 'y'))),
            ('and', ('not', ('var', 'x')), ('var', 'y')))
formula1 = ('forall', 'x', ('exists', 'y', xor_expr))
print("∀x ∃y (x XOR y) =", evaluate_tqbf(formula1, {}), " (প্রত্যাশিত: True)")

# উদাহরণ ২: exists x, for all y : (x AND y) -- হাতে-যাচাই: y=False হলে x∧y সবসময় False, তাই এমন x নেই -> False
and_expr = ('and', ('var', 'x'), ('var', 'y'))
formula2 = ('exists', 'x', ('forall', 'y', and_expr))
print("∃x ∀y (x AND y) =", evaluate_tqbf(formula2, {}), " (প্রত্যাশিত: False)")

    
evaluate_tqbf-এর রিকার্সিভ গঠন লক্ষ্য করুন — $\exists x$-এর জন্য x=False ও x=True দুটো শাখাই রিকার্সিভভাবে ট্রাই করে (একটি কাজ করলেই যথেষ্ট, ঠিক NFA-স্টাইল "কোনো একটি পথ" যুক্তি), অথচ $\forall x$-এর জন্য দুটো শাখাই কাজ করতে হয়। এই রিকার্সিভ ট্রি-এর গভীরতা ভ্যারিয়েবল সংখ্যার সমান, কিন্তু প্রতিটি ধাপে শুধু একটি partial assignment মনে রাখলেই চলে (পুরো ট্রি একসাথে নয়) — এটাই কেন TQBF পলিনমিয়াল স্পেসে সমাধানযোগ্য যদিও এক্সপোনেনশিয়াল সময় লাগতে পারে।
মূল কথা · Key takeaway

স্পেস কমপ্লেক্সিটি টাইম থেকে সম্পূর্ণ স্বতন্ত্র একটি সম্পদ, আর PSPACE ($P \subseteq NP \subseteq PSPACE$) দেখায় পলিনমিয়াল-স্পেস অ্যালগরিদম টাইমের কোনো সীমা ছাড়াই কতটা শক্তিশালী হতে পারে। স্যাভিচের থিওরেম প্রমাণ করে স্পেসে নন-ডিটারমিনিজম সস্তা (মাত্র বর্গাকার ব্লো-আপ) — টাইমের একই প্রশ্ন এখনো অমীমাংসিত, যা পরের পাঠের বিষয়।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ একটি অ্যালগরিদম কম টাইম কিন্তু বেশি স্পেস ব্যবহার করতে পারে, বা উল্টোটা — একটি বাস্তব উদাহরণ ভাবুন।

একটি ক্লাসিক উদাহরণ — একটি মান আগে থেকে গণনা করে একটি বড় লুকআপ টেবিলে ক্যাশ (cache) করে রাখা: এতে সময় কম লাগে (টেবিল থেকে সরাসরি পড়া) কিন্তু স্পেস বেশি লাগে (পুরো টেবিল সংরক্ষণ করতে হয়) — এটি "টাইম-স্পেস ট্রেড-অফ"-এর একটি ধ্রুপদী উদাহরণ, যেখানে একটি সম্পদ কমাতে অন্যটি বাড়াতে হয়।

প্র ০২ স্যাভিচের থিওরেম যদি টাইমের জন্যও (অর্থাৎ P = NP) সত্য প্রমাণিত হতো, তাহলে কী পরিবর্তন হতো?

তাহলে P = NP প্রমাণিত হয়ে যেত, আর L49-এর পুরো "P বনাম NP" প্রশ্নটাই সমাধান হয়ে যেত — কুক-লেভিনের (L46) প্রতিষ্ঠিত সমস্ত NP-কমপ্লিট প্রবলেম (SAT, 3-SAT, ভার্টেক্স কভার, TSP, ইত্যাদি, L47) হঠাৎ পলিনমিয়াল সময়ে সমাধানযোগ্য হয়ে যেত — একটি বিপ্লবী ফলাফল। কিন্তু বাস্তবে স্যাভিচের থিওরেম শুধু স্পেসের জন্যই প্রমাণিত, টাইমের জন্য এই ধরনের কোনো ফলাফল এখনো নেই — এটাই সেই গুরুত্বপূর্ণ অসামঞ্জস্য যা এই পাঠে বলা হয়েছে।

প্র ০৩ উপরের evaluate_tqbf-এ formula2 ($\exists x \forall y (x \wedge y)$) কেন False, অথচ formula1 ($\forall x \exists y (x \oplus y)$) True?

formula2-তে $x$ প্রথমে নির্বাচিত হয় (বাইরের কোয়ান্টিফায়ার), এবং তারপর সব $y$-এর জন্য $x \wedge y$ সত্য হতে হবে — কিন্তু $y=\text{False}$ নিলে $x \wedge y$ সবসময় False (x যাই হোক না কেন), তাই কোনো $x$-ই কাজ করে না, ফলাফল False। formula1-এ $x$ প্রথমে যেকোনো মান নেয় (বাইরের $\forall$), কিন্তু ভেতরের $\exists y$ প্রতিটি $x$-এর জন্য আলাদাভাবে $y$ বেছে নিতে পারে ($y = \neg x$) — তাই প্রতিটি $x$-এর জন্যই একটি কাজ-করা $y$ পাওয়া যায়, ফলাফল True। কোয়ান্টিফায়ারের ক্রম এখানে সিদ্ধান্তমূলক।

অনুশীলন

  1. চিন্তা করুন: TQBF-এ যদি কোনো ফর্মুলায় ৩টি ভ্যারিয়েবল থাকে, তাহলে evaluate_tqbf সর্বোচ্চ কতগুলো ম্যাট্রিক্স-এভালুয়েশন করতে পারে? (প্রতিটি ভ্যারিয়েবলের দুটি সম্ভাব্য মান আছে ভাবুন।)

    প্রতিটি কোয়ান্টিফায়ার দুটি রিকার্সিভ শাখা খোলে (val=False, val=True), তাই ৩টি ভ্যারিয়েবলের জন্য সর্বোচ্চ $2^3=8$টি সম্পূর্ণ অ্যাসাইনমেন্ট পর্যন্ত পৌঁছানো যায় — এক্সপোনেনশিয়াল সময় (n ভ্যারিয়েবলের জন্য $2^n$), ঠিক যেমন এই পাঠে বলা হয়েছে TQBF সময়ে ব্যয়বহুল হতে পারে, যদিও স্পেসে সাশ্রয়ী।

  2. পরীক্ষা করুন: উপরের কোড সেলে formula1-এর কোয়ান্টিফায়ার ক্রম উল্টে ('exists', 'x', ('forall', 'y', xor_expr)) বানিয়ে Run চাপুন — ফলাফল একই থাকে কি না, আর কেন থাকে বা না থাকে হাতে যুক্তি দিন।

    $\exists x \forall y (x \oplus y)$ — এখন $x$ একবার আগে থেকে বেছে নিতে হবে, এবং তারপর সব $y$-এর জন্য $x \oplus y$ সত্য হতে হবে। কিন্তু যেকোনো নির্দিষ্ট $x$-এর জন্য, $y=x$ নিলে $x \oplus y = \text{False}$ — তাই কোনো $x$-ই সব $y$-এর জন্য কাজ করে না, ফলাফল এবার False। এটি প্রমাণ করে কোয়ান্টিফায়ারের ক্রম বদলালে ফলাফল বদলে যেতে পারে — TQBF-এ ক্রম গুরুত্বপূর্ণ।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

পাঠ ৪৭
আরও NP-কমপ্লিট প্রবলেম