পাঠ ৪৯ · ৫৬-এর মধ্যে · মডিউল ১১
Home / Courses / Formal Language & Automata Theory / Theory of Computation / P বনাম NP প্রশ্ন

P বনাম NP প্রশ্ন

The P vs NP question
৭ মিনিট পড়া উচ্চ · Advanced Python কোডসহ সম্পূর্ণ বাংলায়

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

  • P বনাম NP প্রশ্নের সঠিক ফরমাল বক্তব্য এবং এটি কীভাবে M10-M11-এর পুরো আর্কের চূড়ান্ত সংশ্লেষণ
  • মিলেনিয়াম প্রাইজ প্রবলেম হিসেবে এর বাস্তব, প্রাতিষ্ঠানিক গুরুত্ব
  • P = NP প্রমাণিত হলে বাস্তবে কী পরিবর্তন হবে — এবং কেন ক্রিপ্টোগ্রাফি এই প্রশ্নের সাথে সরাসরি জড়িত
  • Python দিয়ে পলিনমিয়াল বনাম এক্সপোনেনশিয়াল গ্রোথের নাটকীয়, সংখ্যাগত পার্থক্য

১ · প্রশ্নটি ঠিক কী

L43-এ আমরা ক্লাস P (পলিনমিয়াল সময়ে সমাধানযোগ্য) এবং L44-এ ক্লাস NP (পলিনমিয়াল সময়ে ভেরিফাইযোগ্য) সংজ্ঞায়িত করেছিলাম, এবং সবসময় জানা ছিল $P \subseteq NP$ (যা দ্রুত সমাধানযোগ্য তা দ্রুত ভেরিফাইও যোগ্য — সমাধানটাই নিজের সার্টিফিকেট)। প্রশ্নটি হলো এই কন্টেইনমেন্ট কি কঠোর (strict), নাকি আসলে সমান:

$$P \overset{?}{=} NP$$

অন্যভাবে বললে — যে সমস্যার সমাধান দ্রুত যাচাই করা যায় (NP), তা কি সবসময় শূন্য থেকে দ্রুত সমাধানও করা যায় (P)? এই প্রশ্নটি, এই মুহূর্ত পর্যন্ত (কোর্স লেখার সময়), সম্পূর্ণভাবে অজানা — এবং এটি ক্লে ম্যাথমেটিক্স ইনস্টিটিউটের ৭টি "মিলেনিয়াম প্রাইজ প্রবলেম"-এর একটি, একটি সঠিক প্রমাণের (যেকোনো দিকে) জন্য $\$1{,}000{,}000$ পুরস্কার ঘোষিত — একটি সুনির্দিষ্ট, বাস্তব প্রমাণ যে এই প্রশ্নটি কতটা গভীর ও গুরুত্বপূর্ণ।

২ · বাস্তবে কেন গুরুত্বপূর্ণ

এটি নিছক একটি বিমূর্ত গাণিতিক কৌতূহল নয় — এর বাস্তব, সুদূরপ্রসারী পরিণতি আছে:

যদি P = NP (গঠনমূলকভাবে প্রমাণিত)
L47-এর পুরো NP-কমপ্লিট ক্যাটালগ (SAT, TSP, গ্রাফ কালারিং, শিডিউলিং, অপ্টিমাইজেশন প্রবলেমের বিশাল অংশ) হঠাৎ দক্ষভাবে সমাধানযোগ্য হয়ে যাবে — একটি বিপ্লবী, বিশ্ব-পরিবর্তনকারী ফলাফল।
ক্রিপ্টোগ্রাফির উপর প্রভাব
আধুনিক ক্রিপ্টোগ্রাফি (cross-ref ../cybersecurity/) নির্দিষ্ট প্রবলেম কম্পিউটেশনালি হার্ড থাকার উপর নির্ভর করে — P = NP-এর একটি গঠনমূলক প্রমাণ, বিস্তারিত অনুযায়ী, এই হার্ডনেস অনুমানগুলো ভেঙে দিতে পারে।
বর্তমান কনসেনসাস
দশকের পর দশক দক্ষ অ্যালগরিদম খোঁজার ব্যর্থ চেষ্টার ভিত্তিতে বেশিরভাগ কম্পিউটার বিজ্ঞানী বিশ্বাস করেন $P \neq NP$ — কিন্তু এটি বিশ্বাস (belief), প্রমাণ (proof) নয়।
সৎভাবে বলা · Stated honestly

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

৩ · ঝুঁকিটা সংখ্যায় দেখা

