如何根据索引的“得分”随机选择一个数组索引?

时间:2014-03-22 17:12:46

标签: objective-c arrays algorithm random

我正在编写一个程序,告诉用户要购买哪种果汁口味。我将可用的果汁储存在一个阵列中,之前在另一个阵列中购买。根据品尝次数和自上次购买后的时间,每种口味得分。分数越高,选择该品味的可能性越大。

当我到达随机选择果汁口味的步骤(即,在阵列中选择一个索引)时,我有两个NSMutableArray个实例,一个用于可用的口味,一个用于分数。两个阵列都有17个插槽。

它可能看起来像这样:(只有三种不同的口味)

@[@"Apple juice", @"Orange juice", @"Grape juice"];  // Avaible tastes array
@[19.21, 45.83, 24.84];                              // Scores array

如何从中随机选择一种口味?

最初,我认为每种口味都可以有一个范围,从之前的口味分数开始到前一个分数+口味自己的分数。然后将生成0和总分之间的随机数。范围与随机数相匹配的味道将是将要选择的那个,但这感觉就像是一个过于复杂的解决方案。

有更简单的方法吗?

修改

顺便说一句,它是用Objective-C编写的。

2 个答案:

答案 0 :(得分:1)

解决问题的方法就是所谓的轮盘赌选择。在另一个问题Roulette Selection in Genetic Algorithms

中有一些示例实现

答案 1 :(得分:0)

简单选项,根据权重多次将每个项目复制到一个数组中,然后从数组中选择一个随机项目。