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

Random variable আর প্রত্যাশা — linearity-র জাদু

Random Variables and Expectation — PMFs, Bernoulli, Binomial and Geometric Distributions, Linearity of Expectation, Indicator Variables, Fixed Points, the Coupon Collector and Randomized Quicksort

Taught in Bangla, this lesson treats a random variable as a function and writes its distribution as a pmf. It derives the Bernoulli, uniform, binomial and geometric distributions, defines expectation noting the St Petersburg paradox, and proves linearity of expectation without independence. Indicator variables give the expected number of fixed points, records, the coupon collector time and randomized quicksort comparisons, and in-page Python checks each value exactly with Fraction and by seeded simulation.

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

  • Random variable-কে ফাংশন হিসেবে দেখা, আর pmf দিয়ে তার বণ্টন লেখা
  • Bernoulli, uniform, binomial আর geometric বণ্টনের সূত্র গণনা থেকে বের করা আর প্রমাণ করা
  • প্রত্যাশার সংজ্ঞা, linearity of expectation-এর পূর্ণ প্রমাণ, আর indicator random variable-এর কৌশল
  • Fixed point, record, coupon collector আর randomized quicksort-এর প্রত্যাশিত মান বের করা
  • প্রতিটি উত্তর Fraction দিয়ে নিখুঁতভাবে আর seed দেওয়া simulation দিয়ে মিলিয়ে দেখা

১ · Random variable — ফলাফল থেকে সংখ্যা

কাল্পনিক অনলাইন দোকান বাজারঘর প্রতিদিন সকালে একটি ভ্যানে ১০টি পার্সেল পাঠায়। দিনের শেষে ম্যানেজার জানতে চান না যে ঠিক কোন কোন পার্সেল দেরিতে পৌঁছেছে; তিনি জানতে চান কয়টি দেরিতে পৌঁছেছে। পুরো দিনের ফলাফল একটি লম্বা বিবরণ (প্রথম পার্সেল সময়মতো, দ্বিতীয়টি দেরিতে, …), কিন্তু তাঁর দরকার একটি সংখ্যা। ফলাফল থেকে সংখ্যা বানানোর এই নিয়মটিই random variable.

পরীক্ষার খাতা দেখার কথা ভাবুন। প্রতিটি খাতায় অনেক কিছু লেখা থাকে, কিন্তু ফল প্রকাশের সময় প্রতিটি খাতা থেকে একটি নম্বর বের হয়। “খাতা → নম্বর” এই নিয়মটি একটি ফাংশন। কোন খাতা আসবে তা আগে জানা নেই বলে নম্বরটিও আগে জানা নেই। নামে “random” আর “variable” থাকলেও জিনিসটি আসলে একটি নির্দিষ্ট ফাংশন; এলোমেলো শুধু তার ইনপুট।

পর্ব ৩৮ “বিচ্ছিন্ন সম্ভাবনা — sample space, event আর Laplace-এর সংজ্ঞা”-এ একটি পরীক্ষার সব সম্ভাব্য ফলাফলের সেটকে বলা হয়েছে sample space Ω, আর প্রতিটি ফলাফল ω-এর সম্ভাবনা P(ω) ≥ 0, যাদের যোগফল 1. এই পর্বে Ω সবসময় সসীম বা গণনাযোগ্য (countable), অর্থাৎ বিচ্ছিন্ন।

সংজ্ঞা ১.১ (random variable আর pmf)

একটি বিচ্ছিন্ন সম্ভাবনা-স্থান (Ω, P)-এর ওপর একটি random variable হলো একটি ফাংশন X : Ω → ℝ (পর্ব ১৬)। প্রতিটি বাস্তব সংখ্যা x-এর জন্য “X = x” হলো event {ω ∈ Ω : X(ω) = x}, অর্থাৎ x-এর preimage. X-এর pmf (probability mass function) হলো

pX(x) = P(X = x) = ∑ω : X(ω) = x P(ω)

যে মানগুলোতে pX(x) > 0, তাদের সেটকে X-এর range বা support বলে। pmf-ই X-এর probability distribution (বণ্টন)।

সবচেয়ে ছোট উদাহরণ: একটি মুদ্রা দুবার ছোড়া, Ω = {HH, HT, TH, TT}, প্রতিটির সম্ভাবনা 1/4. X = মোট head-এর সংখ্যা। তাহলে X(HH) = 2, X(HT) = X(TH) = 1, X(TT) = 0. preimage গুনলে P(X = 0) = 1/4, P(X = 1) = 2/4 = 1/2, P(X = 2) = 1/4. খেয়াল করুন, X one-to-one নয়: দুটি আলাদা ফলাফল একই মান 1 পায়, আর সেই কারণেই মান 1-এর সম্ভাবনা বেশি।

Random variable একটি ফাংশন: X = দুবার ছোড়ায় head-এর সংখ্যা

বাঁয়ে sample space-এর চারটি সমান সম্ভাব্য ফলাফল, ডানে X-এর মান। একটি মানে যত ফলাফল পৌঁছায়, তাদের সম্ভাবনা যোগ করলেই pmf (নিচের স্তম্ভ)।

A random variable X maps the outcomes HH, HT, TH, TT to 2, 1, 1, 0; its pmf is 1/4, 1/2, 1/4 Ω X-এর মান HH · 1/4 HT · 1/4 TH · 1/4 TT · 1/4 2 1 0 X pmf 1/41/21/4 012

দুটি সহজ তথ্য, যা প্রতিটি pmf মেনে চলে: (১) pX(x) ≥ 0, আর (২) সব x-এর ওপর ∑ pX(x) = 1. দ্বিতীয়টির প্রমাণ: “X = x” event-গুলো আলাদা x-এর জন্য পরস্পর বিচ্ছিন্ন, আর মিলে পুরো Ω, কারণ প্রতিটি ω ঠিক একটি মানে যায় (ফাংশনের সংজ্ঞা)। তাই তাদের সম্ভাবনার যোগফল P(Ω) = 1. ফাংশন হওয়ার শর্তটিই এখানে কাজ করছে: একটি ফলাফল দুটি মান পেলে যোগফল 1 ছাড়িয়ে যেত।

একই Ω-এর ওপর অনেক random variable থাকতে পারে। দুটি ছক্কা ছুড়লে (৩৬টি সমান সম্ভাব্য ফলাফল) S = যোগফল, M = বড়টি, D = পার্থক্য, সবই আলাদা ফাংশন। পর্ব ৩৮-এর সেই সতর্কবাণী এখানেও খাটে: S-এর মান ১১টি (2 থেকে 12), কিন্তু তারা সমান সম্ভাব্য নয়; সমান সম্ভাব্য হলো ৩৬টি ফলাফল। random variable-এর মানগুলো গুনে Laplace-এর সংজ্ঞা লাগালে ভুল হয়; গুনতে হয় preimage-এর ফলাফল। দুটি চলক X, Y থেকে নতুন চলক বানানো যায়: X + Y, XY, X², max(X, Y), কারণ এগুলো ω ধরে ধরে সংজ্ঞায়িত, যেমন (X + Y)(ω) = X(ω) + Y(ω).

২ · চারটি মৌলিক বণ্টন — Bernoulli, uniform, binomial আর geometric

বিচ্ছিন্ন গণিতে আর algorithm বিশ্লেষণে বারবার চারটি বণ্টন ফিরে আসে। চারটিই গণনা থেকে সরাসরি বের হয়; কোনো ক্যালকুলাস লাগে না।

সংজ্ঞা ২.১ (Bernoulli আর uniform)

Bernoulli(p): X-এর মান শুধু 0 বা 1, P(X = 1) = p, P(X = 0) = 1 − p, যেখানে 0 ≤ p ≤ 1. একটি পার্সেল দেরিতে পৌঁছাল কি না, একটি অর্ডার জালিয়াতি কি না, এমন যেকোনো হ্যাঁ/না প্রশ্ন। এর নাম Bernoulli distribution.

Uniform: একটি সসীম সেট {a1, …, an}-এর প্রতিটি মান সম্ভাবনা 1/n-এ; যেমন ছক্কা, বা ১ থেকে n-এর মধ্যে এলোমেলো একটি order id. এটি uniform distribution.

উপপাদ্য ২.২ (binomial pmf)

n-টি পরস্পর স্বাধীন চেষ্টার প্রতিটিতে সাফল্যের সম্ভাবনা p হলে, X = মোট সাফল্যের সংখ্যার pmf

P(X = k) = C(n, k) pk (1 − p)n−k, k = 0, 1, …, n

এই বণ্টনের নাম binomial distribution, সংক্ষেপে Bin(n, p).

প্রমাণ:

  1. একটি ফলাফল হলো দৈর্ঘ্য n-এর একটি S/F (সাফল্য/ব্যর্থতা) সারি। চেষ্টাগুলো স্বাধীন, তাই একটি নির্দিষ্ট সারির সম্ভাবনা প্রতিটি ঘরের সম্ভাবনার গুণফল। — স্বাধীনতার সংজ্ঞা (পর্ব ৩৯-এ বিস্তারিত)
  2. যে সারিতে ঠিক k-টি S, তার সম্ভাবনা pk(1 − p)n−k, কোন ঘরে S বসল তার ওপর নির্ভর করে না। — গুণফলে ক্রম বদলায় না
  3. ঠিক k-টি S-এর সারি কয়টি? n-টি ঘর থেকে S-এর k-টি ঘর বাছাই: C(n, k)টি (পর্ব ৩৩)। — combination
  4. আলাদা সারিগুলো পরস্পর বিচ্ছিন্ন ফলাফল, তাই তাদের সম্ভাবনা যোগ হয়: C(n, k) pk(1 − p)n−k. — সম্ভাবনার যোগের axiom
  5. যাচাই: সব k-এর যোগ = (p + (1 − p))n = 1n = 1, binomial theorem অনুযায়ী (পর্ব ৩৪)। ∎ — binomial theorem

নামটির উৎসও এটি: pmf-গুলো হলো (p + q)n-এর বিস্তারের পদ, q = 1 − p. স্বাধীনতার শর্তটি জরুরি। একটি ২০টি পণ্যের লট থেকে, যার ৪টি ত্রুটিপূর্ণ, ফেরত না রেখে ৫টি তুললে ত্রুটিপূর্ণের সংখ্যা binomial নয়; প্রতিটি তোলা আগেরটির ওপর নির্ভর করে, আর সেখানে hypergeometric সূত্র C(4, k)C(16, 5 − k)/C(20, 5) খাটে (পর্ব ৩৮)। §৮-এর অঙ্কে দেখবেন, স্বাধীনতা না থাকলেও সেখানকার প্রত্যাশা একই সহজ কৌশলে বের হয়।

উপপাদ্য ২.৩ (geometric pmf)

স্বাধীন চেষ্টার প্রতিটিতে সাফল্যের সম্ভাবনা p (0 < p ≤ 1), আর X = প্রথম সাফল্য যে চেষ্টায় আসে তার ক্রমিক নম্বর। তাহলে

P(X = k) = (1 − p)k−1 p, k = 1, 2, 3, …

এটি geometric distribution, আর এর sample space অসীম কিন্তু গণনাযোগ্য।

প্রমাণ: “X = k” ঘটে ঠিক তখন, যখন প্রথম k − 1টি চেষ্টা ব্যর্থ আর k-তমটি সফল; স্বাধীনতায় এর সম্ভাবনা (1 − p)k−1p. যোগফল যাচাই: q = 1 − p ধরলে ∑k≥1 qk−1p = p · 1/(1 − q) = p/p = 1, কারণ 0 ≤ q < 1 হলে গুণোত্তর ধারা অভিসারী (পর্ব ১৭)। ∎ বাজারঘরের উদাহরণ: একজন গ্রাহক বাসায় থাকেন সম্ভাবনা 4/5, আর প্রতিটি ডেলিভারি চেষ্টা আলাদা দিনে, স্বাধীন। তাহলে তৃতীয় চেষ্টায় প্রথম সফল ডেলিভারির সম্ভাবনা (1/5)² · (4/5) = 4/125.

দুটি প্রচলিত রূপ: কিছু বই (আর অনেক লাইব্রেরি) geometric চলক দিয়ে “প্রথম সাফল্যের আগে কয়টি ব্যর্থতা” বোঝায়: Y = X − 1, মান 0, 1, 2, …. দুই রূপের প্রত্যাশা আলাদা: 1/p বনাম (1 − p)/p. সূত্র ব্যবহারের আগে দেখে নিন কোন রূপটি বলা হচ্ছে; এই পর্বে সবসময় X, অর্থাৎ চেষ্টার সংখ্যা।

এবার Python-এ binomial-এর নিখুঁত pmf (Fraction দিয়ে) আর একটি seed দেওয়া simulation পাশাপাশি দেখা যাক। বাজারঘরের ভ্যানে ১০টি পার্সেল, প্রতিটি স্বাধীনভাবে 1/5 সম্ভাবনায় দেরিতে পৌঁছায়। প্রথমবার চালালে ব্রাউজারে Python (Pyodide) নামতে কয়েক সেকেন্ড লাগে।

import random
from fractions import Fraction
from math import comb

n, p = 10, Fraction(1, 5)          # 10 parcels, each late with probability 1/5
pmf = {k: comb(n, k) * p**k * (1 - p)**(n - k) for k in range(n + 1)}
print("sum of pmf:", sum(pmf.values()))
print("E[X] by definition:", sum(k * q for k, q in pmf.items()), "  n*p =", n * p)

random.seed(40)
trials = 20000
counts = [0] * (n + 1)
for _ in range(trials):
    late = sum(random.random() < 0.2 for _ in range(n))
    counts[late] += 1

print(" k   exact    simulated")
for k in range(6):
    print(f"{k:2d}  {float(pmf[k]):.4f}   {counts[k] / trials:.4f}")
tail = sum(pmf[k] for k in range(6, n + 1))
print(f"6+  {float(tail):.4f}   {sum(counts[6:]) / trials:.4f}")
mean = sum(k * c for k, c in enumerate(counts)) / trials
print(f"average late parcels in the simulation: {mean:.4f}")

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

sum of pmf: 1
E[X] by definition: 2   n*p = 2
 k   exact    simulated
 0  0.1074   0.1104
 1  0.2684   0.2650
 2  0.3020   0.3013
 3  0.2013   0.2008
 4  0.0881   0.0909
 5  0.0264   0.0255
6+  0.0064   0.0063
average late parcels in the simulation: 1.9990

প্রথম লাইন Fraction-এ নিখুঁতভাবে দেখায় যে pmf-এর যোগফল ঠিক 1, কোনো দশমিকের গোলমাল ছাড়া। দ্বিতীয় লাইনে সংজ্ঞা ধরে ∑ k · P(X = k) হিসাব করে ঠিক 2 এসেছে, যা np = 10 × 1/5-এর সমান; কেন সবসময় np, তা §৪-এ এক লাইনে প্রমাণ হবে। টেবিলে ২০,০০০টি কাল্পনিক দিনের simulation নিখুঁত মানের দুই দশমিকের মধ্যে মিলেছে, তবে হুবহু নয়: যেমন k = 0-তে 0.1104 বনাম 0.1074. এই ছোট বিচ্যুতি কত বড় হতে পারে, সেই প্রশ্নের উত্তর পর্ব ৪১ “Variance আর concentration — Markov, Chebyshev আর Chernoff”-এর বিষয়। seed 40 দেওয়া আছে বলে আপনি যতবার চালাবেন, একই সংখ্যা পাবেন (seed-এর ধারণা পর্ব ২৬-এ)।

৩ · প্রত্যাশা — ভারযুক্ত গড়, আর যখন গড় অসীম

বাজারঘরের ম্যানেজার যদি একশো দিন ধরে প্রতিদিনের দেরির সংখ্যা লেখেন, তার গড় প্রায় 2 আসবে; উপরের simulation-এ এসেছে 1.999. দীর্ঘ মেয়াদে এই গড় কোথায় থিতু হয়, তা আগে থেকেই pmf থেকে বের করা যায়। প্রতিটি মানকে তার সম্ভাবনা দিয়ে গুণ করে যোগ করলেই হয়, ঠিক যেমন পরীক্ষার গড় নম্বর হিসাবে প্রতিটি নম্বরকে সেই নম্বর পাওয়া শিক্ষার্থীর অনুপাত দিয়ে গুণ করা হয়।

সংজ্ঞা ৩.১ (expectation)

বিচ্ছিন্ন random variable X-এর expected value (প্রত্যাশিত মান)

E[X] = ∑x x · P(X = x) = ∑ω ∈ Ω X(ω) P(ω)

যেখানে যোগফলটি absolutely convergent হতে হবে (∑ |x| P(X = x) < ∞); নইলে বলা হয় E[X] নেই, বা ধনাত্মক চলকে E[X] = ∞. Ω সসীম হলে শর্তটি নিজে থেকেই পূরণ হয়।

দুটি রূপ কেন সমান? দ্বিতীয় যোগফলে ω-গুলোকে X-এর মান ধরে দলে ভাগ করুন। যে দলে X(ω) = x, সেখানে প্রতিটি পদ x · P(ω), আর দলের মোট x · P(X = x). সব দল যোগ করলে প্রথম রূপ। ধনাত্মক পদের অসীম যোগফলে বা absolutely convergent যোগফলে এমন পুনর্বিন্যাস বৈধ; শর্তটি সেই জন্যই। প্রথম রূপ হিসাবের জন্য সুবিধাজনক, দ্বিতীয় রূপ প্রমাণের জন্য, যা §৪-এ দেখবেন।

কয়েকটি সরাসরি হিসাব:

  • ছক্কা: E[X] = (1 + 2 + 3 + 4 + 5 + 6)/6 = 21/6 = 7/2. খেয়াল করুন, 3.5 কখনো ছক্কায় ওঠে না; প্রত্যাশিত মান মানে “সম্ভাব্য মান” নয়, দীর্ঘ মেয়াদের গড়।
  • Bernoulli(p): E[X] = 0 · (1 − p) + 1 · p = p.
  • {1, …, n}-এ uniform: E[X] = (1 + 2 + … + n)/n = (n + 1)/2, Gauss-এর যোগফল দিয়ে (পর্ব ১৭)।
  • Binomial: সংজ্ঞা ধরে ∑ k C(n, k) pk(1 − p)n−k হিসাব করা যায় (k C(n, k) = n C(n − 1, k − 1) identity দিয়ে), কিন্তু §৪-এ এর চেয়ে অনেক সহজ পথ আছে। উত্তর np.
উপপাদ্য ৩.২ (geometric-এর প্রত্যাশা)

X ~ Geometric(p), 0 < p ≤ 1 হলে E[X] = 1/p.

প্রমাণ (perturbation, পর্ব ১৭-এর কৌশল): q = 1 − p ধরুন, 0 ≤ q < 1.

  1. E[X] = ∑k≥1 k qk−1p = p · S, যেখানে S = 1 + 2q + 3q² + 4q³ + …. — সংজ্ঞা
  2. S অভিসারী: k qk−1-এর পরপর দুই পদের অনুপাত (k + 1)q/k → q < 1, তাই ratio test অনুযায়ী ধারাটি অভিসারী। — ratio test
  3. qS = q + 2q² + 3q³ + …. পদে পদে বিয়োগ করলে S − qS = 1 + q + q² + q³ + … = 1/(1 − q). — অভিসারী ধারার পদে পদে বিয়োগ
  4. তাই S(1 − q) = 1/(1 − q), অর্থাৎ S = 1/(1 − q)² = 1/p². — বীজগণিত
  5. E[X] = p · 1/p² = 1/p. ∎

অর্থ খুব স্বাভাবিক: গ্রাহক বাসায় থাকার সম্ভাবনা 4/5 হলে গড়ে 5/4 চেষ্টা লাগে; সম্ভাবনা 1/6 হলে (যেমন ছক্কায় ছয়) গড়ে ৬টি ছোড়া। নিচের stepper p = 1/2 নিয়ে ধারাটি ধাপে ধাপে যোগ করে আর perturbation-এ বন্ধ রূপে পৌঁছায়।

1P(X = k) = (1/2)^k2k = 1, 2: 1/2 + 2/43k = 3, 4: + 3/8 + 4/164k = 5, 6, 7 → 247/1285S − qS = 1 + q + q² + …6E = p · 1/p² = 1/p = 2
চলক (p = q = 1/2)
নতুন পদ
আংশিক যোগ
বাকি ফাঁক
  1. pmf. p = 1/2 হলে P(X = k) = (1/2)k−1 · 1/2 = (1/2)k. প্রথম পদ k · P(X = k) = 1 · 1/2, আংশিক যোগ 1/2.
  2. দুই পদ। দ্বিতীয় পদ 2 · 1/4 = 1/2; আংশিক যোগ 1/2 + 1/2 = 1. লক্ষ্য 2 থেকে ফাঁক এখন 1.
  3. চার পদ। 3/8 + 4/16 = 5/8 যোগ হয়ে আংশিক যোগ 13/8 = 1.625; ফাঁক 0.375.
  4. সাত পদ। 5/32 + 6/64 + 7/128 যোগ করলে 247/128 ≈ 1.930. পদগুলো ছোট হচ্ছে, তবে k-এর গুণের কারণে 2-এর চেয়ে ধীরে।
  5. Perturbation. S = ∑ k qk−1 থেকে qS বিয়োগ করলে গুণোত্তর ধারা 1/(1 − q) = 2 থাকে; তাই S(1 − q) = 2, S = 4.
  6. ফল। E[X] = p · S = 1/2 · 4 = 2 = 1/p. গড়ে দুবার মুদ্রা ছুড়লে প্রথম head আসে।

যখন প্রত্যাশা অসীম — St Petersburg paradox

একটি চিন্তা-পরীক্ষা: মুদ্রা ছুড়তে থাকুন যতক্ষণ না প্রথম head আসে; head যদি k-তম ছোড়ায় আসে, পুরস্কার 2k পয়েন্ট। প্রত্যাশিত পুরস্কার = ∑ 2k · 2−k = 1 + 1 + 1 + … = ∞. অথচ বাস্তবে প্রায় সব খেলাতেই পুরস্কার ছোট: অর্ধেক সময় মাত্র 2 পয়েন্ট। এটিই St Petersburg paradox, যার ইতিহাস ভাবনার প্রশ্নে আছে। গাণিতিক শিক্ষা দুটি: (১) প্রত্যাশা একটি অসীম যোগফল, যা অভিসারী না-ও হতে পারে, তাই সংজ্ঞায় শর্তটি অলংকার নয়; (২) পুরস্কারের ভাণ্ডার সীমিত হলে ছবি বদলে যায়। ভাণ্ডারে সর্বোচ্চ 220 = 10,48,576 পয়েন্ট থাকলে প্রত্যাশা মাত্র 21 (প্রথম ২০টি পদে 20, বাকি সব মিলে 1; scratch-এ Fraction দিয়ে যাচাই করা)।

