कोड उद्देश्य सी में है, लेकिन यदि आप इसे समझते हैं तो भी इसे समझना चाहिए यदि आप उद्देश्य सी को नहीं जानते हैं। मूल रूप से यह एक आरएनजी ऑब्जेक्ट है, तो आप एक नया उदाहरण तत्काल बनाते हैं, यदि आप चाहते हैं तो बीज सेट करें और यादृच्छिक हथियार शुरू करें संख्या।एक आरएनजी एल्गोरिदम और संख्याओं की एक श्रृंखला को देखते हुए यह निर्धारित करना संभव है कि कौन सी बीज श्रृंखला का उत्पादन करेगी?
तो संख्याओं को उत्पन्न करने के लिए उपयोग किए जाने वाले बीज को निर्धारित करने के लिए संख्याओं की एक श्रृंखला को पीछे हटाना संभव है? मुझे लगता है कि किसी भी दिए गए एल्गोरिदम को संख्याओं के किसी भी यादृच्छिक सेट को उत्पन्न नहीं कर सकता है, या यह कर सकता है?
rng.seed = 1024;
for (int i=1; i<11; i++)
DLog(@"%lu", [rng randomBetween:0 and:10]);
कौन सा मुझे अनुक्रम 10, 10, 8, 10, 2, 10, 9, 9, 7, 4
देता है:
मैं निम्न कार्य कहो। संख्या 1024 प्राप्त करने के लिए अनुक्रम दिया गया है, क्या मैं कुछ विधि या एल्गोरिदम का उपयोग कर सकता हूं? मुझे पता है कि देखा गया 1024 के लिए वैध अनुक्रम है, लेकिन मैं सिर्फ एक अनुक्रम बना रहा हूं ... 10, 1, 9, 6, 3, 9, 10, 3, 5, 2
। क्या यह जानने का कोई तरीका है कि क्या यह इस एल्गोरिदम के लिए एक वैध अनुक्रम है और यदि ऐसा है तो बीज क्या है?
RNG.h:
@interface RNG : NSObject
@property (assign) unsigned long seed;
- (unsigned long)random;
- (long)randomBetween: (long)min and: (long)max;
@end
RNG.m:
#define A 16807 /* a relatively prime number -- also M div Q */
#define M 2147483647L /* 0xFFFFFFFF/2 */
#define Q 127773L /* M div A */
#define R 2836 /* M mod A */
@implementation RNG
@synthesize seed = _seed;
- (id)init {
self = [super init];
if (self) {
self.seed = 0;
}
return self;
}
- (unsigned long)random {
self.seed = A * (self.seed % Q) - R * (self.seed/Q);
if (self.seed > M)
return (self.seed -= M);
else if (self.seed)
return (self.seed);
else
return (self.seed = 1L);
}
- (long)randomBetween: (long)min and: (long)max {
return ([self random] % (max - min + 1) + min);
}
- (void)seed: (unsigned long)new_seed {
if (new_seed == 0)
new_seed = 1;
while (new_seed > M)
new_seed -= M;
self.seed = new_seed;
}
@end
बीज की सीमा क्या है? आपके पास श्रृंखला कितनी लंबी है? [कबूतर सिद्धांत] से [http://en.wikipedia.org/wiki/Pigeonhole_principle), यदि आपके पास 2^32 संभव बीज हैं, यदि आपके सरणी में ~ 9 संख्याएं कम हैं, तो यह "टकराव" होने की गारंटी है (सरल उदाहरण: सीमाओं में आकार 1 के आकार 1 की सूची [0, 9], यदि आपके पास 9 संभावित बीज हैं, तो कम से कम 2 बीज होते हैं जो समान "सूची" देते हैं) – amit
@amit - रेंज एक ' हस्ताक्षर किए गए लंबे ... ... कई संभावनाएं। मैं टकराव के बारे में चिंतित नहीं हूं, अगर अनुक्रम में फिट होने वाले दो या दो से अधिक बीज हैं, तो मुझे केवल पहले व्यक्ति की आवश्यकता है। – Justin808
वह भाषा क्या है? –