P = NP প্রমাণিত হওয়ার সম্ভাব্য প্রভাব ঠিক কতটা নাটকীয় হবে তা সংখ্যাগতভাবে দেখা যাক — একটি কাল্পনিক পলিনমিয়াল-টাইম SAT অ্যালগরিদম ($O(n^3)$ ধরা হলো, শুধু ব্যাখ্যামূলক) বনাম L44-এর বর্তমান সেরা-জানা ব্রুট-ফোর্স ($O(2^n)$) সময়ের তুলনা করে দেখা যাক ইনপুট সাইজ বাড়ার সাথে সাথে পার্থক্য কতটা বিস্ফোরকভাবে বাড়ে।

Python
# P = NP হলে বাস্তবে কী ঘটতো -- পলিনমিয়াল বনাম এক্সপোনেনশিয়াল গ্রোথের নাটকীয় সংখ্যাগত পার্থক্য

def if_p_equals_np_simulation(sizes, ops_per_second=10**9):
    # ধরে নেওয়া হচ্ছে একটি কম্পিউটার প্রতি সেকেন্ডে ~১০^৯ প্রাথমিক অপারেশন করতে পারে (শুধু ব্যাখ্যামূলক)
    rows = []
    for n in sizes:
        poly_ops = n ** 3           # কাল্পনিক, যদি P=NP-এর একটি O(n^3) SAT সমাধানকারী থাকতো
        brute_ops = 2 ** n          # L44-এর বর্তমান সেরা-জানা ব্রুট-ফোর্স, O(2^n)
        rows.append((n, poly_ops / ops_per_second, brute_ops / ops_per_second))
    return rows

def human_time(seconds):
    if seconds < 1:
        return f"{seconds:.2e} সেকেন্ড"
    minute, hour, day, year = 60, 3600, 86400, 31557600
    if seconds < hour:
        return f"{seconds/minute:.1f} মিনিট"
    if seconds < day:
        return f"{seconds/hour:.1f} ঘন্টা"
    if seconds < year:
        return f"{seconds/day:.1f} দিন"
    if seconds < year * 1e6:
        return f"{seconds/year:.2e} বছর"
    return f"{seconds/year:.2e} বছর (মহাবিশ্বের বয়সের চেয়েও অনেক বেশি)"

sizes = [10, 20, 30, 50, 70, 100]
rows = if_p_equals_np_simulation(sizes)

print(f"{'n':>4s} | {'কাল্পনিক O(n^3) [P=NP হলে]':30s} | {'বর্তমান O(2^n) [ব্রুট-ফোর্স]'}")
print("-" * 80)
for n, poly_t, brute_t in rows:
    print(f"{n:4d} | {human_time(poly_t):30s} | {human_time(brute_t)}")

    
লক্ষ্য করুন n=১০০-এ কাল্পনিক পলিনমিয়াল অ্যালগরিদম মাত্র মিলিসেকেন্ডে চলে, অথচ বর্তমান ব্রুট-ফোর্স সময় লাগবে মহাবিশ্বের বয়সের চেয়েও বহুগুণ বেশি বছর — এটাই ঠিক সেই "সবকিছু বদলে যাওয়া" ঝুঁকি যা P = NP-এর একটি গঠনমূলক প্রমাণে দাঁড়িয়ে আছে, এবং একই কারণে কেন এত বছরের চেষ্টার পরও কোনো দক্ষ অ্যালগরিদম না পাওয়াটা $P \neq NP$-এর প্রতি (প্রমাণ না হলেও) একটি শক্তিশালী পরোক্ষ ইঙ্গিত হিসেবে ধরা হয়।
মূল কথা · Key takeaway

P বনাম NP — M10-M11-এর এই পুরো আর্কের কেন্দ্রীয়, অমীমাংসিত প্রশ্ন — জিজ্ঞেস করে প্রতিটি দ্রুত-ভেরিফাইযোগ্য সমস্যা দ্রুত-সমাধানযোগ্যও কি না। উত্তর অজানা, কিন্তু বাজি অনেক বড়: অপ্টিমাইজেশন থেকে ক্রিপ্টোগ্রাফি পর্যন্ত আধুনিক কম্পিউটিং-এর বিশাল অংশ পরোক্ষভাবে এই একটি অমীমাংসিত প্রশ্নের উত্তরের উপর নির্ভরশীল।

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

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

প্র ০১ "P = NP-এর একটি গঠনমূলক (constructive) প্রমাণ" শব্দগুচ্ছে "গঠনমূলক" কথাটা কেন গুরুত্বপূর্ণ?

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

প্র ০২ মিলেনিয়াম প্রাইজ প্রবলেম হওয়াটা এই প্রশ্নের গুরুত্ব সম্পর্কে কী বলে?