৪ · Linearity of expectation — স্বাধীনতা ছাড়াই যোগ

এই পর্বের কেন্দ্রীয় উপপাদ্য, linearity of expectation, দেখতে খুব নিরীহ, কিন্তু ব্যবহারে প্রায় জাদুর মতো। এর শক্তি একটি বাক্যে: যোগফলের প্রত্যাশা প্রত্যাশার যোগফল, চলকগুলো একে অপরের ওপর যত নির্ভরশীলই হোক।

উপপাদ্য ৪.১ (linearity of expectation)

একই বিচ্ছিন্ন সম্ভাবনা-স্থানের ওপর X আর Y দুটি random variable, যাদের প্রত্যাশা আছে (সসীম), আর a, b বাস্তব ধ্রুবক। তাহলে

E[aX + bY] = a E[X] + b E[Y]

Induction দিয়ে, X1, …, Xn-এর জন্য E[X1 + … + Xn] = E[X1] + … + E[Xn]. X আর Y-এর স্বাধীনতার কোনো শর্ত নেই।

প্রমাণ:

  1. aX + bY একটি random variable, যার মান (aX + bY)(ω) = aX(ω) + bY(ω). — ফাংশনের যোগ
  2. E[aX + bY] = ∑ω (aX(ω) + bY(ω)) P(ω). যোগফলটি absolutely convergent, কারণ |aX(ω) + bY(ω)| ≤ |a||X(ω)| + |b||Y(ω)| আর ডান দিকের দুটি যোগফল সসীম। — সংজ্ঞা ৩.১-এর দ্বিতীয় রূপ, তুলনা
  3. Absolutely convergent যোগফলকে পদে পদে ভাগ করা যায়: = a ∑ω X(ω)P(ω) + b ∑ω Y(ω)P(ω). — যোগফলের রৈখিকতা
  4. = a E[X] + b E[Y]. ∎ — সংজ্ঞা ৩.১

প্রমাণে কোথাও P(X = x, Y = y)-এর মতো যৌথ সম্ভাবনা আসেনি। কারণটি গভীর: প্রত্যাশাকে ω-এর ওপর যোগফল হিসেবে লিখলে প্রতিটি ω-তে X আর Y-এর মান শুধু দুটি সংখ্যা, আর সংখ্যার যোগ সবসময় রৈখিক। নির্ভরশীলতা প্রভাব ফেলে কোন ω কত সম্ভাবনা পায় তাতে, কিন্তু সেই একই P(ω) দুই দিকেই বসে। আসলে এটি পর্ব ৩৭-এর double counting-এর ভাষায় একটি “সারি ধরে না গুনে কলাম ধরে গোনা”।

Indicator random variable — event থেকে সংখ্যা

সংজ্ঞা ৪.২ আর লেমা ৪.৩ (indicator)

একটি event A-এর indicator random variable IA: ω ∈ A হলে IA(ω) = 1, নইলে 0. তাহলে

E[IA] = 1 · P(A) + 0 · P(Ā) = P(A)

দুটি মিলিয়ে একটি সর্বজনীন কৌশল তৈরি হয়। “কয়টি জিনিস ঘটল” ধরনের যেকোনো সংখ্যা X-কে লিখুন X = I1 + I2 + … + In, যেখানে Ii হলো “i-তম জিনিসটি ঘটল”-এর indicator. তাহলে linearity অনুযায়ী

E[X] = P(A1) + P(A2) + … + P(An)

X-এর পুরো pmf জানার দরকার নেই; প্রতিটি ছোট event-এর সম্ভাবনা জানলেই যথেষ্ট। প্রথম প্রয়োগ: binomial-এর প্রত্যাশা। X = মোট সাফল্য = I1 + … + In, যেখানে Ii হলো i-তম চেষ্টা সফল হওয়ার indicator, E[Ii] = p. তাই E[X] = np, এক লাইনে। Code ব্লকে সংজ্ঞা ধরে পাওয়া 2 = 10 × 1/5 এখন প্রমাণিত।

আরও একটি উদাহরণ, যেখানে স্বাধীনতা নেই। একটি মুদ্রা ১০ বার ছুড়লে পরপর দুটি head (“HH”, পরস্পর জড়িয়ে থাকলেও আলাদা গুনে) গড়ে কয়বার আসে? i = 1, …, 9-এর জন্য Ji = “i-তম আর (i + 1)-তম ছোড়া দুটিই head”. J1 আর J2 স্বাধীন নয় (দুটিতেই দ্বিতীয় ছোড়া আছে), কিন্তু linearity-র তাতে কিছু যায় আসে না: E = 9 × 1/4 = 9/4. ২10 = 1024টি ফলাফল ধরে scratch-এ গুনেও ঠিক 9/4 এসেছে।

Linearity আর স্বাধীনতা গুলিয়ে ফেলবেন না: যোগের জন্য স্বাধীনতা লাগে না। গুণের (E[XY]) জন্য লাগে, যা §৭-এ। আর variance-এর যোগের জন্যও লাগে, যা পর্ব ৪১-এ আসবে। পরীক্ষায় “indicator-গুলো স্বাধীন নয়, তাই linearity খাটবে না” লেখা একটি পরিচিত ভুল।

৫ · Indicator-এর জাদু — fixed point আর record

এলোমেলো permutation-এ fixed point

বাজারঘরের অফিসে n জন কর্মী সকালে নিজের নামের ট্যাগ লাগানো একই রকম ব্যাগ জমা রাখেন। সন্ধ্যায় ট্যাগগুলো খুলে গেছে, আর ব্যাগগুলো এলোমেলোভাবে ফেরত দেওয়া হলো (সব n! বিন্যাস সমান সম্ভাব্য)। গড়ে কতজন নিজের ব্যাগ ফেরত পাবেন? গণিতের ভাষায়: এলোমেলো permutation π-তে fixed point (যেখানে π(i) = i) গড়ে কয়টি?

উপপাদ্য ৫.১ (fixed point-এর প্রত্যাশা)

n ≥ 1 হলে {1, …, n}-এর একটি uniform এলোমেলো permutation-এ fixed point-এর প্রত্যাশিত সংখ্যা ঠিক 1, n যা-ই হোক।

প্রমাণ:

  1. X = fixed point-এর সংখ্যা = I1 + … + In, যেখানে Ii = 1 যদি π(i) = i. — indicator-এ ভাঙা
  2. π(i) = i এমন permutation গুনুন: i-কে নিজের জায়গায় রেখে বাকি n − 1টি উপাদান যেকোনোভাবে, তাই (n − 1)!টি। — গুণের নিয়ম
  3. E[Ii] = P(π(i) = i) = (n − 1)!/n! = 1/n. — লেমা ৪.৩, Laplace
  4. E[X] = n · 1/n = 1. ∎ — উপপাদ্য ৪.১

Ii-গুলো স্বাধীন নয়: n − 1 জন নিজের ব্যাগ পেলে শেষজনও পাবেন। তবু উত্তর বের হলো, কারণ linearity-তে স্বাধীনতা লাগে না। উল্টো দিকে, X-এর পুরো pmf বের করা অনেক কঠিন; “একজনও নিজের ব্যাগ না পাওয়া” (derangement)-এর সম্ভাবনা পর্ব ৪৯ “Inclusion–exclusion আর derangement”-এ প্রমাণ হবে, আর সেটি দ্রুত 1/e ≈ 0.3679-এর দিকে যায়। নিচের stepper n = 3-এ সব ৬টি permutation ধরে indicator-গুলো গোনে।

1π = 123 → I = 1,1,1 → X = 32π = 132 → I = 1,0,0 → X = 13π = 213 → I = 0,0,1 → X = 14π = 231 → I = 0,0,0 → X = 05π = 312 → I = 0,0,0 → X = 06π = 321 → I = 0,1,0 → X = 17E[X] = 6/6 = 3 · 2/6 = 1
চলক (π লেখা হয়েছে π(1)π(2)π(3) রূপে)
π
X
X-এর মোট
I₁, I₂, I₃-এর মোট
  1. 123. Identity permutation: π(1) = 1, π(2) = 2, π(3) = 3, তাই তিনটি indicator-ই 1 আর X = 3.
  2. 132. শুধু π(1) = 1; 2 আর 3 জায়গা বদলেছে। X = 1, X-এর মোট এখন 4.
  3. 213. শুধু π(3) = 3. X = 1, মোট 5. I₃-এর মোট এখন 2.
  4. 231. 1 → 2, 2 → 3, 3 → 1: একটি চক্র, কেউ নিজের জায়গায় নেই। X = 0; এমন permutation-কে বলে derangement.
  5. 312. উল্টো দিকের চক্র, এটিও derangement. X = 0, মোট তখনো 5.
  6. 321. শুধু π(2) = 2. X = 1, X-এর মোট 6; প্রতিটি Ii-এর মোট 2.
  7. দুইভাবে গড়। সারি ধরে: E[X] = 6/6 = 1. কলাম ধরে: প্রতিটি E[Ii] = 2/6 = 1/3, যোগ 3 · 1/3 = 1. মান 2 কখনো আসে না: দুজন নিজের জায়গায় থাকলে তৃতীয়জনও থাকেন। pmf: P(0) = 2/6, P(1) = 3/6, P(3) = 1/6.

Record বা left-to-right maximum

বাজারঘর একজন ডেলিভারি ম্যানেজার নিয়োগ দেবে। n জন প্রার্থী এলোমেলো ক্রমে সাক্ষাৎকারে আসেন, আর নীতি হলো: যে প্রার্থী এ পর্যন্ত দেখা সবার চেয়ে ভালো, তাঁকে সঙ্গে সঙ্গে সাময়িক নিয়োগ দেওয়া (algorithm বইয়ে এটি “hiring problem” নামে পরিচিত)। গড়ে কতবার নিয়োগ হবে? সংখ্যার একটি সারিতে যে উপাদান তার আগের সবার চেয়ে বড়, তাকে বলে left-to-right maximum বা record.

উপপাদ্য ৫.২ (record-এর প্রত্যাশা)

n-টি আলাদা সংখ্যার uniform এলোমেলো বিন্যাসে record-এর প্রত্যাশিত সংখ্যা harmonic number Hn = 1 + 1/2 + … + 1/n.

প্রমাণ: Rk = 1 যদি k-তম অবস্থানের উপাদান প্রথম k-টির মধ্যে সবচেয়ে বড়। প্রথম k-টি উপাদান কোন সেট থেকে এল, তা যা-ই হোক, সেই k-টির সব k! ক্রম সমান সম্ভাব্য, তাই তাদের বৃহত্তমটি k-টি অবস্থানের যেকোনোটিতে থাকার সম্ভাবনা সমান: P(Rk = 1) = 1/k. Linearity অনুযায়ী E[record] = ∑k=1n 1/k = Hn. ∎ পর্ব ১৭-এ দেখেছেন Hn প্রায় ln n + 0.5772, তাই ১০০ জন প্রার্থীতে গড়ে মাত্র H100 ≈ 5.19 বার নিয়োগ। একই যুক্তি algorithm-এ দেখায়, একটি এলোমেলো array-তে “এ পর্যন্ত সর্বোচ্চ” চলকটি গড়ে মাত্র Hn বার আপডেট হয়।

এবার দুটি উপপাদ্যই brute force-এ মেলানো যাক: n ≤ 8-এ সব permutation ধরে নিখুঁত গড় (৮! = 40,320টি পর্যন্ত), আর n = 52-এ seed দেওয়া shuffle. Python-এর random.shuffle ভেতরে Fisher–Yates ব্যবহার করে, যা সব বিন্যাস সমান সম্ভাব্য করে (পর্ব ৩৬-এ প্রমাণ)।

import random
from fractions import Fraction
from itertools import permutations

def fixed(p):                      # number of i with p[i] == i
    return sum(1 for i, v in enumerate(p) if i == v)

def records(p):                    # left-to-right maxima
    r, best = 0, -1
    for v in p:
        if v > best:
            r, best = r + 1, v
    return r

def H(n):
    return sum(Fraction(1, k) for k in range(1, n + 1))

print(" n  E[fixed]  P(no fixed)  E[records]  = H_n?")
for n in range(1, 9):
    perms = list(permutations(range(n)))
    N = len(perms)
    ef = Fraction(sum(fixed(p) for p in perms), N)
    p0 = Fraction(sum(1 for p in perms if fixed(p) == 0), N)
    er = Fraction(sum(records(p) for p in perms), N)
    print(f"{n:2d}  {str(ef):>7}  {float(p0):10.4f}  {str(er):>10}  {er == H(n)}")

random.seed(40)
n, trials = 52, 10000
a = list(range(n))
total = 0
for _ in range(trials):
    random.shuffle(a)
    total += fixed(a)
print(f"n = 52, simulated E[fixed]: {total / trials:.4f}")

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

 n  E[fixed]  P(no fixed)  E[records]  = H_n?
 1        1      0.0000           1  True
 2        1      0.5000         3/2  True
 3        1      0.3333        11/6  True
 4        1      0.3750       25/12  True
 5        1      0.3667      137/60  True
 6        1      0.3681       49/20  True
 7        1      0.3679     363/140  True
 8        1      0.3679     761/280  True
n = 52, simulated E[fixed]: 1.0100

দ্বিতীয় কলামে প্রতিটি n-এ নিখুঁত গড় ঠিক 1, উপপাদ্য ৫.১ অনুযায়ী। তৃতীয় কলাম (কেউ নিজের ব্যাগ পান না) দোলে আর দ্রুত 0.3679 ≈ 1/e-তে থিতু হয়, যার প্রমাণ পর্ব ৪৯-এ। চতুর্থ কলামে record-এর নিখুঁত গড় 11/6, 25/12, …, আর শেষ কলাম দেখায় প্রতিটি n-এ তা ঠিক Hn-এর সমান। শেষ লাইনে ৫২টি কার্ডের ১০,০০০টি shuffle-এ গড় 1.0100; n বড় হলেও উত্তর 1-এর কাছেই। brute force এখানেই থামে: n = 12-তে permutation প্রায় ৪৮ কোটি, তখন শুধু প্রমাণ আর simulation ভরসা।

৬ · Coupon collector — সবগুলো পেতে কত সময়

বাজারঘর একটি প্রচারণায় প্রতিটি অর্ডারের সঙ্গে n রকম নকশার একটি স্টিকার দেয়, প্রতিবার n রকমের যেকোনোটি সমান সম্ভাবনায়, আগের অর্ডার থেকে স্বাধীনভাবে। একজন গ্রাহক সব n রকম সংগ্রহ করতে চান। গড়ে কয়টি অর্ডার লাগবে? এটি বিখ্যাত coupon collector problem. একই প্রশ্ন কম্পিউটার বিজ্ঞানে বারবার আসে: এলোমেলো test input দিয়ে n-টি শাখার সবকটি ছুঁতে কত input লাগে, বা এলোমেলো hash-এ n-টি bucket-এর প্রতিটিতে অন্তত একটি key পড়তে কয়টি key লাগে।

উপপাদ্য ৬.১ (coupon collector)

প্রতিটি অর্ডারে n রকমের একটি uniform এলোমেলো আর স্বাধীন নকশা এলে, সব n রকম পেতে প্রয়োজনীয় অর্ডারের সংখ্যা T-এর প্রত্যাশা

E[T] = n/n + n/(n − 1) + … + n/1 = n · Hn ≈ n ln n

প্রমাণ:

  1. সংগ্রহকে n-টি ধাপে ভাগ করুন। ধাপ i (i = 1, …, n) শুরু হয় যখন ঠিক i − 1 রকম নকশা হাতে আছে, আর শেষ হয় যখন i-তম নতুন নকশা আসে। Ti = ধাপ i-তে অর্ডারের সংখ্যা, তাহলে T = T1 + … + Tn. — ভাগ করা
  2. ধাপ i-তে প্রতিটি অর্ডার নতুন নকশা দেয় যদি তা বাকি n − i + 1 রকমের একটি হয়: সম্ভাবনা pi = (n − i + 1)/n, প্রতিবার স্বাধীনভাবে। — uniform আর স্বাধীন অর্ডার
  3. তাই Ti হলো প্রথম সাফল্য পর্যন্ত চেষ্টার সংখ্যা: Ti ~ Geometric(pi), আর উপপাদ্য ৩.২ অনুযায়ী E[Ti] = 1/pi = n/(n − i + 1). — geometric বণ্টন
  4. Linearity: E[T] = ∑i=1n n/(n − i + 1). j = n − i + 1 বসালে j চলে n থেকে 1, তাই E[T] = n ∑j=1n 1/j = n Hn. ∎ — উপপাদ্য ৪.১, index shift

এখানে Ti-গুলো আসলে স্বাধীনও, তবে প্রমাণে তা লাগেনি; প্রত্যাশার জন্য linearity-ই যথেষ্ট। প্রমাণের ভেতরের গল্পটি শিক্ষণীয়: প্রথম কয়েকটি নকশা খুব দ্রুত আসে, কিন্তু শেষ নকশাটির জন্য গড়ে পুরো n-টি অর্ডার অপেক্ষা করতে হয়, আর শেষের আগেরটির জন্য n/2. মোট সময়ের বড় অংশ যায় শেষ কয়েকটি নকশায়। নিচের stepper n = 4-এ ধাপগুলো দেখায়।

1ধাপ 1: নতুন 4/4 → গড় 12ধাপ 2: নতুন 3/4 → গড় 4/33ধাপ 3: নতুন 2/4 → গড় 24ধাপ 4: নতুন 1/4 → গড় 45মোট 25/3 = 4 · H₄ ≈ 8.33
চলক (নকশা A, B, C, D)
হাতে আছে
নতুন পাওয়ার সম্ভাবনা
এই ধাপের গড়
মোট গড়
  1. ধাপ ১. হাতে কিছু নেই, তাই প্রথম অর্ডারের স্টিকার নিশ্চিতভাবে নতুন: p = 4/4, গড় অপেক্ষা 1. ধরুন এল A.
  2. ধাপ ২. A ছাড়া বাকি ৩টির যেকোনো একটি এলেই নতুন: p = 3/4, Geometric(3/4)-এর গড় 4/3. মোট এখন 1 + 4/3 = 7/3.
  3. ধাপ ৩. হাতে A, B; নতুন আসে সম্ভাবনা 2/4 = 1/2, গড় অপেক্ষা 2. মোট 7/3 + 2 = 13/3.
  4. ধাপ ৪. শুধু D বাকি: সম্ভাবনা 1/4, গড় অপেক্ষা 4, একাই মোট সময়ের প্রায় অর্ধেক। মোট 13/3 + 4 = 25/3.
  5. ফল। E[T] = 1 + 4/3 + 2 + 4 = 25/3 ≈ 8.33 = 4 · (1 + 1/2 + 1/3 + 1/4) = 4 · 25/12 ✓. অর্থাৎ ৪ রকম নকশার জন্য গড়ে ৮টির বেশি অর্ডার।

এবার simulation: n = 4, 10, 50 আর 64 (বাংলাদেশের ৬৪ জেলার নামে ৬৪ রকম স্টিকার ধরুন), প্রতিটিতে ২,০০০ জন কাল্পনিক গ্রাহক।

import random
from fractions import Fraction

def H(n):
    return sum(Fraction(1, k) for k in range(1, n + 1))

def collect(n):                    # orders until all n sticker designs seen
    seen, orders = set(), 0
    while len(seen) < n:
        seen.add(random.randrange(n))
        orders += 1
    return orders

stages = [Fraction(4, 4 - i) for i in range(4)]
print("n = 4 stage waits:", [str(s) for s in stages], " sum =", sum(stages))

random.seed(40)
print("  n   n*H_n exact   simulated mean   min   max")
for n in (4, 10, 50, 64):
    runs = [collect(n) for _ in range(2000)]
    mean = sum(runs) / len(runs)
    print(f"{n:3d}   {float(n * H(n)):10.2f}   {mean:14.2f}   {min(runs):3d}   {max(runs):3d}")

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

n = 4 stage waits: ['1', '4/3', '2', '4']  sum = 25/3
  n   n*H_n exact   simulated mean   min   max
  4         8.33             8.23     4    36
 10        29.29            29.17    10    82
 50       224.96           225.95   100   583
 64       303.61           307.65   147   826

প্রথম লাইন stepper-এর চারটি ধাপ আর তাদের নিখুঁত যোগ 25/3. টেবিলে প্রতিটি n-এ simulation-এর গড় n · Hn-এর কাছে, ১%-এর মধ্যে; ৬৪ জেলার পুরো সেট পেতে গড়ে প্রায় ৩০৪টি অর্ডার, যদিও নকশা মাত্র ৬৪টি। min আর max কলাম আরেকটি গল্প বলে: n = 4-এ কেউ ঠিক ৪টি অর্ডারেই সব পেয়েছেন, কেউ ৩৬টি লেগেছে। প্রত্যাশা শুধু গড় বলে, ছড়ানো কতটা তা বলে না; সেই হিসাব (variance আর concentration) পর্ব ৪১-এ।

৭ · Randomized quicksort আর E[XY]-এর নিয়ম

Quicksort-এ তুলনার প্রত্যাশিত সংখ্যা

Randomized quicksort প্রতিটি ধাপে বর্তমান অংশ থেকে uniform এলোমেলোভাবে একটি pivot বাছে, বাকি প্রতিটি উপাদানকে pivot-এর সঙ্গে তুলনা করে ছোট আর বড় দুই দলে ভাগ করে, তারপর দুই দলে একই কাজ করে। কোড আর পূর্ণ আলোচনা DSA কোর্সের পর্ব ২২ আর পর্ব ৬১-এ আছে; এখানে শুধু গণিতের কাঠামোটি, যা পুরোপুরি indicator আর linearity.

উপপাদ্য ৭.১ (randomized quicksort)

n-টি আলাদা key-এর যেকোনো ইনপুটে randomized quicksort-এর তুলনার প্রত্যাশিত সংখ্যা

E[C] = ∑1≤i<j≤n 2/(j − i + 1) = 2(n + 1)Hn − 4n < 2n Hn

অর্থাৎ প্রায় 2n ln n ≈ 1.39 n log2 n.

প্রমাণের রূপরেখা: সাজানো ক্রমে key-গুলো z1 < z2 < … < zn.

  1. দুটি key কেবল তখনই তুলনা হয়, যখন একটি pivot; তুলনার পর pivot আর কোনো দলে থাকে না, তাই প্রতিটি জোড়া সর্বোচ্চ একবার তুলনা হয়। ফলে C = ∑i<j Xij, যেখানে Xij হলো “zi আর zj তুলনা হলো”-এর indicator. — indicator-এ ভাঙা
  2. Zij = {zi, …, zj}, মোট j − i + 1টি key. এই সেট থেকে কোনো pivot না বাছা পর্যন্ত সবগুলো একই দলে থাকে। প্রথম যে pivot এই সেট থেকে আসে, সেটি zi বা zj হলে দুজনের তুলনা হয়; মাঝের কেউ হলে দুজন আলাদা দলে চলে যায়, আর কখনো তুলনা হয় না। — ক্ষেত্রভাগ
  3. প্রতিটি pivot বর্তমান অংশে uniform, আর বর্তমান অংশে পুরো Zij আছে; তাই Zij থেকে প্রথম বাছা key সেটের j − i + 1টির যেকোনোটি সমান সম্ভাবনায়। P(Xij = 1) = 2/(j − i + 1). — প্রতিসাম্য
  4. Linearity: E[C] = ∑i<j 2/(j − i + 1). d = j − i ধরে সাজালে প্রতিটি d-এর n − d জোড়া, আর বীজগণিতে যোগফলটি 2(n + 1)Hn − 4n হয় (scratch-এ n ≤ 30-এ Fraction-এ মেলানো)। প্রতিটি i-এর ভেতরের যোগ 2(1/2 + … + 1/n) < 2Hn, তাই E[C] < 2nHn. ∎

প্রত্যাশা এখানে অ্যালগরিদমের নিজের মুদ্রার ওপর, ইনপুটের ওপর নয়: সাজানো, উল্টো বা যেকোনো শত্রুতাপূর্ণ ইনপুটেই একই গড়। ধাপ ৩-এর প্রতিসাম্য যুক্তিটি নিচের ব্লকে n = 7-এ সব জোড়ার জন্য নিখুঁতভাবে হিসাব করে যাচাই করা হয়েছে, তারপর বড় n-এ simulation.

import random
from fractions import Fraction as Fr
from math import log

def H(n):
    return sum(Fr(1, k) for k in range(1, n + 1))

def p_compared(i, j, lo, hi):      # exact, ranks lo..hi still together
    total = Fr(0)
    for piv in range(lo, hi + 1):
        if piv in (i, j):
            total += 1
        elif piv < i:
            total += p_compared(i, j, piv + 1, hi)
        elif piv > j:
            total += p_compared(i, j, lo, piv - 1)
    return total / (hi - lo + 1)   # pivot strictly between: never compared

print("P(z_i, z_j compared) = 2/(j-i+1) for n = 7:",
      all(p_compared(i, j, 1, 7) == Fr(2, j - i + 1)
          for i in range(1, 8) for j in range(i + 1, 8)))

def compares(a):                   # randomized quicksort, distinct keys
    if len(a) <= 1:
        return 0
    pivot = random.choice(a)
    return (len(a) - 1 + compares([x for x in a if x < pivot])
            + compares([x for x in a if x > pivot]))

random.seed(40)
print("    n   exact E   simulated   2n ln n")
for n, runs in ((10, 2000), (100, 500), (1000, 100)):
    exact = float(2 * (n + 1) * H(n) - 4 * n)
    sim = sum(compares(list(range(n))) for _ in range(runs)) / runs
    print(f"{n:5d}  {exact:8.1f}  {sim:9.1f}  {2 * n * log(n):8.1f}")

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

P(z_i, z_j compared) = 2/(j-i+1) for n = 7: True
    n   exact E   simulated   2n ln n
   10      24.4       24.5      46.1
  100     647.9      646.3     921.0
 1000   10985.9    11014.4   13815.5

প্রথম লাইনে p_compared pivot-এর প্রতিটি সম্ভাব্য পছন্দ ধরে নিখুঁত সম্ভাবনা হিসাব করেছে (মাঝের pivot হলে 0, বাইরের হলে ছোট অংশে আবার), আর ২১টি জোড়ার সবকটিতে ফল 2/(j − i + 1). টেবিলে simulation আর নিখুঁত সূত্র কাছাকাছি, যেমন n = 100-এ 646.3 বনাম 647.9. শেষ কলাম দেখায় 2n ln n এখানে বেশ বড়: সূত্রে লুকানো একটি −2.85n-এর মতো পদ আছে (2γ − 4 ≈ −2.85, যেখানে γ ≈ 0.5772), যা ছোট n-এ গুরুত্বপূর্ণ। “≈ 2n ln n” শুধু বৃদ্ধির হার বলে, নিখুঁত মান নয়।

গুণের নিয়ম: E[XY] কখন E[X]E[Y]

দুটি random variable X, Y-কে independent (স্বাধীন) বলে, যদি সব x, y-এর জন্য P(X = x, Y = y) = P(X = x) P(Y = y). (Event-এর স্বাধীনতার পূর্ণ আলোচনা পর্ব ৩৯ “শর্তসাপেক্ষ সম্ভাবনা, independence আর Bayes-এর উপপাদ্য”-এ।)

উপপাদ্য ৭.২ (স্বাধীন চলকের গুণফল)

X আর Y স্বাধীন আর দুটিরই প্রত্যাশা থাকলে E[XY] = E[X] · E[Y].

প্রমাণ:

  1. Ω-কে (X, Y)-এর মানজোড়া ধরে দলে ভাগ করলে E[XY] = ∑x, y xy · P(X = x, Y = y); সংজ্ঞা ৩.১-এর মতো একই দলভাগ যুক্তি। — দলে ভাগ
  2. স্বাধীনতায় = ∑x ∑y x P(X = x) · y P(Y = y). — স্বাধীনতার সংজ্ঞা
  3. ভেতরের যোগে x P(X = x) ধ্রুবক, তাই = ∑x x P(X = x) · (∑y y P(Y = y)) = E[X] · E[Y]. Absolute convergence-এর জন্য একই হিসাব |x||y| দিয়ে করলে সসীম ফল আসে, তাই সাজানো বৈধ। ∎ — যোগফলের গুণনীয়ক বের করা

স্বাধীনতা ছাড়া এটি ভাঙে। একটি মুদ্রা ছুড়ে X = Y = head-এর indicator নিন। তখন XY = X² = X, তাই E[XY] = 1/2, অথচ E[X]E[Y] = 1/4. উল্টোটাও সত্য নয়: E[XY] = E[X]E[Y] হলেই চলক স্বাধীন হয় না। X যদি {−1, 0, 1}-এ uniform আর Y = X², তাহলে E[XY] = E[X³] = 0 = E[X] · E[Y], কিন্তু P(X = 0, Y = 0) = 1/3, যেখানে P(X = 0)P(Y = 0) = 1/9. Y পুরোপুরি X দিয়ে ঠিক হয়, তবু গুণের নিয়ম খেটে গেছে। এই ধরনের জোড়াকে বলে uncorrelated কিন্তু dependent; এর পরিমাপ covariance পর্ব ৪১-এর বিষয়।

৮ · পরীক্ষার অঙ্ক আর প্রত্যাশার একটি ভুল যুক্তি

বিশ্ববিদ্যালয়, চাকরি বা ইন্টারভিউর লিখিত পরীক্ষায় এই পর্বের ধাঁচে যে অঙ্ক আসে, তার কয়েকটি পূর্ণ সমাধান। প্রতিটি সংখ্যা scratch-এ Python-এ Fraction দিয়ে মেলানো।

অঙ্ক ১: লটে ত্রুটিপূর্ণ পণ্য (binomial)

একটি কারখানার প্রতিটি পণ্য স্বাধীনভাবে 1/10 সম্ভাবনায় ত্রুটিপূর্ণ। বাজারঘর ১২টির একটি বাক্স পায়। (ক) প্রত্যাশিত ত্রুটিপূর্ণ সংখ্যা, (খ) একটিও ত্রুটিপূর্ণ না থাকার সম্ভাবনা, (গ) সর্বোচ্চ একটি ত্রুটিপূর্ণ থাকার সম্ভাবনা কত?

  1. X ~ Bin(12, 1/10), তাই E[X] = 12 × 1/10 = 1.2.
  2. P(X = 0) = (9/10)12 ≈ 0.2824.
  3. P(X ≤ 1) = (9/10)12 + 12 × (1/10) × (9/10)11 ≈ 0.2824 + 0.3766 = 0.6590.

অঙ্ক ২: ফেরত না রেখে তোলা (স্বাধীনতা ছাড়া linearity)

২০টি পণ্যের একটি লটে ৪টি ত্রুটিপূর্ণ। মান-পরীক্ষক এলোমেলোভাবে, ফেরত না রেখে, ৫টি তোলেন। নমুনায় ত্রুটিপূর্ণের প্রত্যাশিত সংখ্যা কত?

  1. Ik = “k-তম তোলা পণ্যটি ত্রুটিপূর্ণ”, k = 1, …, 5. প্রতিসাম্যে প্রতিটি তোলা আলাদাভাবে দেখলে ২০টির যেকোনোটি সমান সম্ভাবনায়, তাই P(Ik = 1) = 4/20 = 1/5.
  2. Ik-গুলো স্বাধীন নয় (প্রথমটি ত্রুটিপূর্ণ হলে দ্বিতীয়টির সম্ভাবনা 3/19), কিন্তু linearity-তে লাগে না: E[X] = 5 × 1/5 = 1.
  3. যাচাই: hypergeometric pmf C(4, k)C(16, 5 − k)/C(20, 5) ধরে ∑ k · P(X = k) হিসাব করলেও ঠিক 1. আর P(X = 0) = C(16, 5)/C(20, 5) = 4368/15504 ≈ 0.2817.

অঙ্ক ৩: দুটি ছক্কা

দুটি ছক্কা ছুড়লে (ক) যোগফলের প্রত্যাশা, (খ) বড়টির (M) pmf আর প্রত্যাশা কত?

  1. (ক) Linearity: E[S] = 7/2 + 7/2 = 7. ৩৬টি ঘর গোনার দরকারই নেই।
  2. (খ) M ≤ k মানে দুটি ছক্কাই ≤ k: P(M ≤ k) = k²/36, তাই P(M = k) = (k² − (k − 1)²)/36 = (2k − 1)/36, k = 1, …, 6.
  3. E[M] = ∑ k(2k − 1)/36 = (1 + 6 + 15 + 28 + 45 + 66)/36 = 161/36 ≈ 4.47.

যুক্তির ভুল ধরুন: “গড় সময় জানলে গড় গতিও জানা”

একজন লিখলেন: “X ~ Geometric(1/2) হলো একটি কাজ শেষ হতে কয়টি চেষ্টা লাগে। E[X] = 2. প্রতি চেষ্টায় কাজের হার 1/X, তাই প্রত্যাশিত হার E[1/X] = 1/E[X] = 1/2. ∎” পড়ে ভুলটি নিজে খুঁজুন।

ভুল কোথায়: linearity শুধু রৈখিক ফাংশনের (aX + b) জন্য; 1/X রৈখিক নয়, তাই E[1/X] = 1/E[X] কোনো উপপাদ্য নয়। সংজ্ঞা ধরে হিসাব: E[1/X] = ∑k≥1 (1/k)(1/2)k = ln 2 ≈ 0.6931, যা 0.5 নয় (ধারাটি ln(1/(1 − x))-এর বিস্তার, x = 1/2; scratch-এ ৬০টি পদে মেলানো)। একই ধরনের ভুল E[X²] = (E[X])²: ছক্কায় E[X²] = 91/6 ≈ 15.17, অথচ (7/2)² = 12.25. পার্থক্যটিই পর্ব ৪১-এর variance. সাধারণ নিয়ম: অরৈখিক ফাংশন g-এর জন্য E[g(X)] = ∑ g(x) P(X = x) সংজ্ঞা থেকে হিসাব করুন; g(E[X]) বসিয়ে দেবেন না।

আরও গভীরে: Coupon collector-এর সময় শুধু গড়ে n ln n নয়, খুব ঘনভাবে তার আশপাশে থাকে: Erdős আর Rényi ১৯৬১ সালের একটি প্রবন্ধে দেখান যে T ≤ n ln n + cn-এর সম্ভাবনা n বড় হলে e−e−c-এর দিকে যায় (একটি Gumbel বণ্টন)। Linearity আর “E[X] ≥ μ হলে কোনো ফলাফলে X ≥ μ” এই সরল পর্যবেক্ষণ মিলে probabilistic method-এর ভিত্তি, যা পর্ব ৪৩ “Probabilistic method আর randomized algorithm”-এ আসবে। আর যে অসীম sample space-এ সম্ভাবনা ফলাফলের ওপর নয়, event-এর ওপর বসাতে হয় (যেমন [0, 1]-এ এলোমেলো বাস্তব সংখ্যা), সেখানে প্রত্যাশা হয় integral, যার ভিত্তি Kolmogorov-এর ১৯৩৩ সালের measure-তাত্ত্বিক কাঠামো; linearity সেখানেও একই রূপে সত্য।

পরীক্ষা ও ইন্টারভিউতে: বিশ্ববিদ্যালয়, চাকরি বা ইন্টারভিউর পরীক্ষায় এই ধরনের প্রশ্ন প্রায়ই আসে:

  • একটি ছক্কায় প্রথম ছয় আসতে গড়ে কতবার ছুড়তে হয়? Geometric(1/6), তাই 6.
  • n জনের টুপি এলোমেলোভাবে ফেরত দিলে গড়ে কতজন নিজের টুপি পান? 1, n যা-ই হোক।
  • ৬ রকম স্টিকার সব পেতে গড়ে কয়টি প্যাকেট? 6 · H6 = 6 · 49/20 = 14.7.
  • ১০০টি অর্ডারের প্রতিটি 0.02 সম্ভাবনায় জাল হলে গড়ে কয়টি জাল? 2, নির্ভরশীলতা থাকলেও।
  • E[XY] = E[X]E[Y] কি সবসময় সত্য? না, স্বাধীন হলে নিশ্চিত; X = Y = মুদ্রার indicator একটি counterexample.

৯ · AI-এর যুগে — প্রত্যাশার হিসাব আর প্রমাণ যাচাই

প্রত্যাশার প্রশ্নে AI সহকারী প্রায়ই সুন্দর একটি সূত্র লিখে দেয়, কিন্তু ভুল লুকিয়ে থাকে শর্তে, রূপে বা একটি অসতর্ক “তাই”-তে। এই পর্বের বিষয়ে কয়েকটি ভুল নিয়মিত দেখা যায়:

AI-এর ভুলকীভাবে ধরবেন
“Indicator-গুলো স্বাধীন নয়, তাই linearity খাটে না” বা উল্টো, স্বাধীনতা ছাড়াই E[XY] = E[X]E[Y]উপপাদ্যের শর্ত আলাদা করে চান; X = Y = মুদ্রার indicator দিয়ে পরীক্ষা করুন
Geometric-এর দুই রূপ গুলিয়ে off-by-one: 1/p-এর জায়গায় (1 − p)/pp = 1 বসান: প্রথম চেষ্টাতেই সাফল্য, উত্তর 1 আসা উচিত
E[1/X] = 1/E[X], E[X²] = E[X]², E[max] = max(E) জাতীয় অরৈখিক “সরলীকরণ”ছক্কা বা ছোট pmf-এ Fraction দিয়ে দুই দিক হিসাব করুন
Coupon collector-এ n² বা n ln n-কে নিখুঁত উত্তর বলা, বা quicksort-এ ln আর log2 গুলানোn = 4-এ ধাপ ধরে 25/3 মেলান; সূত্রের ধ্রুবক আলাদা করে চান
অসীম যোগফলের অভিসারিতা না দেখে প্রত্যাশা লেখা∑ |x| P(X = x) সসীম কি না জিজ্ঞেস করুন; St Petersburg মনে রাখুন
বানানো ইতিহাস বা উৎস (কে কবে প্রথম প্রমাণ করেছেন)সাল আর নাম বিশ্বস্ত গণিত-ইতিহাসের বইয়ে মেলান

AI-এর কাছে প্রত্যাশার একটি প্রশ্ন চাইলে এমন কাঠামো দিন, যাতে প্রতিটি ধাপ আলাদা করে পরীক্ষা করা যায়:

নিচের প্রশ্নের প্রত্যাশিত মান বের করো আর প্রমাণ দাও: প্রশ্ন: [যেমন n রকম স্টিকারের সব পেতে গড়ে কয়টি অর্ডার লাগে] ১. sample space আর random variable-টি স্পষ্ট লেখো (কোন ফলাফলে কোন মান)। ২. random variable-কে indicator বা ছোট চলকের যোগফলে ভাঙো, আর প্রতিটির সম্ভাবনা বা প্রত্যাশা আলাদা করে দেখাও। ৩. কোথায় linearity আর কোথায় স্বাধীনতা ব্যবহার করলে, তা প্রতিটি ধাপের পাশে লেখো। ৪. geometric বা অন্য কোনো বণ্টনের কোন রূপ (চেষ্টা গোনা না ব্যর্থতা গোনা) নিচ্ছ, বলো। ৫. n = 1, 2, 3, 4-এ উত্তরটি সব ফলাফল তালিকা করে মেলাও। ৬. শেষে fractions.Fraction দিয়ে নিখুঁত হিসাব আর random.seed দেওয়া একটি ছোট simulation-এর Python কোড দাও।

AI-এর উত্তর হাতে পেলে — যাচাইয়ের চেকলিস্ট

প্রত্যাশার দাবি পরীক্ষার সবচেয়ে সস্তা উপায় দুটি একসঙ্গে: ছোট ক্ষেত্রে নিখুঁত গণনা আর বড় ক্ষেত্রে seed দেওয়া simulation. দুটি মিললে আত্মবিশ্বাস বাড়ে; না মিললে প্রমাণের যে ধাপে স্বাধীনতা বা রৈখিকতা ধরে নেওয়া হয়েছে, সেখানেই প্রথমে খুঁজুন।

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

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।

প্র ০১“প্রত্যাশা” ধারণাটি কোথা থেকে এল? Pascal, Fermat আর Huygens-এর কাজে এর শুরু কীভাবে, আর আজকের সংজ্ঞার সঙ্গে তার সম্পর্ক কী?

প্রচলিত ইতিহাস অনুযায়ী ১৬৫৪ সালে Blaise Pascal আর Pierre de Fermat চিঠিতে একটি পুরোনো প্রশ্ন নিয়ে আলোচনা করেন, যার নাম “problem of points”: দুজনের একটি প্রতিযোগিতা মাঝপথে থেমে গেলে জমা পুরস্কার কীভাবে ন্যায্যভাবে ভাগ হবে, যদি জানা থাকে কে কত পয়েন্ট এগিয়ে ছিলেন? দুজনেই মূলত একই উত্তরে পৌঁছান: বাকি খেলার সব সম্ভাব্য ধারা গুনে প্রত্যেকের জেতার সম্ভাবনা বের করুন, আর সেই অনুপাতে ভাগ করুন। Fermat সব সম্ভাব্য ফলাফল তালিকা করেছিলেন (আজকের ভাষায় sample space), Pascal পিছন থেকে recursion-এর মতো করে প্রতিটি অবস্থার “ন্যায্য মূল্য” বের করেছিলেন।

Christiaan Huygens ১৬৫৭ সালে এই ভাবনাগুলো একটি ছোট বইয়ে গুছিয়ে প্রকাশ করেন (De ratiociniis in ludo aleae), যাকে সম্ভাবনার প্রথম ছাপা পাঠ্যবইগুলোর একটি ধরা হয়। তাঁর কেন্দ্রীয় ধারণা ছিল একটি অনিশ্চিত অবস্থার “মূল্য”, যা ল্যাটিন অনুবাদে expectatio নামে পরিচিত হয়, আর সেখান থেকেই ইংরেজি “expectation”. মজার ব্যাপার হলো, Huygens প্রত্যাশাকে সংজ্ঞায়িত করেছিলেন একটি ন্যায্য বিনিময়ের মূল্য হিসেবে, আর তা থেকে সম্ভাবনার নিয়ম বের করেছিলেন; আজকের পাঠ্যবই উল্টো দিক থেকে যায়: আগে সম্ভাবনা, তারপর ভারযুক্ত গড়।

আধুনিক কাঠামো আসে অনেক পরে। Andrey Kolmogorov ১৯৩৩ সালে সম্ভাবনাকে axiom-এর ওপর দাঁড় করান, যেখানে random variable একটি measurable ফাংশন আর প্রত্যাশা একটি integral. বিচ্ছিন্ন ক্ষেত্রে সেই integral ঠিক এই পর্বের ∑ X(ω)P(ω). এভাবে Pascal-Fermat-এর গণনা, Huygens-এর ন্যায্য মূল্য আর আধুনিক সংজ্ঞা একই ধারণার তিনটি স্তর। ইতিহাসের বিবরণ (কে কোন চিঠিতে ঠিক কী লিখেছিলেন) নিয়ে বইভেদে কিছু পার্থক্য আছে, তাই সূক্ষ্ম দাবির জন্য গণিত-ইতিহাসের নির্ভরযোগ্য বই দেখে নিন।

মূল উপলব্ধি: প্রত্যাশা জন্ম নিয়েছিল একটি ন্যায্য ভাগের প্রশ্ন থেকে, আর তার মূল হাতিয়ার ছিল গণনা; আজও বিচ্ছিন্ন ক্ষেত্রে প্রত্যাশা মানে সব ফলাফলের ওপর একটি ভারযুক্ত যোগফল।

প্র ০২St Petersburg paradox কে তুলেছিলেন, Daniel Bernoulli কী সমাধান দেন, আর একজন প্রোগ্রামারের কাছে “অসীম প্রত্যাশা”-র শিক্ষা কী?

সাধারণত বলা হয়, Nicolaus Bernoulli ১৭১৩ সালে Pierre Rémond de Montmort-কে লেখা চিঠিতে প্রশ্নটি তোলেন, আর তাঁর চাচাতো ভাই Daniel Bernoulli ১৭৩৮ সালে সেন্ট পিটার্সবার্গের বিজ্ঞান একাডেমির পত্রিকায় একটি সমাধান প্রকাশ করেন, যেখান থেকে নামটি এসেছে। প্রশ্নটি §৩-এর চিন্তা-পরীক্ষা: প্রথম head k-তম ছোড়ায় এলে 2k পয়েন্ট। প্রত্যাশা অসীম, অথচ কোনো বিবেচক মানুষ এই খেলায় অংশ নিতে বড় কিছু দিতে রাজি হন না। প্রত্যাশা যদি “ন্যায্য মূল্য” হয়, তাহলে এই বৈপরীত্য কেন?

Daniel Bernoulli-র উত্তর ছিল: মানুষ পুরস্কারের পরিমাণ নয়, তার উপযোগ (utility) বিবেচনা করেন, আর উপযোগ সম্পদের সঙ্গে ধীরে বাড়ে; তিনি লগারিদমিক উপযোগ প্রস্তাব করেন। log 2k = k log 2, আর ∑ k log 2 · 2−k সসীম। এই ধারণা পরে অর্থনীতির expected utility তত্ত্বের ভিত্তি হয়। আরেকটি সমান শক্তিশালী উত্তর আছে, যা §৩-এ দেখেছেন: কোনো বাস্তব ভাণ্ডার অসীম নয়। সর্বোচ্চ 220 পয়েন্টে সীমা দিলে প্রত্যাশা মাত্র 21; সীমা দ্বিগুণ করলে প্রত্যাশা বাড়ে মাত্র 1. অর্থাৎ অসীম প্রত্যাশা আসে অত্যন্ত বিরল কিন্তু বিশাল ফলাফল থেকে, যা বাস্তবে প্রায় কখনো ঘটে না।

প্রোগ্রামারের জন্য শিক্ষাটি সরাসরি। কিছু অ্যালগরিদম বা সিস্টেমের সময়ের বণ্টনে “ভারী লেজ” থাকে: বেশিরভাগ সময় দ্রুত, কিন্তু খুব কম ক্ষেত্রে বিশাল দেরি। এমন ক্ষেত্রে গড় খুব বড় বা অসংজ্ঞায়িত হতে পারে, আর simulation-এর গড় স্থির হয় না; প্রতিবার নতুন একটি বিরল ঘটনা এসে গড় বদলে দেয়। তখন গড়ের বদলে median, percentile বা সর্বোচ্চ সীমা দেখা বেশি অর্থবহ, আর সময়সীমা (timeout) দিয়ে লেজটি কেটে দেওয়া হয়। Las Vegas অ্যালগরিদমের restart কৌশলও এই ভাবনা থেকে আসে।

মূল উপলব্ধি: প্রত্যাশা একটি অসীম যোগফল, যা অভিসারী না-ও হতে পারে; গড়ের ওপর ভরসা করার আগে লেজটি কত ভারী, তা দেখে নিন।

প্র ০৩“কেউ নিজের জিনিস পায় না” প্রশ্নটি প্রথম কোথায় আসে, আর fixed point-এর প্রত্যাশা n-এর ওপর নির্ভর না করাটা কেন এত চমকপ্রদ?

প্রশ্নটির পুরোনো ফরাসি নাম problème des rencontres (মিলনের সমস্যা)। Pierre Rémond de Montmort ১৭০৮ সালে তাঁর সম্ভাবনার বইয়ে একটি তাসের খেলার প্রসঙ্গে এটি বিশ্লেষণ করেন: ১৩টি তাস ১ থেকে ১৩ নম্বর ধরে গুনে যাওয়া, আর কোনো তাস তার নিজের নম্বরের সময় উঠল কি না। পরে Nicolaus Bernoulli আর Euler-ও এ নিয়ে কাজ করেন, আর এখান থেকেই derangement-এর সংখ্যা আর 1/e-এর সঙ্গে সম্পর্ক বের হয়। ইতিহাসের খুঁটিনাটি বইভেদে কিছুটা ভিন্নভাবে লেখা হয়।

চমকটি দুই স্তরে। প্রথমত, উত্তর 1 সব n-এ একই: ৩ জনের ব্যাগ হোক বা ৩০ লাখ মানুষের। বেশি মানুষ মানে প্রত্যেকের নিজের ব্যাগ পাওয়ার সম্ভাবনা কমে (1/n), কিন্তু সুযোগ পাওয়া মানুষ বাড়ে (n জন), আর দুটি ঠিক কাটাকাটি করে। দ্বিতীয়ত, প্রমাণটি সম্পূর্ণ X-এর বণ্টন এড়িয়ে যায়। Montmort-এর যুগে পুরো বণ্টন বের করতে inclusion–exclusion-এর মতো জটিল গণনা লাগত; linearity দিয়ে প্রত্যাশা এক লাইনে আসে, কারণ নির্ভরশীলতা (একজন ভুল ব্যাগ পেলে অন্যের সম্ভাবনা বদলায়) প্রত্যাশার যোগে কোনো প্রভাব ফেলে না।

এই উদাহরণ কম্পিউটার বিজ্ঞানে বহু রূপে ফেরে। একটি এলোমেলো permutation-এ গড়ে কয়টি চক্র? (Hn, আরেকটি indicator যুক্তি।) কয়টি inversion? (n(n − 1)/4, যা insertion sort-এর গড় কাজ; অনুশীলনে প্রমাণ।) একটি এলোমেলো shuffle সত্যিই ঠিক কি না পরীক্ষার একটি সহজ উপায় হলো fixed point-এর গড় 1 আসে কি না দেখা; ভুল shuffle অ্যালগরিদম (যেমন প্রতিটি অবস্থানে পুরো অ্যারে থেকে এলোমেলো জায়গা বদল) প্রায়ই এই ধরনের পরিসংখ্যানে ধরা পড়ে।

মূল উপলব্ধি: জটিল নির্ভরশীলতার মধ্যে প্রত্যাশা খুঁজতে গোটা বণ্টন লাগে না; ছোট ছোট event-এর সম্ভাবনা যোগ করলেই চলে, আর উত্তর প্রায়ই আশ্চর্য রকম সরল।

প্র ০৪Coupon collector-এর n ln n কেন বাস্তব সিস্টেমে এত গুরুত্বপূর্ণ? test coverage, load balancing বা নেটওয়ার্কে এই হিসাব কোথায় আসে?

প্রশ্নটির শিকড় পুরোনো; de Moivre আর পরে Laplace-এর লেখায় এ ধরনের হিসাব পাওয়া যায় বলে উল্লেখ করা হয়, আর বিশ শতকে Erdős ও Rényi (১৯৬১) দেখান যে সময়টি n ln n-এর চারপাশে খুব ঘনভাবে থাকে। মূল কথা: সব n রকম পেতে n নয়, প্রায় n ln n চেষ্টা লাগে। n = 64-এ এটি প্রায় 304, অর্থাৎ নকশার সংখ্যার প্রায় পৌনে পাঁচ গুণ, আর n = 10 লাখে প্রায় ১৪ গুণ। অতিরিক্ত ln n গুণনীয়কটি আসে শেষের কয়েকটি বিরল নকশার দীর্ঘ অপেক্ষা থেকে।

Test coverage-এ: যদি n-টি সমান সম্ভাব্য পথ থাকে আর এলোমেলো input দিয়ে সবগুলো ছুঁতে চান, তাহলে n ln n-এর মতো input লাগবে; বিরল পথগুলো (যাদের সম্ভাবনা 1/n-এর চেয়ে অনেক কম) আরও বেশি সময় নেয়। এই কারণে fuzzing-এর মতো এলোমেলো পরীক্ষায় প্রথম দিকে নতুন বাগ দ্রুত আসে, তারপর গতি কমে যায়। Load balancing আর hashing-এ: n-টি server-এর প্রত্যেকটিতে অন্তত একটি কাজ পৌঁছাতে এলোমেলো বণ্টনে প্রায় n ln n কাজ লাগে; উল্টো দিকে, n-টি কাজ n-টি server-এ এলোমেলোভাবে দিলে প্রায় n/e-টি server খালি থাকে, যার প্রমাণ পর্ব ৪২ “Birthday paradox, hash collision আর balls-into-bins”-এ।

নেটওয়ার্কে gossip protocol-এর কথা ভাবুন: প্রতিটি ধাপে একজন এলোমেলো প্রতিবেশীকে খবর পাঠায়। সবার কাছে খবর পৌঁছানোর হিসাবে coupon collector-এর যুক্তি সরাসরি আসে। বিতরণকৃত সিস্টেমে এলোমেলো sampling দিয়ে “সবাইকে অন্তত একবার দেখা” নিশ্চিত করতে চাইলেও একই সমস্যা। সমাধান হিসেবে প্রায়ই এলোমেলো বাছাইয়ের বদলে একটি এলোমেলো permutation ব্যবহার করা হয় (Fisher–Yates), যাতে ঠিক n ধাপে সবাই একবার আসে।

মূল উপলব্ধি: “সবগুলো অন্তত একবার” ধরনের লক্ষ্যে এলোমেলো চেষ্টার দাম n নয়, n ln n; শেষ কয়েকটির অপেক্ষাই খরচের বড় অংশ।

প্র ০৫Quicksort-এর “গড় ক্ষেত্র” আর randomized quicksort-এর “প্রত্যাশিত সময়” কি একই জিনিস? Hoare-এর অ্যালগরিদমের বিশ্লেষণে এলোমেলোতা কোথায় ঢোকে?

Tony Hoare quicksort উদ্ভাবন করেন ১৯৫৯-৬০ সালের দিকে, আর ১৯৬১-৬২ সালে প্রকাশ করেন। মূল সংস্করণে pivot নির্দিষ্ট নিয়মে বাছা হয়, যেমন প্রথম উপাদান। তখন “গড়ে 2n ln n তুলনা” কথাটির অর্থ: সব n! ইনপুট-ক্রম সমান সম্ভাব্য ধরলে গড়। এই গড়ের দুর্বলতা হলো অনুমানটি নিজেই: বাস্তবে ইনপুট প্রায়ই আগে থেকে সাজানো বা প্রায় সাজানো, আর তখন প্রথম উপাদানকে pivot ধরা quicksort n²-এর কাছাকাছি সময় নেয়। শত্রুতাপূর্ণ ব্যবহারকারী ইচ্ছা করেই এমন ইনপুট পাঠাতে পারেন।

Randomized quicksort এলোমেলোতাকে ইনপুট থেকে সরিয়ে অ্যালগরিদমের ভেতরে আনে। এখন প্রত্যাশা নেওয়া হয় অ্যালগরিদমের নিজের মুদ্রার ওপর, আর উপপাদ্য ৭.১-এর প্রমাণ প্রতিটি নির্দিষ্ট ইনপুটে খাটে: P(zi, zj তুলনা) = 2/(j − i + 1) হিসাবে ইনপুটের ক্রম কোথাও আসেনি। গাণিতিকভাবে দুটি গড় একই সংখ্যা দেয় (2(n + 1)Hn − 4n), কারণ এলোমেলো ইনপুটে নির্দিষ্ট pivot আর নির্দিষ্ট ইনপুটে এলোমেলো pivot একই বণ্টন তৈরি করে। কিন্তু নিশ্চয়তার অর্থ আলাদা: প্রথমটি বলে “বেশিরভাগ ইনপুট ভালো”, দ্বিতীয়টি বলে “যেকোনো ইনপুটে, বেশিরভাগ মুদ্রা-ফল ভালো”।

