সরাসরি পর্বে যান
পর্ব ৮১ · ৮৩-এর মধ্যে · মডিউল ১৪

লিখিত ও মৌখিক (ভাইভা) প্রশ্ন — Discrete Mathematics

Discrete Mathematics Written and Viva Questions — Model Answers, Comparisons and Follow-ups

Taught in Bangla, this practice page answers 18 written questions in six groups, from logic and proof to algebraic structures and models of computation, with a fixed frame: definition, comparison table, example and counterexample, when to use which, and limits. Each lists marks, difficulty and where marks are lost. Eleven in-page Python checks cover strong induction, Cantor's diagonal, the 561 trap, toy RSA, Bayes, Euler versus Hamilton and Huffman, and a viva section adds 24 short questions.

এই পর্বে যা শিখবেন

  • “পার্থক্য লিখুন” প্রশ্নে একই মাপকাঠির ছক বানিয়ে “কখন কোনটি” দিয়ে শেষ করা
  • প্রতিটি উপপাদ্যের শর্ত (hypothesis) আগে লেখা, আর একটি প্রতিউদাহরণ দিয়ে শর্তের দরকার দেখানো
  • Induction, cardinality, RSA, গণনা, সম্ভাবনা, recurrence, relation, graph, বীজগণিত আর computability-র মূল তুলনাগুলো নির্ভুলভাবে লেখা
  • উত্তরের প্রতিটি সংখ্যা ছোট brute force দিয়ে মিলিয়ে নেওয়া
  • ভাইভায় ছোট করে বলা, শর্ত উল্লেখ করা, আর না জানলে সৎভাবে যুক্তি দেওয়া

১ · লিখিত উত্তরের কাঠামো — সংজ্ঞা, ছক, উদাহরণ, কখন কোনটি, সীমা

Discrete math-এর লিখিত প্রশ্নের বড় অংশ “ব্যাখ্যা করুন” বা “তুলনা করুন” ধরনের: induction বনাম strong induction, Euler বনাম Hamilton, group বনাম field. বাজারে দুই বস্তা চাল তুলনা করতে হলে দুটিকেই একই মাপকাঠিতে দেখতে হয়: দানার আকার, গন্ধ, ভাঙা দানার ভাগ। একটির গন্ধ আর অন্যটির ওজন বললে তুলনা হয় না। উত্তরেও তা-ই: একই সারির ছক, তারপর এমন একটি উদাহরণ, যেখানে একটি খাটে আর অন্যটি খাটে না।

পাঁচ অংশের কাঠামো
সংজ্ঞা (প্রতীকসহ) → তুলনার ছক → উদাহরণ ও প্রতিউদাহরণ → কখন কোনটি → সীমা ও সাধারণ ভুল
  1. সংজ্ঞা: দুটি ধারণাই প্রতীকে, শর্তসহ। যেমন “partial order মানে reflexive, antisymmetric আর transitive relation”.
  2. তুলনার ছক: তিন থেকে পাঁচটি সারি, প্রতিটি সারিতে একই প্রশ্ন দুই ধারণার জন্য।
  3. উদাহরণ ও প্রতিউদাহরণ: ছোট ও নির্দিষ্ট: চার vertex-এর graph, তিন উপাদানের সেট, ৫৬১-এর মতো একটি সংখ্যা।
  4. কখন কোনটি: পরীক্ষক এখানেই বোঝেন আপনি শুধু মুখস্থ করেননি।
  5. সীমা: কোন শর্ত বাদ দিলে দাবি ভাঙে, আর ছাত্রছাত্রীরা সাধারণত কোথায় ভুল করেন।
প্রশ্নের ধরনসংজ্ঞাছক বা ধাপউদাহরণকখন কোনটি ও সীমা
৫ নম্বর (ছোট তুলনা)১২১১
১০ নম্বর (পূর্ণ তুলনা বা ব্যাখ্যা)২৩৩২

এই ভাগ কোনো নির্দিষ্ট পরীক্ষার নিয়ম নয়; আপনার পরীক্ষার নির্দেশনা আলাদা হলে সেটিই মানুন। সময়ের হিসাব সহজ: মোট মিনিট ÷ মোট নম্বর। ১৮০ মিনিটে ৯০ নম্বর হলে ১০ নম্বরের প্রশ্নে কুড়ি মিনিট। আটকে গেলে সংজ্ঞা আর ছকের কাঠামো লিখে এগিয়ে যান; শুধু কাঠামোতেই অর্ধেক নম্বর থাকে।

নিচের stepper-এ ক-০২ প্রশ্নের (induction বনাম strong induction) ১০ নম্বরের উত্তর ধাপে ধাপে গড়া হয়েছে।

প্রতিটি অংশ যোগ করার পর
যোগ হলো
খাতায় যা লিখলেন
জমা নম্বর
খরচ হওয়া সময়
  1. সংজ্ঞা — ২ নম্বর। দুই নীতিই প্রতীকে, basis আর step আলাদা করে।
  2. সম্পর্ক — আরও ১। “Strong বেশি শক্তিশালী” লেখা ভুল; দুটি একই জিনিস প্রমাণ করতে পারে।
  3. ছক — আরও ২। একই তিন প্রশ্ন দুই নীতির জন্য। মোট ৫ নম্বর, দশ মিনিট।
  4. উদাহরণ — আরও ২। টিকিটের দাবিতে step তিন ধাপ পেছনে তাকায়, তাই তিনটি basis লাগে।
  5. ভুলের জায়গা — আরও ১। একটি basis দিলে কোন n বাদ পড়ে, সংখ্যা দিয়ে দেখানো।
  6. কখন কোনটি — শেষ ২। কুড়ি মিনিটে দশ নম্বর।
বিষয়পর্বলিখিতভাইভা
যুক্তি আর প্রমাণ০১–১৩অংশ ২ (ক-০১–ক-০৩)ভ-০১–ভ-০৪
সেট, সংখ্যাতত্ত্ব, ক্রিপ্টোগ্রাফির গণিত১৪–৩০অংশ ৩ (খ-০১–খ-০৩)ভ-০৫–ভ-০৮
গণনা আর বিচ্ছিন্ন সম্ভাবনা৩১–৪৩অংশ ৪ (গ-০১–গ-০৩)ভ-০৯–ভ-১২
Recurrence আর উন্নত গণনা৪৪–৫১অংশ ৫ (ঘ-০১–ঘ-০২)ভ-১৩–ভ-১৬
Relation, graph আর tree৫২–৬৮অংশ ৬ (ঙ-০১–ঙ-০৪)ভ-১৭–ভ-২০
বীজগাণিতিক কাঠামো আর গণনার মডেল৬৯–৭৭অংশ ৭ (চ-০১–চ-০৩)ভ-২১–ভ-২৪

এই পাতার কোনো প্রশ্ন কোনো নির্দিষ্ট পরীক্ষা, বিশ্ববিদ্যালয়, প্রতিষ্ঠান বা কোম্পানির ইন্টারভিউ থেকে নেওয়া নয়; এ ধরনের প্রশ্ন বিশ্ববিদ্যালয়ের Discrete Mathematics কোর্স, চাকরির লিখিত পরীক্ষা আর ইন্টারভিউতে প্রায়ই আসে। “পরীক্ষক যা খোঁজেন” সারিটি একটি অনুশীলনী ছক। এগারোটি ব্লক পাতাতেই চলে (ব্রাউজারের Python, শুধু standard library); প্রথম ব্লকে Python নামাতে কয়েক সেকেন্ড লাগে। এখানে দেওয়া প্রমাণগুলো “ধারণা” স্তরের; পূর্ণ আনুষ্ঠানিক প্রমাণ আর marking rubric পর্ব ৮২-তে। হাতে-কলমে হিসাবের অনুশীলন পর্ব ৭৯ (Numerical সমস্যার অনুশীলন)-এ, MCQ পর্ব ৮০ (MCQ প্রশ্নব্যাংক)-এ, আর puzzle ও contest-এর গণিত পর্ব ৮৩ (ইন্টারভিউ আর contest-এর গণিত)-এ।

২ · অংশ ক — যুক্তি আর প্রমাণ (মডিউল ১–২)

রিভিশন: পর্ব ০২ (connective আর truth table), পর্ব ০৫ (quantifier-এর ক্রম), পর্ব ০৮ আর পর্ব ০৯ (প্রমাণের পদ্ধতি ও কৌশল), পর্ব ১০ আর পর্ব ১১ (induction).

ক-০১p → q আকারের দাবির জন্য direct proof, contrapositive, contradiction আর proof by cases-এর কাঠামো লিখুন। কোন ধরনের দাবিতে কোনটি স্বাভাবিক, প্রতিটির একটি ছোট উদাহরণসহ তুলনা করুন। Counterexample কখন যথেষ্ট, আর কখন নয়? — ১০ নম্বর (সহজ–মাঝারি)

সংজ্ঞা: Direct proof-এ p ধরে সংজ্ঞা আর আগের উপপাদ্য দিয়ে q-তে পৌঁছাই। Contrapositive-এ ¬q → ¬p প্রমাণ করি, যা p → q-এর logically equivalent. Contradiction-এ p ∧ ¬q ধরে একটি বিরোধ r ∧ ¬r বের করি। Proof by cases-এ p-কে p1 ∨ … ∨ pk-এ ভাগ করে প্রতিটি ক্ষেত্র থেকে q দেখাই।

পদ্ধতিকী ধরে শুরুকখন স্বাভাবিকএক লাইনের উদাহরণ
Directpসংজ্ঞা খুললেই পথ দেখা যায়দুই বিজোড়ের যোগফল: (2a + 1) + (2b + 1) = 2(a + b + 1), জোড়
Contrapositive¬q¬q লিখতে সহজ (“বিজোড়”, “বিভাজ্য নয়”), কিন্তু p থেকে সোজা পথ নেইn² জোড় ⇒ n জোড়: n = 2k + 1 হলে n² = 2(2k² + 2k) + 1, বিজোড়
Contradictionp ∧ ¬qদাবি “নেই”, “অসীম”, “অমূলদ” ধরনের√2 অমূলদ; মৌলিক সংখ্যা অসীম (Euclid)
Casesp-এর ভাগদাবি জোড়-বিজোড়, ভাগশেষ, চিহ্ন বা পরম মানের ওপর নির্ভর করেn² mod 4 ∈ {0, 1}: n জোড় হলে 0, বিজোড় হলে 1

Counterexample: “সব x-এর জন্য P(x)” মিথ্যা দেখাতে একটি counterexample-ই যথেষ্ট। কিন্তু সত্য প্রমাণে হাজার উদাহরণও যথেষ্ট নয়: n² + n + 41 সংখ্যাটি n = 0 থেকে 39 পর্যন্ত মৌলিক, অথচ n = 40-এ 1681 = 41²। আর “কোনো x আছে” ধরনের দাবিতে একটি উদাহরণই প্রমাণ (constructive existence).

সীমা: অনেক “contradiction” প্রমাণ আসলে ছদ্মবেশী contrapositive: ¬q ধরে ¬p পেলে বিরোধ টানার দরকার নেই, contrapositive লিখলেই পরিষ্কার। Contradiction-এ ¬q-এর নেতিবাচক রূপ ঠিকভাবে লিখতে হয়: “সব n-এ” এর নেতি “কোনো n-এ নয়”।

পরীক্ষক যা খোঁজেন: চার কাঠামো প্রতীকে (৪); প্রতিটির একটি সঠিক উদাহরণ (৩); কখন কোনটি (২); counterexample-এর ভূমিকা (১)। পর্ব ০৮ · পর্ব ০৯

যেখানে নম্বর কাটে: converse (q → p) প্রমাণ করে ফেলা; contradiction-এ ¬q-এর বদলে ¬p ধরা; cases-এ কোনো ক্ষেত্র (যেমন n = 0 বা ঋণাত্মক) বাদ রাখা।

ক-০২সাধারণ mathematical induction আর strong induction-এর নীতি লিখুন। দুটির সম্পর্ক কী, আর well-ordering principle এখানে কোথায় আসে? একটি উদাহরণে দেখান কেন strong induction-এ একাধিক basis লাগতে পারে। — ১০ নম্বর (মাঝারি)

সংজ্ঞা: সাধারণ induction: P(b) সত্য, আর প্রতিটি k ≥ b-তে P(k) → P(k + 1) হলে সব n ≥ b-তে P(n) সত্য। Strong induction: basis P(b), …, P(b + j) সত্য, আর প্রতিটি k ≥ b + j-তে P(b) ∧ … ∧ P(k) → P(k + 1) হলে সব n ≥ b-তে P(n) সত্য।

