यह C++ प्रोग्राम कॉइन फ्लिपिंग (सिक्का उछाल) की अवधारणा का उपयोग करके एक सेट से रैंडम सबसेट उत्पन्न करता है। प्रत्येक तत्व के लिए, एक रैंडम बाइनरी मान (0 या 1) जनरेट किया जाता है - जैसे सिक्का उछालना। यदि परिणाम 1 (हेड्स) है, तो तत्व सबसेट में शामिल होता है।
एल्गोरिदम
शुरुआत 1. ऐरे में तत्व इनपुट लें। 2. rand() का उपयोग करके रैंडम बाइनरी सीक्वेंस जनरेट करें। 3. यह रैंडमली 0 या 1 जनरेट करता है (कॉइन फ्लिपिंग की तरह) और ऐरे तत्व को प्रिंट करता है यदि यह 1 है। समाप्ति
उदाहरण कोड
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
int i, n;
cout << "\nEnter the number of elements: ";
cin >> n;
int a[n];
cout << "\n";
for (i = 0; i < n; i++) {
cout << "Enter " << i+1 << " element: ";
cin >> a[i];
}
cout << "\nThe random subset of the given set is:\n\t { ";
for (i = 0; i < n; i++) {
if (rand() % 2 == 1) // 50% संभावना
cout << a[i] << " ";
}
cout << "}";
return 0;
}
आउटपुट
Enter the number of elements: 7
Enter 1 element: 7
Enter 2 element: 6
Enter 3 element: 5
Enter 4 element: 4
Enter 5 element: 3
Enter 6 element: 2
Enter 7 element: 1
The random subset of the given set is:
{ 7 6 3 }
व्याख्या: n तत्वों के सेट के लिए, प्रत्येक तत्व के सबसेट में शामिल होने की संभावना 1/2 होती है। अपेक्षित सबसेट आकार n/2 होता है। कुल 2^n संभावित सबसेट होते हैं। यह विधि मोंटे कार्लो दृष्टिकोण का एक सरल उदाहरण है।
सुधार: बेहतर रैंडमनेस के लिए srand(time(0)) का उपयोग करें और C++11 के <random> लाइब्रेरी का उपयोग करें।