यहां सभी ने यह समझाने का एक बड़ा काम किया कि कोड कैसे काम करता है और यह दर्शाता है कि आप अपने स्वयं के उदाहरणों का निर्माण कैसे कर सकते हैं, लेकिन यहां एक सूचना सैद्धांतिक उत्तर दिखाती है कि हम यथोचित समाधान की उम्मीद कर सकते हैं कि आखिरकार जानवर बल खोज आखिर में मिल जाएगा।
26 अलग-अलग लोअर-केस अक्षर हमारी वर्णमाला बनाते हैं Σ
। विभिन्न लंबाई के शब्दों को उत्पन्न करने की अनुमति देने के लिए, हम आगे ⊥
एक विस्तारित वर्णमाला प्राप्त करने के लिए एक टर्मिनेटर प्रतीक जोड़ते हैं Σ' := Σ ∪ {⊥}
।
आज्ञा α
देना एक प्रतीक और एक्स एक समान रूप से वितरित यादृच्छिक चर खत्म Σ'
। उस प्रतीक को प्राप्त करने की संभावना P(X = α)
, और इसकी सूचना सामग्री, I(α)
द्वारा दिए गए हैं:
P (X = α) = 1 / | | '| = 1/27
I (α) = -log₂ [P (X = α)] = -log 1/ (1/27) = log 27 (27)
एक शब्द ω ∈ Σ*
और उसके ⊥-
समाप्त समकक्ष के लिए ω' := ω · ⊥ ∈ (Σ')*
, हमारे पास है
I ()): = I (ω ') = | |' | * log * (27) = (| ω | + 1) * log 27 (27)
चूँकि Pseudorandom Number Generator (PRNG) को 32-बिट बीज के साथ आरंभीकृत किया गया है, हम लंबाई के अधिकांश शब्दों की अपेक्षा कर सकते हैं
λ = मंजिल [32 / log₂ (27)] - 1 = 5
कम से कम एक बीज से उत्पन्न होना। यहां तक कि अगर हमें 6-वर्ण शब्द की खोज करनी थी, तब भी हम लगभग 41.06% सफल होंगे। जर्जर भी नहीं।
7 अक्षरों के लिए हम 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