সম্পর্ক: দুটি সমান শক্তিশালী। Q(n) = “P(b), …, P(n) সবই সত্য” নিলে strong induction-এর প্রমাণ Q-এর ওপর সাধারণ induction হয়ে যায়। আর দুটিই well-ordering principle-এর সমতুল্য: ℕ-এর প্রতিটি অশূন্য subset-এর একটি ক্ষুদ্রতম উপাদান আছে। তাই “minimal counterexample” যুক্তি (সবচেয়ে ছোট ব্যতিক্রম ধরে বিরোধ) আসলে induction-এরই আরেক রূপ।

মাপকাঠিসাধারণStrong
Hypothesisশুধু P(k)P(b) থেকে P(k) পর্যন্ত সব
Basis-এর সংখ্যাসাধারণত একটিstep যত ধাপ পেছনে তাকায়, তত
স্বাভাবিক দাবিk + 1 থেকে ঠিক k-তে ফেরা যায় (যোগফল, 2ⁿ > n)k + 1 ভাঙলে অজানা আকারের ছোট অংশ (মৌলিক গুণফল), বা n − 3, n/2

উদাহরণ: ৩ আর ৫ টাকার টিকিট দিয়ে n ≥ 8 টাকা ঠিক মেটানো যায়। Strong induction-এর step: n − 3 মেটানো গেলে একটি ৩ টাকার টিকিট যোগ করলেই n. এই step তিন ধাপ পেছনে তাকায়, তাই basis 8, 9, 10 তিনটিই লাগে।

