কোডটি কীভাবে কাজ করে এবং কীভাবে আপনি নিজের উদাহরণ তৈরি করতে পারেন তা বোঝানোর জন্য এখানে সকলেই দুর্দান্ত কাজ করেছিলেন, তবে এখানে একটি তথ্য তাত্ত্বিক উত্তর রয়েছে যা আমরা যুক্তিযুক্তভাবে সমাধানের জন্য কেন আশা করতে পারি যে ব্রুট ফোর্স অনুসন্ধান অবশেষে খুঁজে পাবে।
26 টি ছোট ছোট অক্ষরগুলি আমাদের বর্ণমালা গঠন করে Σ। বিভিন্ন দৈর্ঘ্যের শব্দ উত্পন্ন করার জন্য, আমরা আরও ⊥একটি বর্ধিত বর্ণমালা উত্পন্ন করতে একটি টার্মিনেটর প্রতীক যুক্ত করি Σ' := Σ ∪ {⊥}।
আসুন αএকটি প্রতীক এবং এক্স সমানভাবে বিতরণ করা এলোমেলো পরিবর্তনশীল Σ'। প্রতীকটি প্রাপ্ত করার সম্ভাবনা P(X = α), এবং এর তথ্য সামগ্রী I(α), এর দ্বারা প্রদত্ত:
পি (এক্স = α) = 1 / | Σ '| = 1/27
আমি (α) = -লগ [পি (এক্স = α)] = -লগ (1/27) = লগ (27)
একটি শব্দ ω ∈ Σ*এবং এটির ⊥-সমাপ্ত সমাপ্তির জন্য ω' := ω · ⊥ ∈ (Σ')*, আমাদের কাছে রয়েছে
আমি (ω): = আমি (ω ') = | ω' | * লগ ((27) = (| ω | + 1) * লগ (27)
যেহেতু সিউডোরডম নম্বর জেনারেটর (পিআরএনজি) 32-বিট বীজ দিয়ে শুরু করা হয়েছে, তাই আমরা বেশিরভাগ দৈর্ঘ্যের শব্দ আশা করতে পারি
λ = তল [32 / লগ₂ (27)] - 1 = 5
কমপক্ষে একটি বীজ দ্বারা উত্পাদিত করা। এমনকি যদি আমরা একটি character-চরিত্রের শব্দটি অনুসন্ধান করতে চাই, তবে আমরা এখনও প্রায় ৪১.০ be% সময় সাফল্য অর্জন করব। খুব বাজে না.
Letters টি বর্ণের জন্য আমরা 1.52% এর কাছাকাছি খুঁজছি, তবে আমি চেষ্টা করে দেখেছি তা বুঝতে পারিনি:
#include <iostream>
#include <random>
int main()
{
std::mt19937 rng(631647094);
std::uniform_int_distribution<char> dist('a', 'z' + 1);
char alpha;
while ((alpha = dist(rng)) != 'z' + 1)
{
std::cout << alpha;
}
}
আউটপুটটি দেখুন: http://ideone.com/JRGb3l