খারাপ ক্ষেত্র এখনো সম্ভব, কিন্তু তার সম্ভাবনা খুব কম; কত কম, তা বের করতে প্রত্যাশা যথেষ্ট নয়, concentration লাগে, যা পর্ব ৪১-এ। বাস্তব লাইব্রেরিগুলো আরও এক ধাপ যায়: introsort-এর মতো কৌশলে recursion বেশি গভীর হলে heapsort-এ সরে গিয়ে worst case-ও O(n log n) রাখে (DSA কোর্সের পর্ব ২২)। তুলনার সংখ্যা 2n ln n ≈ 1.39 n log2 n, যা তুলনা-ভিত্তিক সর্টিংয়ের নিম্নসীমা log2 n! ≈ n log2 n-এর চেয়ে মাত্র প্রায় ৩৯% বেশি।

মূল উপলব্ধি: এলোমেলোতা ইনপুটে থাকলে নিশ্চয়তা অনুমাননির্ভর; অ্যালগরিদমের ভেতরে থাকলে প্রতিটি ইনপুটে প্রত্যাশার নিশ্চয়তা পাওয়া যায়, আর তার প্রমাণ indicator আর linearity.

অনুশীলন

আগে খাতায় করুন, তারপর উত্তর খুলে মেলান।

  1. প্রমাণ: {1, …, n}-এর একটি uniform এলোমেলো permutation π-তে inversion (এমন জোড়া i < j যেখানে π(i) > π(j)) গড়ে কয়টি? প্রমাণ করুন উত্তর n(n − 1)/4.
    1. প্রতিটি জোড়া i < j-এর জন্য Iij = 1 যদি π(i) > π(j). তাহলে inversion-এর সংখ্যা X = ∑i<j Iij, মোট C(n, 2) পদ। — indicator-এ ভাঙা
    2. i আর j অবস্থানের দুটি মান অদলবদল করার ফাংশনটি একটি bijection, যা “π(i) > π(j)” permutation-গুলোকে “π(i) < π(j)” permutation-গুলোর সঙ্গে মেলায়। তাই দুই দল সমান, P(Iij = 1) = 1/2. — bijection, পর্ব ১৬
    3. Linearity: E[X] = C(n, 2) · 1/2 = n(n − 1)/4. ∎ — উপপাদ্য ৪.১

    যাচাই: n = 4-এ ২৪টি permutation-এর inversion গুনে গড় ঠিক 3 = 4 · 3/4 (scratch-এ মেলানো)। Insertion sort-এর গড় কাজ এই সংখ্যার সমানুপাতিক, তাই এলোমেলো ইনপুটে তার গড় সময়ও Θ(n²)।

  2. হিসাব: বাজারঘরের একজন রাইডারের প্রতিটি ডেলিভারি চেষ্টা স্বাধীনভাবে 4/5 সম্ভাবনায় সফল। (ক) প্রথম সফল ডেলিভারির জন্য প্রত্যাশিত চেষ্টার সংখ্যা কত? (খ) তিনবার চেষ্টাতেও সফল না হওয়ার সম্ভাবনা কত? (গ) ৩ রকম স্টিকারের সব পেতে প্রত্যাশিত অর্ডারের সংখ্যা কত?

    (ক) Geometric(4/5): E = 1/(4/5) = 5/4 = 1.25.

    (খ) প্রথম তিনটিই ব্যর্থ: (1/5)3 = 1/125 = 0.008.

    (গ) Coupon collector, n = 3: 3/3 + 3/2 + 3/1 = 1 + 1.5 + 3 = 11/2 = 3 · H3 = 3 · 11/6 = 5.5. তিনটি সংখ্যাই scratch-এ Fraction দিয়ে মেলানো।

  3. আউটপুট অনুমান: কোড না চালিয়ে বলুন কী ছাপা হবে। তারপর যেকোনো Python-এ চালিয়ে মেলান।
    from fractions import Fraction
    from itertools import product
    die = range(1, 7)
    E = Fraction(sum(a + b for a, b in product(die, die)), 36)
    E2 = Fraction(sum(a * b for a, b in product(die, die)), 36)
    print(E, E2, E2 == Fraction(7, 2) ** 2)
    same = Fraction(sum(a * a for a in die), 6)
    print(same, same == Fraction(7, 2) ** 2)
    7 49/4 True
    91/6 False

    প্রথম লাইন: দুটি স্বাধীন ছক্কার যোগফলের প্রত্যাশা 7/2 + 7/2 = 7 (linearity); গুণফলের প্রত্যাশা 49/4 = (7/2)², কারণ দুটি ছক্কা স্বাধীন (উপপাদ্য ৭.২)। দ্বিতীয় লাইন: একই ছক্কার বর্গ, অর্থাৎ X · X, যেখানে দুই “চলক” সম্পূর্ণ নির্ভরশীল; E[X²] = 91/6 ≠ 49/4. আউটপুট CPython-এ চালিয়ে মেলানো।

  4. প্রমাণের ভুল ধরুন: একজন লিখলেন: “দাবি: n রকম স্টিকারের সব পেতে গড়ে n² অর্ডার লাগে। প্রমাণ: একটি নির্দিষ্ট নকশা পেতে প্রতিটি অর্ডারে সম্ভাবনা 1/n, তাই geometric অনুযায়ী গড়ে n অর্ডার লাগে। নকশা n রকম, আর linearity অনুযায়ী প্রত্যাশা যোগ হয়, তাই মোট n · n = n². ∎” কোথায় ভুল?
    • ভুল চলক যোগ: Wj = “নকশা j প্রথম আসতে কয়টি অর্ডার”, প্রত্যেকটির গড় সত্যিই n. কিন্তু মোট সময় T = W1 + … + Wn নয়; T = max(W1, …, Wn), কারণ সব অপেক্ষা একই অর্ডার-সারিতে একসঙ্গে চলে। Linearity যোগের জন্য, max-এর জন্য নয়।
    • Counterexample: n = 4-এ দাবি বলে 16, কিন্তু আসল মান 25/3 ≈ 8.33 (stepper আর Python ব্লক)। n = 1-এ দুটিই 1, তাই শুধু সবচেয়ে ছোট ক্ষেত্রে মেলানো যথেষ্ট নয়।
    • ঠিক পথ: সময়কে পরপর ধাপে ভাগ করুন, যাতে T সত্যিই একটি যোগফল হয়: T = T1 + … + Tn, আর তখন linearity-তে n · Hn.

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

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

ক্রমCoupon collector-এর প্রত্যাশা n · Hn প্রমাণের ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. মোট সময় T-কে n-টি পরপর ধাপে ভাগ করা: T = T1 + … + Tn
  2. ধাপ i-তে নতুন নকশার সম্ভাবনা (n − i + 1)/n বের করা
  3. Ti-কে geometric চলক হিসেবে চেনা
  4. E[Ti] = n/(n − i + 1) লেখা
  5. Linearity দিয়ে সব E[Ti] যোগ করা
  6. Index বদলে যোগফলটিকে n · Hn লেখা

১ থেকে ৮ পর্যন্ত সংখ্যার একটি uniform এলোমেলো permutation-এ fixed point (যেখানে π(i) = i) গড়ে কয়টি?

  • 1/8
  • 1
  • প্রায় 0.37
  • 4

একটি ডেলিভারি চেষ্টা স্বাধীনভাবে 1/5 সম্ভাবনায় সফল। প্রথম সফল চেষ্টা পর্যন্ত মোট চেষ্টার সংখ্যার (সফল চেষ্টাসহ) প্রত্যাশা কত?

  • 1/5
  • 4
  • 5
  • 25

৩ রকম স্টিকারের প্রতিটি অর্ডারে সমান সম্ভাবনায় আর স্বাধীনভাবে একটি আসে। সব ৩ রকম পেতে প্রত্যাশিত অর্ডারের সংখ্যা কত?

  • 3
  • 9
  • প্রায় 3.30
  • 5.5

X আর Y একই sample space-এর দুটি random variable, যারা স্বাধীন নয়, আর দুটিরই প্রত্যাশা সসীম। কোন উক্তিটি সবসময় সত্য?

  • E[X + Y] = E[X] + E[Y]
  • E[XY] = E[X] · E[Y]
  • E[X²] = (E[X])²
  • E[1/X] = 1/E[X], যদি X সবসময় ধনাত্মক

৪ জন প্রার্থী এলোমেলো ক্রমে আসেন, আর প্রতিবার এ পর্যন্ত সেরা প্রার্থী এলে নতুন করে নিয়োগ হয়। প্রত্যাশিত নিয়োগের সংখ্যা কত?

  • 1
  • 4
  • 25/12 ≈ 2.08
  • 5/2

n-টি আলাদা key-এ randomized quicksort-এ সাজানো ক্রমের zi আর zj (i < j) কখনো পরস্পরের সঙ্গে তুলনা হওয়ার সম্ভাবনা কত?

  • 1/C(n, 2)
  • 2/(j − i + 1)
  • 1/(j − i + 1)
  • 2/n

শব্দকোষ

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

মনে রাখুন

  1. Random variable: একটি ফাংশন X : Ω → ℝ; pmf P(X = x) হলো preimage-এর সম্ভাবনা, যোগফল 1. মান গুনে নয়, ফলাফল গুনে সম্ভাবনা।
  2. বণ্টন: Bernoulli (E = p), {1..n}-এ uniform (E = (n + 1)/2), binomial C(n, k)pk(1 − p)n−k (E = np), geometric (1 − p)k−1p (E = 1/p).
  3. Linearity: E[X + Y] = E[X] + E[Y] সবসময়, স্বাধীনতা ছাড়াই; E[IA] = P(A). গোনার প্রশ্নকে indicator-এর যোগফলে ভাঙুন।
  4. বিখ্যাত উত্তর: fixed point গড়ে 1, record Hn, coupon collector n · Hn, quicksort-এর তুলনা 2(n + 1)Hn − 4n ≈ 2n ln n.
  5. সাবধান: E[XY] = E[X]E[Y] শুধু স্বাধীন হলে নিশ্চিত; E[g(X)] ≠ g(E[X]) সাধারণত; প্রত্যাশা অসীমও হতে পারে। সব উত্তর Fraction আর seed দেওয়া simulation-এ মেলান।

পরের পর্বে: পর্ব ৪১ “Variance আর concentration — Markov, Chebyshev আর Chernoff”: প্রত্যাশা বলে গড় কোথায়, কিন্তু একটি ফল গড় থেকে কতটা দূরে যেতে পারে, তা বলে না। পরের পর্বে variance আর তিনটি অসমতা দিয়ে সেই দূরত্বের সম্ভাবনা মাপা হবে, আর randomized অ্যালগরিদমের ভুল কমানোর হিসাব আসবে।

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

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