本文共 2219 字,大约阅读时间需要 7 分钟。
线性同余发生器(Linear Congruential Generator, LCG)是一种常见的伪随机数生成算法。通过线性同余关系生成伪随机数序列,其核心公式为:
X_{n+1} = (a * X_n + c) mod m
其中:
以下是一个完整的Objective-C实现代码示例:
#import@interface LinearCongruentialGenerator : NSObject@end@implementation LinearCongruentialGenerator- (instancetype)initWithParameters:(NSDictionary *)parameters { self; [self initializeWithParameters:parameters]; return self;}- (void)initializeWithParameters:(NSDictionary *)parameters { NSParameterAssert([parameters objectForKey:@"multiplier"] !== nil); NSParameterAssert([parameters objectForKey:@"increment"] !== nil); NSParameterAssert([parameters objectForKey:@"modulus"] !== nil); NSParameterAssert([parameters objectForKey:@"seed"] !== nil); self.multiplier = [parameters objectForKey:@"multiplier"]; self.increment = [parameters objectForKey:@"increment"]; self.modulus = [parameters objectForKey:@"modulus"]; self.seed = [parameters objectForKey:@"seed"];}- (NSInteger)next { self.seed = (self.multiplier * self.seed + self.increment) % self.modulus; return self.seed;}- (NSInteger)generateSequenceUpToCount:(NSInteger)count { NSInteger sequence[100]; for (NSInteger i = 0; i < count; i++) { sequence[i] = [self next]; } return sequence;}- (void)generateRandomNumber { self.seed = (self.multiplier * self.seed + self.increment) % self.modulus; return self.seed;}@end
LinearCongruentialGenerator类继承自NSObject,用于管理LCG的配置和生成随机数。initWithParameters根据提供的参数初始化LCG实例。next方法根据公式生成下一个随机数。generateSequenceUpToCount根据指定的数量生成随机数序列。generateRandomNumber单独生成一个随机数。// 创建一个新的线性同余发生器实例LinearCongruentialGenerator *lcg = [[LinearCongruentialGenerator alloc] initWithParameters:@{ @"multiplier": @123, @"increment": @456, @"modulus": @100000, @"seed": @123456 }]; // 生成随机数序列NSInteger *sequence = (NSInteger *)[lcg generateSequenceUpToCount:100]; // 生成单个随机数NSInteger randomNumber = [lcg generateRandomNumber]; 通过以上代码,你可以轻松实现一个功能强大的线性同余发生器,用于生成高质量的伪随机数序列。
转载地址:http://ponfk.baihongyu.com/