ক্লে ম্যাথমেটিক্স ইনস্টিটিউট মাত্র ৭টি সমস্যাকে "মিলেনিয়াম প্রাইজ প্রবলেম" হিসেবে চিহ্নিত করেছিল (২০০০ সালে) — গণিত ও থিওরেটিক্যাল কম্পিউটার সায়েন্সের সবচেয়ে গভীর, দীর্ঘদিন ধরে অমীমাংসিত প্রশ্নগুলোর মধ্যে থেকে বেছে — প্রতিটির জন্য $\$1{,}000{,}000$ পুরস্কার। P বনাম NP সেই তালিকার একমাত্র প্রশ্ন যা সরাসরি কম্পিউটার সায়েন্স/অ্যালগরিদম থেকে এসেছে — বাকিগুলো বিশুদ্ধ গণিতের (যেমন Riemann Hypothesis)। এটি এই প্রশ্নটির গাণিতিক গভীরতা ও ব্যবহারিক গুরুত্ব — দুটোরই একটি স্বীকৃতি।

প্র ০৩ উপরের কোড সেলে n=১০ ও n=২০-এর মধ্যে ব্রুট-ফোর্স সময় কীভাবে বদলায়, আর এটি $O(2^n)$-এর সাথে কীভাবে মেলে?

n=১০ থেকে n=২০-তে যাওয়া মানে $n$ ঠিক দ্বিগুণ, কিন্তু $2^{20}/2^{10} = 2^{10} = 1024$ গুণ — অর্থাৎ ব্রুট-ফোর্স সময় প্রায় ১০০০ গুণ বেড়ে যায়, শুধু $n$ দ্বিগুণ করার ফলে। এটাই ঠিক এক্সপোনেনশিয়াল গ্রোথের সংজ্ঞাগত বৈশিষ্ট্য — প্রতিটি অতিরিক্ত ইউনিট $n$ সময়কে গুণিতকভাবে বাড়ায় (এখানে ২ গুণ), যোগাত্মকভাবে নয়, যা L43-এর পলিনমিয়াল-বনাম-এক্সপোনেনশিয়াল টেবিলের সাথে সরাসরি সামঞ্জস্যপূর্ণ।

অনুশীলন

  1. চিন্তা করুন: আপনি যদি আজ P = NP-এর একটি সঠিক প্রমাণ আবিষ্কার করতেন (যেকোনো দিকে), কোন ক্ষেত্রগুলো সবচেয়ে বেশি প্রভাবিত হতো বলে মনে করেন — এবং কেন?

    P = NP (গঠনমূলকভাবে) প্রমাণিত হলে — ক্রিপ্টোগ্রাফি/সাইবারসিকিউরিটি (হার্ডনেস অনুমান ভেঙে যাবে), লজিস্টিক্স/ অপারেশন্স রিসার্চ (TSP-স্টাইল অপ্টিমাইজেশন হঠাৎ দক্ষ), ও ওষুধ আবিষ্কার/প্রোটিন ফোল্ডিং-এর মতো বৈজ্ঞানিক গণনা (অনেক NP-হার্ড সাব-প্রবলেম জড়িত) — সবচেয়ে বেশি প্রভাবিত হতো। উল্টোদিকে, $P \neq NP$-এর একটি সঠিক প্রমাণ বর্তমান ব্যবহারিক পরিস্থিতি খুব একটা বদলাবে না (যেহেতু বেশিরভাগ ইতিমধ্যেই এটি ধরে নিয়ে কাজ করছেন) কিন্তু একটি গভীর তাত্ত্বিক প্রশ্নের চূড়ান্ত সমাধান দেবে।

  2. পরীক্ষা করুন: উপরের কোড সেলে sizes-এ n=১৫০ যোগ করে Run চাপুন এবং brute_ops = 2**150-এর মান কত বিশাল হয় দেখুন (Python-এর বিগ-ইন্টিজার সাপোর্টের কারণে সংখ্যাটি সম্পূর্ণ, নির্ভুলভাবে গণনা হবে)।

    $2^{150} \approx 1.43 \times 10^{45}$ — এমনকি $10^9$ অপারেশন/সেকেন্ডে চললেও এটি প্রায় $10^{36}$ সেকেন্ড সময় নেবে, যা মহাবিশ্বের বর্তমান বয়স (প্রায় $4.3 \times 10^{17}$ সেকেন্ড)-এর চেয়ে বিলিয়ন বিলিয়ন গুণ বেশি — সংখ্যাটি সম্পূর্ণভাবে অনুধাবনযোগ্য মাত্রার বাইরে, যা এই পাঠের মূল বার্তাকে আরও জোরালোভাবে প্রতিষ্ঠিত করে।

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

পাঠ ৪৮
স্পেস কমপ্লেক্সিটি ও PSPACE