def payable(n):                      # n = 3x + 5y with x, y >= 0 ?
    return any((n - 5 * y) % 3 == 0 for y in range(n // 5 + 1))

print("not payable up to 30:", [n for n in range(1, 31) if not payable(n)])
print("every n in 8..2000 payable:", all(payable(n) for n in range(8, 2001)))

# strong induction uses P(n-3) -> P(n): it needs three bases
for n in (8, 9, 10):
    y = next(y for y in range(n // 5 + 1) if (n - 5 * y) % 3 == 0)
    print(f"base {n:2} = 3*{(n - 5 * y) // 3} + 5*{y}")

# what goes wrong with only one base (n = 8)?
reached = {8}
for n in range(9, 20):
    if n - 3 in reached:
        reached.add(n)
print("from base 8 alone, the step reaches:", sorted(reached))

আসল আউটপুট (ব্রাউজারের Python):

not payable up to 30: [1, 2, 4, 7]
every n in 8..2000 payable: True
base  8 = 3*1 + 5*1
base  9 = 3*3 + 5*0
base 10 = 3*0 + 5*2
from base 8 alone, the step reaches: [8, 11, 14, 17]

৭ টাকা মেটানো যায় না, তাই শুরু ৮ থেকে। শুধু 8-কে basis নিলে “n − 3 থেকে n” step কেবল 8, 11, 14, 17 … ছোঁয়; 9 আর 10 basis হিসেবে না দিলে মাঝের সংখ্যাগুলো প্রমাণহীন থাকে। ২০০০ পর্যন্ত যাচাই প্রমাণ নয়, শুধু দাবিটি বিশ্বাসযোগ্য করে।

সীমা: Recursive সংজ্ঞার সেটে (string, tree, সূত্র) একই ধারণার নাম structural induction: basis-এ মৌলিক উপাদান, step-এ প্রতিটি নির্মাণ-নিয়ম (পর্ব ১২)। “সব ঘোড়ার রং এক” ধরনের ভুল প্রমাণ step-এর একটি ছোট k-তে (১ থেকে ২) ভাঙে; step-কে প্রতিটি k-তে খাটতে হয়।

পরীক্ষক যা খোঁজেন: দুই নীতি প্রতীকে (২); সমতুল্যতা আর well-ordering (২); ছক (২); উদাহরণ আর basis-এর সংখ্যার কারণ (৩); structural induction বা ভুলের উদাহরণ (১)। পর্ব ১০ · পর্ব ১১

যেখানে নম্বর কাটে: “strong induction বেশি শক্তিশালী” লেখা; basis কম দেওয়া; hypothesis-এ যা প্রমাণ করতে হবে সেটিই ধরে নেওয়া (সব n-এ P(n)).

ক-০৩“অর্ডার ১০০০ টাকার বেশি হলে ডেলিভারি ফ্রি” — এর converse, inverse আর contrapositive লিখুন; কোনটি মূল দাবির সমতুল্য, truth table-এর কোন সারি দিয়ে দেখান। ∀x ∃y আর ∃y ∀x-এর পার্থক্য একটি উদাহরণে বোঝান। — ৫ নম্বর (সহজ)

চার রূপ: p = “অর্ডার ১০০০ টাকার বেশি”, q = “ডেলিভারি ফ্রি”। মূল p → q; converse q → p (“ফ্রি হলে অর্ডার ১০০০-এর বেশি”); inverse ¬p → ¬q; contrapositive ¬q → ¬p (“ফ্রি না হলে অর্ডার ১০০০-এর বেশি নয়”)। Truth table-এর চার সারিতে (TT, TF, FT, FF) p → q আর contrapositive দুটিরই মান 1, 0, 1, 1; converse আর inverse দুটির 1, 1, 0, 1. সারি p = মিথ্যা, q = সত্য (ছোট অর্ডারেও ফ্রি, যেমন কোনো উৎসবের দিনে) মূল দাবি ভাঙে না, কিন্তু converse ভাঙে। তাই মূল ≡ contrapositive, আর converse ≡ inverse.

Quantifier-এর ক্রম: ডোমেইন {0, 1, 2}, আর P(x, y) মানে x + y ≡ 0 (mod 3). ∀x ∃y P সত্য (প্রতিটি x-এর জন্য y = (3 − x) mod 3), কিন্তু ∃y ∀x P মিথ্যা (কোনো একটি y সব x-এর জন্য খাটে না)। ভাষায়: “প্রতিটি রাইডারের একটি রুট আছে” বনাম “একটি রুট সব রাইডারের”। ∃y ∀x থেকে ∀x ∃y আসে, উল্টোটি নয় (পর্ব ০৫)।

পরীক্ষক যা খোঁজেন: চার রূপ (২); সমতুল্যতা সারি ধরে (১); quantifier-এর উদাহরণ আর কোন দিকে implication (২)। পর্ব ০২ · পর্ব ০৩

যেখানে নম্বর কাটে: inverse-কে contrapositive বলা; ¬(p → q)-কে ¬p → ¬q লেখা (ঠিক হলো p ∧ ¬q).

৩ · অংশ খ — সেট, সংখ্যাতত্ত্ব আর RSA (মডিউল ৩–৫)

রিভিশন: পর্ব ১৬ (bijection), পর্ব ১৮ (cardinality), পর্ব ২৪ (Fermat আর Euler), পর্ব ২৫ (Miller–Rabin), পর্ব ২৮ (RSA).

খ-০১Countable আর uncountable সেটের সংজ্ঞা দিন। ℤ, ℚ আর সব প্রোগ্রামের সেট কেন countable, আর (0, 1) ও P(ℕ) কেন নয়, তার ধারণা দিন। কম্পিউটার বিজ্ঞানে এর একটি ফল লিখুন। — ১০ নম্বর (মাঝারি)

সংজ্ঞা: একটি সেট countable, যদি সসীম হয় অথবা ℕ-এর সঙ্গে একটি bijection থাকে (তখন countably infinite). অর্থাৎ উপাদানগুলোকে ১ম, ২য়, ৩য় … করে একটি তালিকায় সাজানো যায়, যাতে প্রত্যেকে কোনো সসীম অবস্থানে আসে। অসীম কিন্তু countable নয় এমন সেট uncountable.

সেটফলধারণা
ℤcountable0, 1, −1, 2, −2, … তালিকা
ℕ × ℕ, ℚcountableকর্ণ ধরে গোনা (Cantor pairing); ℚ-এর প্রতিটি ভগ্নাংশ একটি জোড়া
সসীম alphabet-এর সব string, তাই সব প্রোগ্রামcountableদৈর্ঘ্য ধরে দলে ভাগ; প্রতিটি দল সসীম
(0, 1), ℝuncountableCantor-এর diagonal (১৮৯১)
P(ℕ), অসীম বিট-stringuncountableCantor-এর উপপাদ্য |S| < |P(S)|

Diagonal-এর ধারণা: ধরুন (0, 1)-এর সব সংখ্যার একটি তালিকা আছে। i-তম সংখ্যার i-তম অঙ্ক বদলে একটি নতুন সংখ্যা বানাই; এটি প্রতিটি সারি থেকে অন্তত এক অঙ্কে আলাদা, তাই তালিকায় নেই, বিরোধ। Cantor-এর উপপাদ্য-এ একই কৌশল: যেকোনো f: S → P(S)-এর জন্য D = {x ∈ S : x ∉ f(x)} কোনো f(x)-এর সমান হতে পারে না, তাই কোনো f onto নয়। (দশমিকের 0.0999… = 0.1000… সমস্যা এড়াতে অঙ্ক 9 বা 0 বেছে না নেওয়ার সতর্কতা পর্ব ১৮-এ।)

from itertools import combinations, product

S = [0, 1, 2]
P = [frozenset(c) for r in range(4) for c in combinations(S, r)]
print("|S| =", len(S), " |P(S)| =", len(P))

checked = 0
for f in product(P, repeat=len(S)):        # every function f: S -> P(S)
    D = frozenset(x for x in S if x not in f[x])
    assert D not in f                       # D differs from f(x) at x
    checked += 1
print("functions checked:", checked, "- none is onto")

rows = ["0110", "1010", "0001", "1111"]     # a 'complete' list?
new = "".join("1" if r[i] == "0" else "0" for i, r in enumerate(rows))
print("diagonal flip:", new, "| in the list?", new in rows)

আসল আউটপুট (ব্রাউজারের Python):

|S| = 3  |P(S)| = 8
functions checked: 512 - none is onto
diagonal flip: 1110 | in the list? False

তিন উপাদানের S থেকে P(S)-এ সব 8³ = 512টি ফাংশনেই D বাদ পড়ে, একটি assert-ও ভাঙেনি। চার সারির তালিকার কর্ণ উল্টে পাওয়া 1110 তালিকায় নেই। সসীম ক্ষেত্রে এটি শুধু কৌশলের প্রদর্শন; অসীমের প্রমাণ যুক্তি দিয়েই।

কম্পিউটার বিজ্ঞানে ফল: প্রোগ্রাম countable, কিন্তু {0, 1}-এর ওপর language-এর সেট P(Σ*) uncountable. তাই এমন language আছে, যা কোনো প্রোগ্রাম decide করে না (পর্ব ১৮, পর্ব ৭৫)। এটি অস্তিত্বের প্রমাণ; কোন সমস্যা, তা বলে না। নির্দিষ্ট উদাহরণ halting problem (চ-০৩)।

পরীক্ষক যা খোঁজেন: সংজ্ঞা (২); তিনটি countable উদাহরণ, তালিকার ধারণাসহ (২); diagonal-এর যুক্তি (৩); CS-এর ফল (২); সাধারণ ভুল (১)। পর্ব ১৮

যেখানে নম্বর কাটে: “সব অসীম সেট সমান আকারের” লেখা; “ℚ ঘন, তাই uncountable” বলা; diagonal-এ নতুন সংখ্যা কেন তালিকায় নেই, তা না বলা।

খ-০২Fermat-এর ছোট উপপাদ্য আর Euler-এর উপপাদ্যের শর্তসহ তুলনা করুন। Fermat test কেন primality-র নির্ভরযোগ্য পরীক্ষা নয়, আর Miller–Rabin বাড়তি কী দেখে? 561 দিয়ে দেখান। — ৫ নম্বর (মাঝারি)

তুলনা: Fermat: p মৌলিক আর p ∤ a হলে ap−1 ≡ 1 (mod p). Euler: gcd(a, n) = 1 হলে aφ(n) ≡ 1 (mod n), যেকোনো n ≥ 1-এ। n = p মৌলিক হলে φ(p) = p − 1, তাই Fermat হলো Euler-এর বিশেষ রূপ। দুটির কাজ একই: বিশাল ঘাত ছোট করা।

Fermat test-এর ফাঁক: উপপাদ্যের converse সত্য নয়। Carmichael সংখ্যা (যেমন 561 = 3 · 11 · 17) যৌগিক, অথচ প্রতিটি সহমৌলিক a-তে a560 ≡ 1. Miller–Rabin আরেকটি সত্য ব্যবহার করে: মৌলিক p-এর mod-এ 1-এর বর্গমূল শুধু ±1. n − 1 = 2sd লিখে ad-কে বারবার বর্গ করি; ±1 ছাড়া অন্য কোনো বর্গমূল দেখা দিলে n যৌগিক।

from math import gcd

n = 561
print("561 = 3 * 11 * 17 ->", 3 * 11 * 17 == n)
coprime = [a for a in range(2, n) if gcd(a, n) == 1]
caught = [a for a in coprime if pow(a, n - 1, n) != 1]
print("coprime bases:", len(coprime), "| Fermat test catches:", len(caught))

d, s = n - 1, 0
while d % 2 == 0:
    d, s = d // 2, s + 1
print(f"n - 1 = 2^{s} * {d}")
x = pow(2, d, n)
seq = [x]
for _ in range(s - 1):
    x = x * x % n
    seq.append(x)
print("Miller-Rabin, base 2:", seq)
print("67^2 mod 561 =", 67 * 67 % n, "-> 67 is a square root of 1, not +-1")

আসল আউটপুট (ব্রাউজারের Python):

561 = 3 * 11 * 17 -> True
coprime bases: 319 | Fermat test catches: 0
n - 1 = 2^4 * 35
Miller-Rabin, base 2: [263, 166, 67, 1]
67^2 mod 561 = 1 -> 67 is a square root of 1, not +-1

৩১৯টি সহমৌলিক base-এর একটিও Fermat test-এ 561-কে ধরে না। Miller–Rabin base 2-তেই 67 পায়, যার বর্গ 1 অথচ 67 ≢ ±1 (mod 561); তাই 561 নিশ্চিতভাবে যৌগিক।

পরীক্ষক যা খোঁজেন: দুই উপপাদ্য শর্তসহ (২); বিশেষ রূপের সম্পর্ক (১); Carmichael আর Miller–Rabin-এর ধারণা (২)। পর্ব ২৪ · পর্ব ২৫

যেখানে নম্বর কাটে: p ∤ a বা gcd(a, n) = 1 শর্ত বাদ দেওয়া; “Fermat test পাস করলে মৌলিক” লেখা।

খ-০৩RSA-এর key তৈরি, encryption আর decryption লিখুন। med ≡ m (mod n) কেন সব m-এ খাটে, তার মূল যুক্তি দিন, gcd(m, n) ≠ 1 হলেও। Textbook RSA বাস্তবে কেন অনিরাপদ, আর padding কী সমাধান করে? — ১০ নম্বর (মাঝারি–কঠিন)

সংজ্ঞা: ভিন্ন মৌলিক p, q; n = pq; e এমন যে gcd(e, (p − 1)(q − 1)) = 1; d = e−1 mod (p − 1)(q − 1). Public key (n, e), private key d. E(m) = me mod n, D(c) = cd mod n, যেখানে 0 ≤ m < n.

সঠিকতার মূল যুক্তি: ed = 1 + k(p − 1)(q − 1). mod p-এ দুই ক্ষেত্র: p ∤ m হলে Fermat দিয়ে med = m · (mp−1)k(q−1) ≡ m; p ∣ m হলে দুই পাশই 0. একইভাবে mod q. তাই p আর q দুটিই med − m-কে ভাগ করে, আর p, q ভিন্ন মৌলিক বলে pq-ও ভাগ করে। খেয়াল করুন, gcd(m, n) = 1 লাগেনি; এই ক্ষেত্র-ভাগই পরীক্ষার সবচেয়ে প্রচলিত ফাঁক। (ধাপে ধাপে পূর্ণ প্রমাণ পর্ব ২৮-এর উপপাদ্য ৪.২-এ।)

কেন padding: Textbook RSA-এর তিন দুর্বলতা n বড় হলেও থাকে: (১) deterministic, তাই বার্তার সম্ভাব্য মান কম হলে (ঘণ্টা 0–23) যে কেউ public key দিয়ে সব মান encrypt করে মিলিয়ে নেন, অর্থাৎ semantic security নেই; (২) malleable: E(m1)E(m2) ≡ E(m1m2); (৩) ছোট e আর ছোট m-এ me < n হলে mod কাজই করে না, সাধারণ e-তম মূল নিলেই m. Padding (encryption-এ OAEP, সইয়ে PSS) এলোমেলোতা আর কাঠামো যোগ করে এগুলো বন্ধ করে।

p, q, e = 61, 53, 17                     # TOY numbers, never for real use
n, phi = p * q, (p - 1) * (q - 1)
d = pow(e, -1, phi)
print("n =", n, " phi =", phi, " d =", d)

ok = all(pow(pow(m, e, n), d, n) == m for m in range(n))
share = sum(1 for m in range(n) if m % p == 0 or m % q == 0)
print("D(E(m)) == m for all", n, "messages:", ok)
print("messages sharing a factor with n:", share)

c = pow(9, e, n)                         # hour 9, sent twice
print("E(9) today and tomorrow:", c, pow(9, e, n))
guess = next(h for h in range(24) if pow(h, e, n) == c)
print("attacker tries 0..23 with public key, finds:", guess)
print("E(5)*E(7) mod n == E(35):", pow(5, e, n) * pow(7, e, n) % n == pow(35, e, n))

আসল আউটপুট (ব্রাউজারের Python):

n = 3233  phi = 3120  d = 2753
D(E(m)) == m for all 3233 messages: True
messages sharing a factor with n: 113
E(9) today and tomorrow: 1972 1972
attacker tries 0..23 with public key, finds: 9
E(5)*E(7) mod n == E(35): True

৩২৩৩টি বার্তার সবকটিতে decryption ঠিক, যার ১১৩টি n-এর সঙ্গে উৎপাদক ভাগ করে; অর্থাৎ ক্ষেত্র-ভাগের যুক্তি সংখ্যাতেও মেলে। একই ঘণ্টা দুই দিন একই ciphertext দেয়, আর আক্রমণকারী d ছাড়াই ২৪টি চেষ্টায় 9 খুঁজে পান। এই সংখ্যাগুলো শুধু বোঝার জন্য; বাস্তবে বড় key, যথাযথ padding আর যাচাই-করা লাইব্রেরি লাগে (Cybersecurity কোর্সের পর্ব ১০ আর পর্ব ১৪)।

সীমা: নিরাপত্তা দাঁড়িয়ে আছে বড় n factor করার কঠিনতার অনুমানের ওপর; φ(n) জানা আর factor জানা সমতুল্য (পর্ব ২৮)। এটি প্রমাণিত কঠিনতা নয়, একটি অনুমান।

পরীক্ষক যা খোঁজেন: key তৈরি আর দুই সূত্র (২); সঠিকতার দুই ক্ষেত্র আর pq-তে জোড়া দেওয়া (৪); তিন দুর্বলতা (৩); padding ও বাস্তবের সাবধানতা (১)। পর্ব ২৮ · পর্ব ২৩

যেখানে নম্বর কাটে: “gcd(m, n) = 1 না হলে কাজ করে না” লেখা; d-কে mod n-এ হিসাব করা; “n বড় হলেই নিরাপদ” বলা।

৪ · অংশ গ — গণনা আর বিচ্ছিন্ন সম্ভাবনা (মডিউল ৬–৭)

রিভিশন: পর্ব ৩৩ (permutation, combination), পর্ব ৩৫ (stars and bars), পর্ব ৩৯ (Bayes), পর্ব ৪০ আর পর্ব ৪১ (প্রত্যাশা, variance).

গ-০১nr, P(n, r), C(n, r) আর C(n + r − 1, r) — চারটি গণনা কোন দুই প্রশ্নের উত্তরে আলাদা হয়, ছকসহ ব্যাখ্যা করুন। Stars and bars-এর bijection লিখুন, আর x1 + x2 + x3 = 7-এর অঋণাত্মক ও ধনাত্মক পূর্ণসংখ্যা সমাধান গুনুন। — ১০ নম্বর (সহজ–মাঝারি)

দুই প্রশ্ন: n রকম জিনিস থেকে r বার বাছাইয়ে জিজ্ঞেস করুন: (ক) ক্রম কি গুরুত্বপূর্ণ? (খ) একই জিনিস একাধিকবার নেওয়া যায়?

পুনরাবৃত্তি চলেপুনরাবৃত্তি চলে না
ক্রম গুরুত্বপূর্ণnr (গুণের নিয়ম; যেমন PIN)P(n, r) = n!/(n − r)! (প্রথম, দ্বিতীয়, তৃতীয় পুরস্কার)
ক্রম অর্থহীনC(n + r − 1, r) (পুনরাবৃত্তিসহ combination)C(n, r) = n!/(r!(n − r)!) (কমিটি)

C(n, r) = P(n, r)/r!: প্রতিটি দল r! ভাবে সাজানো যায়, তাই ভাগের নিয়ম। Stars and bars: r টি তারা (বাছাই) আর n − 1টি দাগ (রকমের সীমানা) এক সারিতে; প্রতিটি সারি ঠিক একটি বাছাই, আর উল্টোটাও। r + n − 1টি ঘরের কোন n − 1টিতে দাগ, তা বাছলেই সারি ঠিক হয়, তাই C(n + r − 1, n − 1) = C(n + r − 1, r). একই bijection-এ x1 + … + xn = r-এর অঋণাত্মক সমাধান। উদাহরণ: বাজারঘরের ৫ রকম মিষ্টি থেকে ৩টি।

from itertools import product, permutations, combinations
from itertools import combinations_with_replacement as cwr
from math import comb, perm

items, r = "ABCDE", 3                    # 5 kinds of sweets, pick 3
n = len(items)
rows = [
    ("ordered, repeats allowed    n^r", len(list(product(items, repeat=r))), n ** r),
    ("ordered, no repeats      P(n,r)", len(list(permutations(items, r))), perm(n, r)),
    ("unordered, no repeats    C(n,r)", len(list(combinations(items, r))), comb(n, r)),
    ("unordered, repeats  C(n+r-1, r)", len(list(cwr(items, r))), comb(n + r - 1, r)),
]
for name, brute, formula in rows:
    print(f"{name}: brute {brute:3}  formula {formula:3}")

sols = sum(1 for a in range(8) for b in range(8 - a))   # c = 7 - a - b
print("x1 + x2 + x3 = 7, xi >= 0:", sols, "= C(9, 2) =", comb(9, 2))

আসল আউটপুট (ব্রাউজারের Python):

ordered, repeats allowed    n^r: brute 125  formula 125
ordered, no repeats      P(n,r): brute  60  formula  60
unordered, no repeats    C(n,r): brute  10  formula  10
unordered, repeats  C(n+r-1, r): brute  35  formula  35
x1 + x2 + x3 = 7, xi >= 0: 36 = C(9, 2) = 36

চারটি সূত্রই সরাসরি তালিকা বানিয়ে গোনার সঙ্গে মেলে: ১২৫, ৬০, ১০, ৩৫. অঋণাত্মক সমাধান ৩৬টি। ধনাত্মক সমাধানে প্রতিটি xi থেকে ১ সরিয়ে y1 + y2 + y3 = 4 পাই, তাই C(6, 2) = 15 (scratch-এ গুনে মেলানো)।

সীমা: “অন্তত একটি” শর্ত থাকলে হয় নিম্নসীমা সরানো, নয় complement. ঊর্ধ্বসীমা (xi ≤ 3) থাকলে stars and bars একা চলে না; inclusion–exclusion লাগে (ঘ-০২)। আর আলাদা জিনিস আলাদা বাক্সে দিলে উত্তর nr, stars and bars নয়।

পরীক্ষক যা খোঁজেন: দুই প্রশ্ন আর ২ × ২ ছক (৩); C = P/r!-এর কারণ (১); stars and bars-এর bijection (৩); দুই সমাধান-গণনা (২); সীমা (১)। পর্ব ৩১ · পর্ব ৩৩ · পর্ব ৩৫

যেখানে নম্বর কাটে: একই রকম জিনিসকে আলাদা ধরে গোনা; C(n + r − 1, r)-এ r আর n − 1 গুলিয়ে ভুল সংখ্যা বসানো; একই দল দুবার গোনা (overcounting).

গ-০২শর্তসাপেক্ষ সম্ভাবনার সংজ্ঞা দিন, আর তিনটি প্রচলিত ভুল ব্যাখ্যা করুন: P(A ∣ B) আর P(B ∣ A) গুলিয়ে ফেলা, base rate উপেক্ষা, আর independent ও mutually exclusive এক ভাবা। একটি fraud filter-এর সংখ্যা দিয়ে দেখান (১% জালিয়াতি, sensitivity ৯৫%, false positive ৫%). — ১০ নম্বর (মাঝারি)

সংজ্ঞা: P(B) > 0 হলে P(A ∣ B) = P(A ∩ B)/P(B): B ঘটেছে জানলে sample space ছোট হয়ে B হয়ে যায়। Bayes: P(H ∣ E) = P(E ∣ H)P(H) / [P(E ∣ H)P(H) + P(E ∣ Hᶜ)P(Hᶜ)]।

ভুল ১ ও ২ (উল্টো শর্ত আর base rate): “filter ৯৫% জালিয়াতি ধরে” মানে P(সতর্কতা ∣ জালিয়াতি) = ০.৯৫; কিন্তু প্রশ্ন P(জালিয়াতি ∣ সতর্কতা)। ১০,০০০ অর্ডার ভাবুন: ১০০টি জালিয়াতি, তার ৯৫টিতে সতর্কতা; ৯৯০০টি সৎ, তার ৪৯৫টিতে ভুল সতর্কতা। মোট ৫৯০ সতর্কতার মাত্র ৯৫টি সত্যিকারের, ৯৫/৫৯০ = ১৯/১১৮ ≈ ১৬%. জালিয়াতি বিরল বলে ভুল সতর্কতাই বেশি।

ভুল ৩: Mutually exclusive মানে A ∩ B = ∅; independent মানে P(A ∩ B) = P(A)P(B). দুটির সম্ভাবনা ধনাত্মক হলে mutually exclusive ঘটনা কখনো independent নয়: একটি ঘটলে অন্যটি নিশ্চিতভাবে ঘটেনি, এটাই সবচেয়ে বড় নির্ভরতা।

from fractions import Fraction as F

prior, sens, fpr = F(1, 100), F(95, 100), F(5, 100)
alarm = sens * prior + fpr * (1 - prior)
post = sens * prior / alarm
print("P(alarm | fraud) =", sens)
print("P(fraud | alarm) =", post, "~", round(float(post), 4))

P = lambda E: F(len(E), 6)               # one fair die
A, B, C = {2, 4, 6}, {1, 2}, {1, 3, 5}
print("A,B independent?", P(A & B) == P(A) * P(B), "| disjoint?", not (A & B))
print("A,C independent?", P(A & C) == P(A) * P(C), "| disjoint?", not (A & C))

stay = switch = 0                        # Monty Hall, all 9 equally likely cases
for car in range(3):
    for pick in range(3):
        opened = min(x for x in range(3) if x not in (pick, car))
        other = 3 - pick - opened
        stay += pick == car
        switch += other == car
print("stay wins", F(stay, 9), "| switch wins", F(switch, 9))

আসল আউটপুট (ব্রাউজারের Python):

P(alarm | fraud) = 19/20
P(fraud | alarm) = 19/118 ~ 0.161
A,B independent? True | disjoint? False
A,C independent? False | disjoint? True
stay wins 1/3 | switch wins 2/3

দুই শর্তসাপেক্ষ সম্ভাবনা ১৯/২০ আর ১৯/১১৮, একেবারে আলাদা। ছক্কায় “জোড়” আর {1, 2} independent অথচ disjoint নয়; “জোড়” আর “বিজোড়” disjoint অথচ independent নয়। Monty Hall-এ দরজা বদলালে জেতার সম্ভাবনা ২/৩, কারণ উপস্থাপক জেনে-বুঝে ছাগলের দরজা খোলেন; তথ্য কীভাবে এল, সেটিও শর্তের অংশ।

পরীক্ষক যা খোঁজেন: সংজ্ঞা আর P(B) > 0 শর্ত (২); Bayes-এর হিসাব, ভগ্নাংশে বা স্বাভাবিক সংখ্যায় (৩); দুই উল্টো শর্তের পার্থক্য (২); independent বনাম disjoint, উদাহরণসহ (৩)। পর্ব ৩৯

যেখানে নম্বর কাটে: উত্তর “৯৫%” লেখা; হর-এ শুধু P(E ∣ H)P(H) রাখা; pairwise independence থেকে mutual independence দাবি করা।

গ-০৩প্রত্যাশার linearity কেন independence ছাড়াই খাটে, অথচ variance-এর যোগফলে শর্ত লাগে? দুটি ছক্কার উদাহরণ আর একটি indicator-এর প্রয়োগ দিন। — ৫ নম্বর (মাঝারি)

তুলনা: E[X + Y] = E[X] + E[Y] সবসময় সত্য: যোগফলটি প্রতিটি outcome-এ আলাদা করে ভাঙে, যৌথ বণ্টন লাগে না। কিন্তু Var(X + Y) = Var X + Var Y + 2Cov(X, Y); শেষ পদ শূন্য হয় কেবল X, Y uncorrelated হলে (independence যথেষ্ট)। দুটি স্বাধীন ছক্কা: E = 7/2 + 7/2 = 7, আর variance 35/12 + 35/12 = 35/6. কিন্তু Y = X নিলে E[2X] = 7 একই, অথচ Var(2X) = 4 · 35/12 = 35/3, দ্বিগুণ।

Indicator: n জনের এলোমেলো permutation-এ নিজের জায়গায় থাকা মানুষের প্রত্যাশিত সংখ্যা: Ii = 1 যদি i নিজের জায়গায়, E[Ii] = 1/n, তাই মোট n · (1/n) = 1, যেকোনো n-এ। Ii-গুলো independent নয়, তবু linearity খাটে (n = 5-এ ১২০টি permutation গুনে ঠিক 1 মিলেছে)।

পরীক্ষক যা খোঁজেন: দুই সূত্র আর Cov-এর পদ (২); ছক্কার দুই ক্ষেত্র (২); indicator (১)। পর্ব ৪০ · পর্ব ৪১

যেখানে নম্বর কাটে: linearity-র জন্য independence দাবি করা; E[XY] = E[X]E[Y] সব ক্ষেত্রে লেখা।

৫ · অংশ ঘ — Recurrence আর উন্নত গণনা (মডিউল ৮)

রিভিশন: পর্ব ৪৫, পর্ব ৪৬, পর্ব ৪৭, পর্ব ৪৮, পর্ব ৪৯। Algorithm-এর দিক DSA কোর্সের পর্ব ০৯-এ।

ঘ-০১Recurrence সমাধানের পদ্ধতিগুলো (iteration, characteristic equation, undetermined coefficients, master theorem, generating function, substitution) কোনটি কোন আকারে খাটে, ছকে তুলনা করুন। an = 5an−1 − 6an−2 (a0 = 1, a1 = 4), Hanoi আর T(n) = 2T(n/2) + n সমাধান করুন। — ১০ নম্বর (মাঝারি)
পদ্ধতিকোন আকারেফল
Iteration (খুলে লেখা)প্রথম ক্রমের সরল রূপযোগফল, তারপর closed form
Characteristic equationধ্রুবক সহগের linear homogeneousমূল ri থেকে ∑αirin; পুনরাবৃত্ত মূলে n·rn
Undetermined coefficientsnon-homogeneous, ডান পাশে বহুপদী বা ঘাতhomogeneous + particular solution
Master theoremT(n) = aT(n/b) + Θ(nd)শুধু Θ-ক্রম, d আর logba তুলনা
Generating functionlinear recurrence, convolution, গণনার প্রশ্নসহগ বের করার সূত্র
Substitutionযেকোনো; একটি অনুমান আগে লাগেinduction দিয়ে সীমা যাচাই

তিন সমাধান: (১) r² − 5r + 6 = 0, মূল 2 আর 3; an = α2n + β3n; α + β = 1, 2α + 3β = 4 থেকে β = 2, α = −1; an = 2 · 3n − 2n. (২) Hanoi hn = 2hn−1 + 1, h0 = 0: ধ্রুবক particular solution c = 2c + 1 থেকে c = −1; hn = 2n − 1. (৩) a = 2, b = 2, d = 1: d = log22, case 2, T(n) = Θ(n log n). তুলনার জন্য U(n) = 8U(n/2) + n²: log28 = 3 > 2, case 1, Θ(n³)।

a = [1, 4]                               # a_n = 5a_{n-1} - 6a_{n-2}
for n in range(2, 21):
    a.append(5 * a[-1] - 6 * a[-2])
print("characteristic roots 2, 3:", all(a[n] == 2 * 3**n - 2**n for n in range(21)))

h = [0]                                  # h_n = 2h_{n-1} + 1 (Hanoi)
for n in range(1, 21):
    h.append(2 * h[-1] + 1)
print("particular solution -1:", all(h[n] == 2**n - 1 for n in range(21)))

T = {1: 1}                               # T(n) = 2T(n/2) + n
for k in range(1, 21):
    T[2**k] = 2 * T[2**(k - 1)] + 2**k
print("master case 2, T(2^k) = 2^k (k+1):", all(T[2**k] == 2**k * (k + 1) for k in range(21)))

U = {1: 1}                               # U(n) = 8U(n/2) + n^2
for k in range(1, 11):
    U[2**k] = 8 * U[2**(k - 1)] + 4**k
print("U(n)/n^3 for n = 2^4, 2^7, 2^10:", [round(U[2**k] / 8**k, 4) for k in (4, 7, 10)])

আসল আউটপুট (ব্রাউজারের Python):

characteristic roots 2, 3: True
particular solution -1: True
master case 2, T(2^k) = 2^k (k+1): True
U(n)/n^3 for n = 2^4, 2^7, 2^10: [1.9375, 1.9922, 1.999]

তিনটি closed form n = 20 পর্যন্ত হুবহু মেলে; T(1) = 1 নিলে T(2k) = 2k(k + 1), অর্থাৎ n log n-এর ক্রম। U(n)/n³ ক্রমে 2-এর দিকে যায়, তাই Θ(n³)। এগুলো যাচাই, প্রমাণ নয়; প্রমাণ induction বা উপপাদ্য থেকে।

সীমা: Master theorem খাটে না যখন উপসমস্যা অসমান (T(n/3) + T(2n/3) + n), ভাগ নয় বিয়োগ (T(n − 1) + n), বা চালিকা-খরচ বহুপদী নয় (2T(n/2) + n log n; উত্তর Θ(n log² n), পর্ব ৪৭)। Particular solution-এর অনুমান নিজেই একটি মূল হলে n দিয়ে গুণ করতে হয় (resonance).

পরীক্ষক যা খোঁজেন: ছক (৩); তিন সমাধান, initial condition বসিয়ে (৪); master-এর case বাছাইয়ের কারণ (২); সীমা (১)। পর্ব ৪৫ · পর্ব ৪৬ · পর্ব ৪৭

যেখানে নম্বর কাটে: সাধারণ সমাধানে initial condition না বসানো; particular solution-কে একা উত্তর ধরা; master theorem-এ logba-এর বদলে a/b তুলনা।

ঘ-০২Complement rule আর inclusion–exclusion কখন কোনটি? ৪ অঙ্কের PIN-এ অন্তত একটি অঙ্ক পুনরাবৃত্ত হওয়ার সংখ্যা আর derangement Dn-এর সূত্র দিয়ে দেখান। — ৫ নম্বর (মাঝারি)

Complement: “অন্তত একটি” প্রশ্নে সরাসরি গোনা জটিল, কিন্তু “একটিও না” সহজ হলে মোট থেকে বিয়োগ। PIN: 104 − 10 · 9 · 8 · 7 = 10000 − 5040 = 4960.

Inclusion–exclusion: কয়েকটি শর্তের যেকোনোটি ভাঙে এমন জিনিস গুনতে, যখন শর্তগুলো একসঙ্গেও ভাঙতে পারে: |A1 ∪ … ∪ An| = ∑|Ai| − ∑|Ai ∩ Aj| + … । Derangement-এ Ai = “i নিজের জায়গায়”; k টি নির্দিষ্ট জায়গা স্থির রাখার উপায় (n − k)!, তাই Dn = ∑k=0n (−1)kC(n, k)(n − k)! = n! ∑ (−1)k/k!. D4 = 9, D5 = 44, আর Dn/n! দ্রুত 1/e ≈ 0.3679-এর দিকে যায় (n = 7 পর্যন্ত brute force দিয়ে মেলানো)।

কখন কোনটি: একটি “খারাপ” ঘটনা থাকলে complement যথেষ্ট; অনেকগুলো পরস্পর-ছেদী শর্তে inclusion–exclusion. দুটিই আসলে একই নীতি: complement হলো এক সেটের inclusion–exclusion.

পরীক্ষক যা খোঁজেন: দুই পদ্ধতির সংজ্ঞা (২); PIN (১); Dn-এর সূত্র আর একটি মান (২)। পর্ব ৩১ · পর্ব ৪৯

যেখানে নম্বর কাটে: চিহ্ন একান্তর না করা; ছেদগুলো বাদ দিয়ে শুধু যোগ করা।

৬ · অংশ ঙ — Relation, graph আর tree (মডিউল ৯–১১)

রিভিশন: পর্ব ৫৫, পর্ব ৫৬, পর্ব ৬০, পর্ব ৬২, পর্ব ৬৮।

ঙ-০১Equivalence relation আর partial order-এর সংজ্ঞা দিয়ে তুলনা করুন: কোন ধর্মে মিল, কোথায় পার্থক্য, প্রত্যেকটির “ছবি” কী, আর দুটিই একসঙ্গে হতে পারে কি না। {1, …, 12}-এ বিভাজ্যতা আর mod 3 সমশেষতা দিয়ে দেখান। — ১০ নম্বর (মাঝারি)

সংজ্ঞা: সেট A-এর ওপর R একটি equivalence relation, যদি reflexive, symmetric আর transitive; একটি partial order, যদি reflexive, antisymmetric (aRb আর bRa হলে a = b) আর transitive.

মাপকাঠিEquivalencePartial order
মাঝের ধর্মsymmetricantisymmetric
অর্থ“একই রকম”“আগে বা সমান”
ছবিpartition: আলাদা আলাদা equivalence classHasse diagram, topological sort
মূল উপপাদ্যequivalence ⇔ partitionসসীম poset-এ minimal উপাদান আছে; linear extension আছে
উদাহরণa ≡ b (mod n), একই জেলাধনাত্মক পূর্ণসংখ্যায় বিভাজ্যতা, ⊆, কাজের পূর্বশর্ত
from itertools import product

def props(A, R):
    return (all((a, a) in R for a in A),                      # reflexive
            all((b, a) in R for (a, b) in R),                 # symmetric
            all(a == b for (a, b) in R if (b, a) in R),       # antisymmetric
            all((a, d) in R for (a, b) in R for (c, d) in R if b == c))

A = range(1, 13)
div = {(a, b) for a in A for b in A if b % a == 0}
mod3 = {(a, b) for a in A for b in A if (a - b) % 3 == 0}
print("(refl, sym, antisym, trans)")
print("a | b on 1..12     :", props(A, div))
print("a = b (mod 3)      :", props(A, mod3))
print("classes mod 3:", sorted({tuple(b for b in A if (a - b) % 3 == 0) for a in A}))

X = range(3)
pairs = [(a, b) for a in X for b in X]
eq = po = both = 0
for bits in product([0, 1], repeat=9):   # all 512 relations on {0,1,2}
    r, s, an, t = props(X, {pr for pr, k in zip(pairs, bits) if k})
    eq += r and s and t
    po += r and an and t
    both += r and s and an and t
print("on 3 elements: equivalences", eq, "| partial orders", po, "| both", both)

আসল আউটপুট (ব্রাউজারের Python):

(refl, sym, antisym, trans)
a | b on 1..12     : (True, False, True, True)
a = b (mod 3)      : (True, True, False, True)
classes mod 3: [(1, 4, 7, 10), (2, 5, 8, 11), (3, 6, 9, 12)]
on 3 elements: equivalences 5 | partial orders 19 | both 1

বিভাজ্যতা partial order, সমশেষতা equivalence, যার তিনটি class সেটটিকে ভাগ করে। তিন উপাদানের সেটে ৫১২টি relation-এর মধ্যে equivalence ৫টি (Bell সংখ্যা B3), partial order ১৯টি, আর দুটিই একসঙ্গে মাত্র একটি: সমতা {(a, a)}। কারণ symmetric আর antisymmetric একসঙ্গে হলে aRb থেকে a = b আসে।

সীমা: ঋণাত্মকসহ ℤ-এ বিভাজ্যতা antisymmetric নয় (2 ∣ −2 আর −2 ∣ 2), তাই সেখানে partial order নয়। “Antisymmetric মানে symmetric নয়” ভুল: খালি relation দুটিই।

পরীক্ষক যা খোঁজেন: দুই সংজ্ঞা (২); ছক (৩); দুই উদাহরণের ধর্ম যাচাই (২); class আর Hasse-এর ছবি (২); “দুটিই কেবল সমতা” (১)। পর্ব ৫২ · পর্ব ৫৫ · পর্ব ৫৬

যেখানে নম্বর কাটে: transitivity যাচাইয়ে শুধু কয়েকটি জোড়া দেখা; antisymmetric আর asymmetric গুলিয়ে ফেলা।

ঙ-০২Euler circuit আর Hamilton cycle-এর তুলনা করুন: সংজ্ঞা, অস্তিত্বের শর্ত, algorithm-এর জটিলতা। এমন graph দিন যেখানে একটি আছে কিন্তু অন্যটি নেই, আর একটি যেখানে দুটির কোনোটিই নেই। — ১০ নম্বর (মাঝারি)

সংজ্ঞা: Euler circuit প্রতিটি edge ঠিক একবার ব্যবহার করে শুরুতে ফেরে; Hamilton cycle প্রতিটি vertex ঠিক একবার ছুঁয়ে ফেরে।

মাপকাঠিEulerHamilton
যদি এবং কেবল যদি শর্তconnected (isolated vertex বাদে), সব degree জোড়; trail-এর জন্য ঠিক ০ বা ২টি বিজোড়সহজ কোনো শর্ত জানা নেই
যথেষ্ট শর্তওপরেরটিইDirac (n ≥ 3, প্রতিটি degree ≥ n/2), Ore
আবশ্যিক শর্তওপরেরটিইযেকোনো k টি vertex সরালে ≤ k টি component
AlgorithmHierholzer, edge-সংখ্যায় রৈখিকসিদ্ধান্ত-সমস্যাটি NP-complete
def euler_kind(adj):
    odd = sum(len(v) % 2 for v in adj.values())   # graphs here are connected
    return {0: "Euler circuit", 2: "Euler trail only"}.get(odd, "neither")

def ham_cycle(adj):
    n, path = len(adj), [0]
    def go():
        if len(path) == n:
            return 0 in adj[path[-1]]
        for v in adj[path[-1]]:
            if v not in path:
                path.append(v)
                if go():
                    return True
                path.pop()
        return False
    return go()

def graph(edges):
    adj = {}
    for u, v in edges:
        adj.setdefault(u, set()).add(v); adj.setdefault(v, set()).add(u)
    return adj

K4 = graph([(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)])
bowtie = graph([(0, 1), (1, 2), (2, 0), (0, 3), (3, 4), (4, 0)])
outer = [(i, (i + 1) % 5) for i in range(5)]
petersen = graph(outer + [(5 + i, 5 + (i + 2) % 5) for i in range(5)] + [(i, i + 5) for i in range(5)])
for name, g in [("K4", K4), ("bowtie", bowtie), ("Petersen", petersen)]:
    print(f"{name:8} {euler_kind(g):17} Hamilton cycle: {ham_cycle(g)}")

আসল আউটপুট (ব্রাউজারের Python):

K4       neither           Hamilton cycle: True
bowtie   Euler circuit     Hamilton cycle: False
Petersen neither           Hamilton cycle: False

K4-এর চারটি vertex-ই degree 3 (বিজোড়), তাই Euler নেই, অথচ 0-1-2-3-0 Hamilton cycle. Bowtie-তে (মাঝের vertex-এ জোড়া দুটি ত্রিভুজ) সব degree জোড়, Euler circuit আছে; কিন্তু মাঝের vertex একটি cut vertex, তাকে দুবার ছুঁতে হয়, তাই Hamilton নেই। Petersen graph-এ দুটির কোনোটিই নেই। ছোট graph-এ backtracking চলে; n বাড়লে খোঁজ দ্রুত বিস্ফোরিত হয়।

ইতিহাস ও সীমা: Königsberg-এর সেতু নিয়ে Euler-এর প্রবন্ধ সাধারণত ১৭৩৬ সালের বলে উল্লেখ করা হয়। Dirac আর Ore কেবল যথেষ্ট শর্ত: শর্ত না মিললেও Hamilton cycle থাকতে পারে (যেমন যেকোনো cycle graph Cn, n ≥ 5).

পরীক্ষক যা খোঁজেন: দুই সংজ্ঞা, edge বনাম vertex (২); Euler-এর iff শর্ত (২); Hamilton-এর যথেষ্ট ও আবশ্যিক শর্ত (২); জটিলতার পার্থক্য (২); তিন উদাহরণ (২)। পর্ব ৬০

যেখানে নম্বর কাটে: connected শর্ত বাদ; Dirac-কে iff লেখা; “Hamilton কঠিন, তাই সব graph-এ কঠিন” বলা (বিশেষ শ্রেণিতে সহজ)।

ঙ-০৩Planar graph-এর প্রধান তথ্যগুলো শর্তসহ লিখুন: Euler-এর সূত্র, e ≤ 3v − 6, e ≤ 2v − 4, Kuratowski আর চার রঙের উপপাদ্য। K5, K3,3 আর Petersen graph কেন planar নয়, দেখান। — ১০ নম্বর (মাঝারি–কঠিন)

তথ্যগুলো: (১) Euler-এর সূত্র: connected planar graph-এর যেকোনো plane drawing-এ v − e + f = 2 (পাঁচটি Platonic solid-এ মিলিয়ে দেখা যায়, যেমন cube: 8 − 12 + 6). (২) simple planar, v ≥ 3 হলে e ≤ 3v − 6, কারণ প্রতিটি face-এর degree ≥ 3, তাই 2e ≥ 3f. (৩) এর ওপর ত্রিভুজও না থাকলে face-এর degree ≥ 4, তাই e ≤ 2v − 4; সাধারণভাবে girth g হলে e ≤ g(v − 2)/(g − 2). (৪) প্রতিটি planar graph-এ degree ≤ 5-এর একটি vertex আছে। (৫) Kuratowski (১৯৩০): planar ⇔ কোনো subgraph K5 বা K3,3-এর subdivision নয়। (৬) চার রঙের উপপাদ্য: প্রতিটি planar graph-এর chromatic number ≤ 4; প্রমাণ Appel ও Haken, ১৯৭৬, কম্পিউটার-নির্ভর।

Graphv, eযে সীমা খাটেফল
K55, 103v − 6 = 910 > 9, planar নয়
K3,3 (bipartite, ত্রিভুজ নেই)6, 92v − 4 = 89 > 8, planar নয়
Petersen (girth 5)10, 153v − 6 = 24 কিছু বলে না; 5(v − 2)/3 = 40/3 ≈ 13.315 > 13.3, planar নয়

সীমা: e ≤ 3v − 6 কেবল আবশ্যিক শর্ত: K3,3 এটি মানে (9 ≤ 12) তবু planar নয়। তাই অসমতা দিয়ে “planar নয়” প্রমাণ হয়, “planar” প্রমাণ হয় না; তার জন্য একটি plane drawing দেখাতে হয়। Euler-এর সূত্র disconnected graph-এ c টি component হলে v − e + f = 1 + c.

পরীক্ষক যা খোঁজেন: ছয় তথ্য শর্তসহ (৪); দুই অসমতার কারণ, face-এর degree দিয়ে (২); তিন graph (৩); আবশ্যিক বনাম যথেষ্ট (১)। পর্ব ৬২ · পর্ব ৬৩

যেখানে নম্বর কাটে: simple বা v ≥ 3 শর্ত বাদ; K3,3-এ 3v − 6 খাটিয়ে “planar” সিদ্ধান্ত।

ঙ-০৪Huffman-এর algorithm লিখুন আর এটি কেন সর্বোত্তম prefix code দেয়, তার মূল ধারণা (exchange argument আর induction) ব্যাখ্যা করুন। — ৫ নম্বর (মাঝারি)

Algorithm: প্রতিটি চিহ্ন একটি leaf, ওজন = কতবার আসে। বারবার সবচেয়ে হালকা দুটি tree জোড়া দিই, নতুন root-এর ওজন দুটির যোগফল, যতক্ষণ না একটি tree থাকে। বাঁয়ে 0, ডানে 1.

কেন সর্বোত্তম: (১) Exchange: কোনো সর্বোত্তম tree-তে সবচেয়ে বিরল দুটি চিহ্নকে সবচেয়ে গভীরে ভাই করা যায়; গভীর leaf-এর সঙ্গে জায়গা বদলালে খরচ বাড়ে না। তাই greedy-র প্রথম পছন্দ নিরাপদ। (২) জোড়া দুটিকে একটি চিহ্ন z ধরলে নতুন সমস্যার খরচ ঠিক px + py কম; এই ছোট সমস্যায় induction খাটিয়ে পুরো দাবি।

import heapq

w = {"a": 45, "b": 13, "c": 12, "d": 16, "e": 9, "f": 5}   # order counts
heap = [(c, i, {k: ""}) for i, (k, c) in enumerate(w.items())]
heapq.heapify(heap)
i, merges = len(heap), []
while len(heap) > 1:
    c1, _, t1 = heapq.heappop(heap)
    c2, _, t2 = heapq.heappop(heap)
    merges.append(c1 + c2)
    code = {k: "0" + v for k, v in t1.items()} | {k: "1" + v for k, v in t2.items()}
    heapq.heappush(heap, (c1 + c2, i, code)); i += 1
code = heap[0][2]
L = lambda cd: sum(w[k] * len(cd[k]) for k in w)
print("lengths:", {k: len(code[k]) for k in sorted(w)})
print("cost =", L(code), "| sum of merged weights =", sum(merges), merges)
print("fixed 3-bit code cost =", 3 * sum(w.values()))

bad = dict(code); bad["a"], bad["f"] = code["f"], code["a"]   # exchange
print("swap a (common) with f (rare): cost", L(bad), "> ", L(code))

আসল আউটপুট (ব্রাউজারের Python):

lengths: {'a': 1, 'b': 3, 'c': 3, 'd': 3, 'e': 4, 'f': 4}
cost = 224 | sum of merged weights = 224 [14, 25, 30, 55, 100]
fixed 3-bit code cost = 300
swap a (common) with f (rare): cost 344 >  224

সবচেয়ে বেশি আসা a পায় ১ বিট, বিরল e আর f পায় ৪ বিট। মোট খরচ ২২৪, ঠিক জোড়া দেওয়া ওজনগুলোর যোগফল (১৪ + ২৫ + ৩০ + ৫৫ + ১০০), আর ৩ বিটের স্থির code-এর ৩০০-এর চেয়ে কম। a আর f-এর codeword বদলালে খরচ ৩৪৪: exchange argument-এর উল্টো দিকটি সংখ্যায়।

সীমা: Huffman সর্বোত্তম কেবল “প্রতিটি চিহ্নে আলাদা codeword”-এর prefix code-এর মধ্যে; গড় দৈর্ঘ্য L-এর জন্য H ≤ L < H + 1, যেখানে H entropy. সমান ওজনে একাধিক Huffman tree হয়, খরচ একই।

পরীক্ষক যা খোঁজেন: algorithm (১); exchange lemma (২); induction-এর ধাপ (১); সীমা বা entropy (১)। পর্ব ৬৮

যেখানে নম্বর কাটে: “greedy, তাই সর্বোত্তম” লিখে থামা; ওপর থেকে ভাগ করা (Shannon–Fano ধাঁচ) Huffman বলে চালানো।

৭ · অংশ চ — বীজগাণিতিক কাঠামো আর গণনার মডেল (মডিউল ১২–১৩)

রিভিশন: পর্ব ৭০, পর্ব ৭১, পর্ব ৭৩, পর্ব ৭৪, পর্ব ৭৫। Automata আর computability গভীরে পড়ানো হবে পরিকল্পিত Theory of Computation কোর্সে।

চ-০১Group, ring আর field-এর সংজ্ঞা দিয়ে তুলনা করুন, প্রতিটির একটি উদাহরণ আর একটি “প্রায় হয়েও হয়নি” উদাহরণসহ। ℤn কখন field? ℤ12-এ কী ভাঙে? — ১০ নম্বর (মাঝারি)

সংজ্ঞা: Group (G, ∗): একটি associative binary operation, একক উপাদান, আর প্রতিটি উপাদানের inverse. Ring (R, +, ·): (R, +) abelian group, গুণ associative আর 1 গুণের একক, দুই দিকের বণ্টন বিধি; গুণের inverse চাওয়া হয় না (এই কোর্সে 1-সহ ring; কিছু বইয়ে 1 বাধ্যতামূলক নয়)। Field: commutative ring, 1 ≠ 0, আর প্রতিটি অশূন্য উপাদানের গুণের inverse আছে।

কাঠামোঅপারেশনউদাহরণপ্রায় হয়েও নয়
Groupএকটি(ℤ, +), (ℤn, +), S3 (commutative নয়)(ℤ, ·): 2-এর গুণের inverse ℤ-এ নেই
Ringদুটিℤ, ℤn, F[x], n × n matrixজোড় সংখ্যা: গুণের একক 1 নেই (এই কোর্সের সংজ্ঞায়)
Fieldদুটি, ভাগসহℚ, ℝ, ℤp (p মৌলিক), GF(2n)ℤ: integral domain, কিন্তু 2-এর inverse নেই

ℤn: ℤn field ⇔ n মৌলিক। n = ab (1 < a, b < n) হলে a · b ≡ 0, অর্থাৎ a একটি zero divisor, আর zero divisor-এর inverse থাকতে পারে না। উল্টো দিকে n মৌলিক হলে gcd(a, n) = 1, তাই Bézout থেকে inverse.

from math import gcd

for n in (5, 7, 12, 15):
    units = [a for a in range(1, n) if gcd(a, n) == 1]
    zd = [a for a in range(1, n) if any(a * b % n == 0 for b in range(1, n))]
    kind = "field" if len(units) == n - 1 else "ring, not a field"
    print(f"Z_{n:<2} units {len(units):2}  zero divisors {zd}  -> {kind}")

print("inverse of 3 in Z_7:", pow(3, -1, 7))
try:
    pow(3, -1, 12)
except ValueError as err:
    print("inverse of 3 in Z_12:", err)

আসল আউটপুট (ব্রাউজারের Python):

Z_5  units  4  zero divisors []  -> field
Z_7  units  6  zero divisors []  -> field
Z_12 units  4  zero divisors [2, 3, 4, 6, 8, 9, 10]  -> ring, not a field
Z_15 units  8  zero divisors [3, 5, 6, 9, 10, 12]  -> ring, not a field
inverse of 3 in Z_7: 5
inverse of 3 in Z_12: base is not invertible for the given modulus

মৌলিক n-এ প্রতিটি অশূন্য উপাদান unit; ℤ12-এ unit মাত্র ৪টি (φ(12) = 4: 1, 5, 7, 11), বাকি অশূন্যগুলো zero divisor. Python-এর pow(3, -1, 12) তাই ValueError দেয়; ব্লকটি সেটি ধরে বার্তাটি ছাপে।

প্রয়োগ ও সম্পর্ক: Lagrange (subgroup-এর order group-এর order-কে ভাগ করে) থেকে এক লাইনে Fermat আর Euler আসে। GF(28) AES-এ, GF(2)-এর ওপর polynomial CRC-তে, আর finite field Reed–Solomon code-এ। সসীম integral domain মানেই field.

পরীক্ষক যা খোঁজেন: তিন সংজ্ঞা (৩); ছকের উদাহরণ আর প্রতিউদাহরণ (৩); ℤn-এর শর্ত আর কারণ (৩); একটি প্রয়োগ (১)। পর্ব ৭০ · পর্ব ৭১

যেখানে নম্বর কাটে: “ring-এ গুণের inverse থাকে” লেখা; (ℤ, ·)-কে group বলা; GF(4)-কে ℤ4 ভাবা (ℤ4 field নয়)।

চ-০২Regular আর context-free language-এর তুলনা করুন: grammar-এর আকার, যন্ত্র, উদাহরণ, closure. {aⁿbⁿ : n ≥ 1} কেন context-free কিন্তু regular নয়, তার ধারণা দিন। — ১০ নম্বর (মাঝারি–কঠিন)
মাপকাঠিRegular (type 3)Context-free (type 2)
Grammar-এর নিয়মA → aB বা A → aA → β (বাঁয়ে একটি variable)
যন্ত্রDFA, NFA, regular expression (Kleene)Pushdown automaton (stack-সহ)
স্মৃতিসসীম stateঅসীম হতে পারে এমন একটি stack
উদাহরণ(ab)*, ৩ দিয়ে বিভাজ্য binary সংখ্যা, অর্ডার-কোডের ফরম্যাটaⁿbⁿ, balanced বন্ধনী, গাণিতিক রাশি
Closureunion, intersection, complement সবই (product construction)union-এ হ্যাঁ; intersection আর complement-এ নয় (প্রমাণ এই কোর্সে নয়)
কাজেlexer, pattern খোঁজাparser, programming language-এর syntax

aⁿbⁿ: grammar S → aSb ∣ ab এটি তৈরি করে, তাই context-free. Regular নয়, তার ধারণা pigeonhole দিয়ে: ধরুন k-state-এর DFA এটি চেনে। a1, a2, …, ak+1 এই k + 1টি prefix-এর দুটি, ai আর aj (i ≠ j), একই state-এ পৌঁছায়। তখন aibi গৃহীত হলে ajbi-ও গৃহীত, যা ভাষায় নেই: বিরোধ। একই যুক্তির আনুষ্ঠানিক রূপ pumping lemma (পর্ব ৭৪)।

ছবি ৮১.১ — language-এর শ্রেণি, ভেতর থেকে বাইরে

Finite ⊂ regular ⊂ context-free ⊂ decidable ⊂ recognizable ⊂ all languages

Nested classes of languages with one example in each band সব language যেমন HALT-এর complement recognizable যেমন HALT decidable যেমন aⁿbⁿcⁿ context-free যেমন aⁿbⁿ regular যেমন (ab)* সসীম যেমন {ab, ba}

সীমা: প্রতিটি ধাপ কড়াভাবে বড় (⊊)। aⁿbⁿcⁿ context-free নয়, তার প্রমাণে context-free-এর pumping lemma লাগে, যা এই কোর্সে নেই; context-free language যে decidable, সেটিও পরিকল্পিত Theory of Computation কোর্সের বিষয়। ছবিতে Chomsky-র type 1 (context-sensitive) শ্রেণি আলাদা দেখানো হয়নি; সেটি context-free আর decidable-এর মাঝে পড়ে।

পরীক্ষক যা খোঁজেন: ছক (৪); aⁿbⁿ-এর grammar (১); regular না হওয়ার যুক্তি (৩); closure-এর পার্থক্য (১); প্রয়োগ (১)। পর্ব ৭৩ · পর্ব ৭৪

যেখানে নম্বর কাটে: “regular-এর subset সবসময় regular” লেখা (aⁿbⁿ ⊆ a*b*, তবু regular নয়); NFA-কে DFA-র চেয়ে বেশি শক্তিশালী বলা।

চ-০৩Decidable আর recognizable language-এর সংজ্ঞা দিন। Halting problem কেন undecidable, তার মূল যুক্তি দিন। Rice-এর উপপাদ্য কী বলে, আর “SAT NP-complete” আর “halting undecidable” কথা দুটির পার্থক্য কী? — ১০ নম্বর (কঠিন)

সংজ্ঞা: L recognizable, যদি এমন Turing machine M থাকে যা L-এর প্রতিটি সদস্যে একসময় গ্রহণ করে, আর বাকিদের বর্জন করে বা চিরকাল চলে। L decidable, যদি এমন M থাকে যা প্রতিটি ইনপুটে থামে আর ঠিক L গ্রহণ করে। L decidable ⇔ L আর তার complement দুটিই recognizable.

Halting problem-এর যুক্তি (Turing, ১৯৩৬): ধরুন H আছে, যা প্রতিটি ⟨M, w⟩-এ বলে M, w-তে থামে কি না। নতুন যন্ত্র D বানাই: ইনপুট ⟨M⟩ পেলে H-কে ⟨M, ⟨M⟩⟩ জিজ্ঞেস করে, আর H “থামে” বললে D চিরকাল চলে, “থামে না” বললে থামে। এখন D-কে ⟨D⟩ দিলে D থামে ⇔ D থামে না: বিরোধ। এটি Cantor-এর diagonal-এরই রূপ। HALT নিজে recognizable (যন্ত্রটি চালিয়ে দেখি), তাই তার complement recognizable নয়।

Rice: যন্ত্রের language-এর যেকোনো অতুচ্ছ ধর্ম undecidable: “L(M) ফাঁকা কি না”, “M কোনো ইনপুটে hello ছাপে কি না”। কিন্তু কোডের চেহারার প্রশ্ন (“M-এ ১০টির বেশি state আছে কি?”) decidable. তাই বাস্তবের static analyzer অনুমান করে: কিছু bug ছাড়ে বা ভুয়া সতর্কতা দেয়।

মাপকাঠিSAT (NP-complete)Halting (undecidable)
Algorithm আছে?হ্যাঁ, সব assignment যাচাই; worst case-এ সময় exponential হতে পারেনা, কোনো সময়সীমাতেই নয়
প্রশ্নদক্ষতা (P = NP অমীমাংসিত)সম্ভব কি না (প্রমাণিতভাবে না)
বাস্তবেSAT solver অনেক বড় উদাহরণ মেটায় (পর্ব ৭৭)শুধু বিশেষ শ্রেণি বা আংশিক উত্তর

সীমা: Church–Turing thesis একটি thesis, উপপাদ্য নয়: “কার্যকর হিসাব” অনানুষ্ঠানিক ধারণা, তাই প্রমাণ হয় না; পক্ষে প্রমাণ হলো বিভিন্ন মডেলের সমতুল্যতা।

পরীক্ষক যা খোঁজেন: দুই সংজ্ঞা আর complement-এর সম্পর্ক (৩); diagonal যুক্তি (৩); Rice আর তার শর্ত (২); NP-complete বনাম undecidable (২)। পর্ব ৭৫ · পর্ব ৭৭

যেখানে নম্বর কাটে: “halting problem কঠিন কিন্তু বেশি সময় দিলে মেলে” লেখা; Rice-কে কোডের চেহারার প্রশ্নে খাটানো; recognizable আর decidable এক ভাবা।

৮ · ভাইভা — কৌশল, ২৪টি প্রশ্ন, ফাঁদ, সৎ উত্তর আর AI

ভাইভায় পরীক্ষক আপনার শেষ বাক্য থেকে পরের প্রশ্ন বানান। Discrete math-এ দুটি পরের প্রশ্ন প্রায় নিশ্চিত: “কোন শর্তে?” আর “একটি উদাহরণ দিন।” তাই প্রথম উত্তরেই একটি শর্ত আর একটি ছোট উদাহরণ রাখুন।

কী (এক বাক্য) → কোন শর্তে → একটি উদাহরণ বা প্রতিউদাহরণ

“Fermat-এর ছোট উপপাদ্য কী?” — “p মৌলিক হলে ap−1 ≡ 1 (mod p) (কী)। শর্ত p ∤ a; p ∣ a হলে বাঁ পাশ 0 (শর্ত)। যেমন 26 = 64 ≡ 1 (mod 7); আর converse মিথ্যা, 561 যৌগিক হয়েও সব সহমৌলিক base-এ পাস করে (উদাহরণ)।”

প্রতিটি প্রশ্ন-উত্তরের পর
পরীক্ষক
প্রার্থী (মূল কথা)
কেন ভালো উত্তর
জোড়া পর্ব
  1. শুরু। দুটি শর্তই এক বাক্যে; connected বাদ দিলে পরের প্রশ্ন সেখানেই আসত।
  2. এক বাক্যের প্রমাণ। “কেন” প্রশ্নে পুরো প্রমাণ নয়, মূল ধারণাটুকু।
  3. সীমা স্বীকার। “জানা নেই” বলা দুর্বলতা নয়, যদি কারণ (NP-complete) দেওয়া যায়।
  4. যথেষ্ট বনাম আবশ্যিক। Dirac না মিললেও Hamilton cycle থাকতে পারে।
  5. প্রয়োগ। “রাস্তা” শুনে edge চেনা; বিজোড় vertex জোড়া লাগাতে route inspection.
  6. শেষ। “দোকান” মানে vertex; ওজনসহ হলে TSP, যার জন্য বড় n-এ heuristic লাগে।

২৪টি ছোট প্রশ্ন — মুখে বলার উত্তর আর পরের প্রশ্ন

জোরে উত্তর বলুন, তারপর প্রশ্নে চেপে মেলান; প্রতিটিতে ৩০ সেকেন্ডের বেশি নয়। “পরের প্রশ্ন”-এর উত্তরও মুখে বলুন।

যুক্তি আর প্রমাণ (পর্ব ০১–১৩)

ভ-০১Tautology, contradiction আর satisfiable সূত্রের পার্থক্য? (সহজ)

Tautology সব assignment-এ সত্য, contradiction কোনোটিতেই নয়, satisfiable অন্তত একটিতে সত্য। φ tautology ⇔ ¬φ unsatisfiable. পর্ব ০৩

পরের প্রশ্ন: satisfiability যাচাই কত কঠিন? — SAT NP-complete (Cook–Levin, ১৯৭১); কিন্তু 2-SAT polynomial সময়ে মেলে।

ভ-০২p মিথ্যা হলে p → q কেন সত্য? (সহজ)

Implication একটি প্রতিশ্রুতি: শুধু p সত্য আর q মিথ্যা হলে তা ভাঙে। p মিথ্যা হলে প্রতিশ্রুতি পরীক্ষাই হয়নি; একে vacuous truth বলে। পর্ব ০২

পরের প্রশ্ন: “খালি সেটের সব উপাদান লাল” সত্য না মিথ্যা? — সত্য; মিথ্যা হতে হলে একটি অ-লাল উপাদান লাগত।

ভ-০৩¬∀x ∃y P(x, y)-কে quantifier-এর ভেতরে নেগেশন ঠেলে লিখুন। (মাঝারি)

∃x ∀y ¬P(x, y): প্রতিটি quantifier উল্টে যায়, নেগেশন ভেতরে ঢোকে। পর্ব ০৫

পরের প্রশ্ন: limit-এর ε–δ সংজ্ঞার নেগেশনে এটি কোথায় লাগে? — “একটি ε আছে, যার জন্য কোনো δ খাটে না”, ঠিক এই নিয়মেই।

ভ-০৪Loop invariant দিয়ে সঠিকতা দেখাতে কী কী প্রমাণ করতে হয়? (মাঝারি)

শুরুতে সত্য, প্রতিটি পুনরাবৃত্তিতে টিকে থাকে, আর loop শেষে invariant ∧ থামার শর্ত থেকে postcondition. এতে partial correctness; loop থামার প্রমাণ (variant) যোগ করলে total. পর্ব ১৩

পরের প্রশ্ন: থামা কীভাবে দেখাবেন? — একটি অঋণাত্মক পূর্ণসংখ্যার মান প্রতি পুনরাবৃত্তিতে কড়াভাবে কমে; well-ordering-এ অসীম কমা অসম্ভব।

সেট, সংখ্যাতত্ত্ব আর ক্রিপ্টো (পর্ব ১৪–৩০)

ভ-০৫কোন ফাংশনের inverse ফাংশন থাকে? (সহজ)

ঠিক bijection-এর (one-to-one আর onto দুটিই)। পর্ব ১৬

পরের প্রশ্ন: সমান আকারের সসীম সেটে one-to-one হলেই কি onto? — হ্যাঁ, pigeonhole থেকে; অসীমে নয়, যেমন ℕ-এ n ↦ 2n.

ভ-০৬Euclid-এর algorithm কেন দ্রুত? (মাঝারি)

প্রতি দুই ধাপে বড় সংখ্যাটি অর্ধেকের নিচে নামে, তাই ধাপ লগারিদমিক; Lamé-এর (১৮৪৪) সীমা: ধাপ ছোট সংখ্যার দশমিক অঙ্ক-সংখ্যার পাঁচগুণের বেশি নয়, সবচেয়ে খারাপ পরপর দুটি Fibonacci সংখ্যায়। পর্ব ২১

পরের প্রশ্ন: extended Euclid কী দেয়? — Bézout-এর x, y (ax + by = gcd); gcd = 1 হলে x-ই a-এর modular inverse.

ভ-০৭Chinese Remainder Theorem কখন অনন্য সমাধান দেয়? (মাঝারি)

Modulus-গুলো জোড়ায় জোড়ায় সহমৌলিক হলে, তাদের গুণফলের mod-এ ঠিক একটি সমাধান। পর্ব ২৩

পরের প্রশ্ন: সহমৌলিক না হলে? — সমাধান থাকতেও পারে, না-ও; x ≡ a (mod m), x ≡ b (mod n)-এ শর্ত gcd(m, n) ∣ a − b, আর তখন অনন্য lcm(m, n)-এর mod-এ।

ভ-০৮Diffie–Hellman কী রক্ষা করে না? (মাঝারি)

Authentication: মাঝখানে বসা আক্রমণকারী (man-in-the-middle) দুই পক্ষের সঙ্গে আলাদা key বানাতে পারেন; তাই সই বা certificate লাগে। পর্ব ২৯

পরের প্রশ্ন: নিরাপত্তা কিসের ওপর? — discrete log আর computational Diffie–Hellman-এর কঠিনতার অনুমান, ঠিকমতো বাছা group-এ।

গণনা আর সম্ভাবনা (পর্ব ৩১–৪৩)

ভ-০৯Generalized pigeonhole principle কী বলে? (সহজ)

N টি জিনিস k টি বাক্সে রাখলে কোনো বাক্সে অন্তত ⌈N/k⌉টি। পর্ব ৩২

পরের প্রশ্ন: কত জন হলে দুজনের জন্মদিন নিশ্চিতভাবে এক? — ৩৬৭ জন (৩৬৬টি সম্ভাব্য তারিখ); ২৩ জনের কথাটি সম্ভাবনার, নিশ্চয়তার নয়।

ভ-১০Birthday paradox-এর মূল সংখ্যা আর hashing-এ তার অর্থ? (মাঝারি)

৩৬৫টি সমসম্ভব দিনে ২৩ জনের মধ্যে অন্তত একটি মিলের সম্ভাবনা প্রায় ০.৫০৭. b বিটের hash-এ collision আশা করা যায় প্রায় 2b/2টি ইনপুটে, 2b-এ নয় (birthday bound). পর্ব ৪২

পরের প্রশ্ন: ছোট অর্ডার-ID-তে এর প্রভাব? — এলোমেলো ID-র দৈর্ঘ্য এমন রাখতে হয় যাতে প্রত্যাশিত অর্ডার-সংখ্যা 2b/2-এর অনেক নিচে থাকে।

ভ-১১C(n, k) = C(n, n − k) — গণনা দিয়ে কেন? (সহজ)

k জনকে বাছা মানেই বাকি n − k জনকে বাদ রাখা: দুই বাছাইয়ের মধ্যে bijection. পর্ব ৩৪

পরের প্রশ্ন: Pascal-এর অভেদ গণনায়? — একটি নির্দিষ্ট মানুষ দলে আছেন (C(n − 1, k − 1)) বা নেই (C(n − 1, k)).

ভ-১২Markov আর Chebyshev অসমতা কোন শর্ত চায়? (মাঝারি)

Markov: X ≥ 0 আর a > 0, P(X ≥ a) ≤ E[X]/a. Chebyshev: variance সসীম, P(|X − μ| ≥ kσ) ≤ 1/k². পর্ব ৪১

পরের প্রশ্ন: Chernoff কখন অনেক ভালো? — স্বাধীন Bernoulli-র যোগফলে; লেজ exponential হারে ছোট হয়।

Recurrence আর উন্নত গণনা (পর্ব ৪৪–৫১)

ভ-১৩Catalan সংখ্যা কোথায় আসে? (মাঝারি)

n জোড়া balanced বন্ধনী, n টি internal node-এর binary tree, (n + 2)-ভুজের triangulation, Dyck path: সবই Cn = C(2n, n)/(n + 1); 1, 1, 2, 5, 14, 42, … পর্ব ৫০

পরের প্রশ্ন: recurrence? — Cn+1 = ∑i=0n CiCn−i: প্রথম বন্ধনী কোথায় বন্ধ হয়, তা ধরে ভাগ।

ভ-১৪Master theorem কখন খাটে না? (মাঝারি)

উপসমস্যা অসমান হলে, বিয়োগে ছোট হলে (T(n − 1) + n), বা চালিকা-খরচ nd-এর মতো নয় হলে (n log n, n/log n). পর্ব ৪৭

পরের প্রশ্ন: তখন কী করবেন? — Recursion tree, substitution দিয়ে প্রমাণ, বা Akra–Bazzi.

ভ-১৫Ordinary আর exponential generating function কখন কোনটি? (কঠিন)

Ordinary (∑anxn) ক্রমহীন বাছাই আর combination-এ; exponential (∑anxn/n!) লেবেলযুক্ত সাজানো আর permutation-এ, কারণ গুণফলে C(n, k) আপনা-আপনি আসে। পর্ব ৪৮

পরের প্রশ্ন: দুই sequence-এর convolution generating function-এ কী? — দুই series-এর গুণফল।

ভ-১৬Burnside-এর lemma এক লাইনে, একটি উদাহরণসহ। (কঠিন)

আলাদা রূপের (orbit) সংখ্যা = group-এর উপাদানগুলোর স্থির বিন্দুর গড়। ২ রঙে ৪ পুঁতির মালা, শুধু ঘোরানো: (16 + 2 + 4 + 2)/4 = 6. পর্ব ৫১

পরের প্রশ্ন: উল্টানোও চললে? — dihedral group নিতে হয়; সংখ্যা কমতে বা একই থাকতে পারে, কখনো বাড়ে না।

Relation, graph আর tree (পর্ব ৫২–৬৮)

ভ-১৭Handshake lemma আর তার একটি ফল? (সহজ)

∑deg(v) = 2e, তাই বিজোড় degree-এর vertex জোড় সংখ্যক (handshake lemma). পর্ব ৫৭

পরের প্রশ্ন: ৫ জনের প্রত্যেকে ঠিক ৩ জনের সঙ্গে হাত মেলাতে পারেন? — না; 5 · 3 = 15 বিজোড়, অথচ degree-যোগফল জোড় হতে হয়।

ভ-১৮Graph কখন bipartite? (সহজ)

ঠিক তখন, যখন কোনো বিজোড় দৈর্ঘ্যের cycle নেই; অর্থাৎ ২ রঙে রং করা যায়, BFS-এর স্তর দিয়ে যাচাই। পর্ব ৬৩ · পর্ব ৬৪

পরের প্রশ্ন: Hall-এর শর্ত? — X-এর প্রতিটি subset S-এ |N(S)| ≥ |S| হলেই X-কে পুরো ঢাকা matching আছে।

ভ-১৯Tree-এর তিনটি সমতুল্য সংজ্ঞা বলুন। (সহজ)

Connected আর acyclic; n টি vertex, n − 1টি edge আর connected; যেকোনো দুই vertex-এর মধ্যে ঠিক একটি simple path. পর্ব ৬৫

পরের প্রশ্ন: n টি লেবেলযুক্ত vertex-এ কয়টি tree? — Cayley: nn−2; প্রমাণের একটি পথ Prüfer sequence.

ভ-২০ঋণাত্মক weight-এ Dijkstra কেন ভাঙে? (মাঝারি)

প্রমাণের মূল দাবি: settled vertex-এর দূরত্ব আর কমবে না। ঋণাত্মক edge থাকলে পরে আরও ছোট পথ আসতে পারে। পর্ব ৬১

পরের প্রশ্ন: তাহলে কী? — Bellman–Ford; আর ঋণাত্মক cycle থাকলে সবচেয়ে ছোট পথই সংজ্ঞায়িত নয়।

বীজগণিত আর গণনার মডেল (পর্ব ৬৯–৭৭)

ভ-২১Lagrange-এর উপপাদ্য আর তার একটি ফল? (মাঝারি)

সসীম group-এ subgroup-এর order group-এর order-কে ভাগ করে; তাই প্রতিটি উপাদানের order-ও। ফল: a|G| = e, যা ℤn-এর unit-group-এ Euler-এর উপপাদ্য। পর্ব ৭০

পরের প্রশ্ন: ১৫ উপাদানের group-এ ৪ উপাদানের subgroup সম্ভব? — না; 4 ∤ 15.

ভ-২২Minimum distance d-এর code কতটি error ধরে আর শোধরায়? (মাঝারি)

d − 1টি পর্যন্ত ধরে, ⌊(d − 1)/2⌋টি পর্যন্ত শোধরায় (minimum distance). Hamming(7,4)-এ d = 3: ২টি ধরা বা ১টি শোধরানো। পর্ব ৭২

পরের প্রশ্ন: একসঙ্গে ১টি শোধরানো আর ২টি ধরা? — একটি parity বিট যোগ করে d = 4: SECDED.

ভ-২৩NFA কি DFA-র চেয়ে বেশি শক্তিশালী? (সহজ)

না; subset construction প্রতিটি NFA-কে সমান ভাষার DFA বানায়। তবে state-সংখ্যা 2n পর্যন্ত বাড়তে পারে, আর কিছু ভাষায় তা এড়ানো যায় না। পর্ব ৭৪

পরের প্রশ্ন: regular expression কোন শ্রেণি বর্ণনা করে? — ঠিক regular language (Kleene-এর উপপাদ্য)।

ভ-২৪2-SAT সহজ, 3-SAT কঠিন — কেন? (কঠিন)

2-literal-এর clause (a ∨ b) দুটি implication ¬a → b, ¬b → a; implication graph-এ কোনো x আর ¬x একই SCC-তে থাকলে unsatisfiable, নইলে satisfiable: polynomial সময়। 3-SAT NP-complete. পর্ব ৭৭

পরের প্রশ্ন: NP-complete মানে কি অসমাধ্য? — না; algorithm আছে, শুধু worst case-এ দ্রুত কোনোটি জানা নেই; halting-এর মতো undecidable নয়।

সাধারণ ফাঁদ — যেসব কথায় নম্বর কাটে

ফাঁদের কথাকেন ভুলঠিক কথা
“১০০০টি n-এ মিলেছে, তাই প্রমাণিত”n² + n + 41 ৪০টিতে মেলে, তারপর ভাঙেযাচাই সন্দেহ দূর করে, প্রমাণ করে না
“RSA-তে m আর n সহমৌলিক হতেই হবে”সঠিকতার প্রমাণ সব m-এ খাটেp ∣ m ক্ষেত্র আলাদা করে দেখান
“Disjoint মানে independent”একটি ঘটলে অন্যটি অসম্ভবধনাত্মক সম্ভাবনায় disjoint ঘটনা dependent
“e ≤ 3v − 6 মানে planar”শর্তটি শুধু আবশ্যিকK3,3: 9 ≤ 12, তবু non-planar
“Dirac না মিললে Hamilton নেই”Dirac শুধু যথেষ্টC5-এ Dirac খাটে না, Hamilton আছে
“Halting problem শুধু ধীর”কোনো algorithm-ই নেইNP-complete আর undecidable আলাদা
বানানো সাল, নাম বা “বিখ্যাত প্রশ্ন”একটি ভুলেই সব উত্তরে সন্দেহনিশ্চিত না হলে “প্রায়”, “বলে উল্লেখিত”

না জানলে — সৎভাবে উত্তর

আংশিক জানলে বলুন “পুরো প্রমাণ মনে নেই; যা জানি, Huffman-এর মূল ধাপ হলো বিরল দুটিকে গভীরে ভাই করা যায়, এর বাইরে অনুমান করব না।” সূত্র ভুলে গেলে ছোট উদাহরণ থেকে বের করুন: C(n + r − 1, r) মনে না থাকলে n = 2, r = 2-এ হাতে গুনে (৩টি) মেলান। নিজের ভুল ধরা পড়লে “আগে যা বলেছি, তা ভুল; ঠিক হলো …” বলুন। সাল, নাম বা উপপাদ্যের শর্ত কখনো বানাবেন না।

AI-এর যুগে — AI-কে কড়া পরীক্ষক বানান

AI সহকারী প্রশ্ন বানাতে আর উত্তর যাচাই করাতে কাজে লাগে, কিন্তু গণিতে তারা প্রায়ই আত্মবিশ্বাসী অথচ ভুল প্রমাণ লেখে (circular যুক্তি, converse প্রমাণ, basis বাদ, শূন্য হতে পারে এমন কিছু দিয়ে ভাগ), ভুল গোনে (off-by-one, একই জিনিস দুবার, ক্রম উপেক্ষা), উপপাদ্য শর্ত ছাড়া বলে (Fermat-এ p ∤ a, Euler-এর সূত্রে connected, Hall-এ bipartite), বই বা প্রবন্ধের নাম বানায়, আর বড় সংখ্যায় modular হিসাব ভুল করে। তাই তাকে পরীক্ষক বানান, আর প্রতিটি দাবি ছোট brute force, এলোমেলো ইনপুট, প্রতিউদাহরণ খোঁজা আর বিশ্বস্ত পাঠ্যবইয়ে মেলান।

তুমি একজন কড়া পরীক্ষক, বিষয় Discrete Mathematics. নিচে একটি ১০ নম্বরের "তুলনা করুন" ধরনের প্রশ্ন আর আমার উত্তর দিলাম। [প্রশ্ন] [আমার উত্তর — সংজ্ঞা, ছক, উদাহরণ, কখন কোনটি] ১. মার্ক-স্কিম বানাও: সংজ্ঞা, তুলনার ছক, উদাহরণ ও প্রতিউদাহরণ, কখন কোনটি, সীমা — কোনটিতে কত। তারপর নম্বর দাও। ২. প্রতিটি সংজ্ঞা আর উপপাদ্যে কোনো শর্ত (hypothesis) বাদ পড়েছে কি না, লাইন ধরে বলো। ৩. আমার প্রতিটি উদাহরণ সত্যিই দাবিটি দেখায় কি না যাচাই করো; কোনো সংখ্যা ভুল হলে কোথায়, বলো। ৪. Converse, circular যুক্তি বা "কয়েকটি উদাহরণে মিলেছে, তাই সত্য" ধরনের ভুল আছে কি না দেখো। ৫. একটি ছোট উদাহরণ দাও যা আমি নিজে brute force করে মেলাতে পারি; উত্তরটি নিজে হিসাব করে দিও না। ৬. নিশ্চিত না হলে "নিশ্চিত নই" লেখো; কোনো বই, সাল বা নাম বানাবে না। ৭. শেষে "কোন শর্তে?" আর "একটি প্রতিউদাহরণ দিন" ধরনের তিনটি ভাইভা প্রশ্ন দাও, উত্তর ছাড়া।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমLanguage-এর শ্রেণিগুলো ছোট থেকে বড় ক্রমে সাজান, যাতে প্রতিটি পরেরটির ভেতরে থাকে (▲▼ চেপে সরান)

  1. সসীম language
  2. Regular language
  3. Context-free language
  4. Decidable language
  5. Recognizable language
  6. {0, 1}-এর ওপর সব language

(সহজ) “যেকোনো পূর্ণসংখ্যা n-এর জন্য, n² জোড় হলে n জোড়” — কোন পদ্ধতি সবচেয়ে সরাসরি পথ দেয়?

  • Direct proof: n² = 2k ধরে শুরু
  • Contrapositive: n বিজোড় ধরে n² বিজোড় দেখানো
  • n-এর ওপর induction
  • n = 4 বসিয়ে মিলিয়ে দেখা

(সহজ) বাজারঘরে ৫ রকম মিষ্টি আছে। একজন ক্রেতা ৩টি মিষ্টি নেবেন; একই রকম একাধিক নেওয়া যায়, আর কোনটি আগে নিলেন তাতে কিছু আসে যায় না। কয়টি আলাদা বাছাই সম্ভব?

  • ১০
  • ৩৫
  • ৬০
  • ১২৫

(মাঝারি) একটি স্বয়ংক্রিয় পরীক্ষা ২% ক্ষেত্রে থাকা একটি সমস্যার ৯০% ধরে, আর সমস্যা না থাকলে ১০% ক্ষেত্রে ভুল সতর্কতা দেয়। সতর্কতা এলে সমস্যাটি সত্যিই থাকার সম্ভাবনা প্রায় কত?

  • ৯০%
  • ৯৮%
  • ১৫.৫%
  • ২%

(মাঝারি) সেট {1, 2, 3}-এর ওপর R = {(1, 1), (2, 2), (3, 3), (1, 2)}। R কী?

  • Equivalence relation, কিন্তু partial order নয়
  • Partial order, কিন্তু equivalence relation নয়
  • দুটিই
  • কোনোটিই নয়

(মাঝারি) একটি simple graph-এ ৬টি vertex আর ১৩টি edge আছে। এটি কি planar হতে পারে?

  • হ্যাঁ, কারণ v − e + f = 2 থেকে f = 9 পাওয়া যায়
  • না, কারণ 13 > 3 · 6 − 6
  • বলা যায় না, Kuratowski-র subgraph খুঁজতে হবে
  • হ্যাঁ, যদি graph connected হয়

(কঠিন) একটি Turing machine M সম্পর্কে নিচের কোন প্রশ্নটি decidable?

  • M ফাঁকা ইনপুটে থামে কি না
  • L(M) ফাঁকা কি না
  • M-এর নিয়মের টেবিলে ১০টির বেশি state আছে কি না
  • M কোনো ইনপুটে “hello” ছাপে কি না

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব শব্দ এখানে একসাথে:

মনে রাখুন

  1. কাঠামোই নম্বর: সংজ্ঞা → একই সারির তুলনার ছক → উদাহরণ ও প্রতিউদাহরণ → কখন কোনটি → সীমা।
  2. শর্ত ছাড়া উপপাদ্য নয়: Fermat-এ p ∤ a, Euler circuit-এ connected, e ≤ 3v − 6-এ simple ও v ≥ 3, ℤn field কেবল n মৌলিক হলে।
  3. আবশ্যিক বনাম যথেষ্ট: edge-সীমা planarity প্রমাণ করে না, Dirac না মিললেও Hamilton থাকতে পারে, Fermat test পাস করলেও যৌগিক হতে পারে।
  4. প্রতিটি সংখ্যা যাচাই: ছোট brute force দিয়ে সূত্র মেলান (৩৫, ১৯/১১৮, ২২৪), কিন্তু মনে রাখুন যাচাই প্রমাণ নয়।
  5. ভাইভায় তিন বাক্য: কী → কোন শর্তে → একটি উদাহরণ; না জানলে সৎভাবে বলুন, কিছু বানাবেন না।

পরের পর্বে: পর্ব ৮২ (প্রমাণ লেখার অনুশীলন — ধাপে ধাপে আদর্শ উত্তর)-এ এখানকার তুলনার পেছনের উপপাদ্যগুলোর পূর্ণ প্রমাণ ধাপে ধাপে লেখা আর marking rubric দিয়ে মেলানোর অনুশীলন।

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

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান