-1

适合我的问题的最好例子是彩票,但它与彩票略有不同,但想法相似。我的程序正在从存储先前生成的数字的数据库中获取数据。数字采用以下格式:

...
5, 10, 11
...

3个随机数。现在表格最多可容纳10,000 个先前生成的数字,表格格式如下:

 UniqueID (autoincrement), Number1, Number2, Number3, DateOfGeneration

我需要什么样的算法,或者建议一本书来帮助我提出算法。我不是要求你为我编写代码,我只是要求一个教程、书籍或网站,以便我可以自己阅读和弄清楚。

我需要计算最有可能出现的下一个组合。意思是说,在之前生成的10,000个组合中,组合3、5、19的出现是该组合下次出现的概率的350倍:

350/10000 = 0.035 or 3.5%

我会将这个 0.035 存储在具有以下结构的数组中:

$arrayOfCombinations[combinationisthekey] = probability

例子:

$arrayOfCombinations['3,5,19'] = 0.035

然后运行某种算法,从这个数组中随机选择最有可能出现的组合,因此组合3、5、19将有0.035的机会被选中。

我知道如何进入包含所有组合及其概率的数组的步骤。我需要能够从数组中随机选择的算法。

我是否需要考虑生成该数字的日期以使其更准确?它是否必须增加/减少概率?这些我需要但不知道在哪里寻找的因素。

感谢您提供任何建议或链接/教程,非常感谢您。

再说一次,我不是要你花时间为我写代码。我会自己写,只需要某种教程。

编辑:(阅读本文的要点)

我要寻找的主要内容是:我需要记住什么样的因素可以增加/减少组合的概率。例如生成数字的日期,3个数字是偶数还是奇数等......当我得到所有这些因素时,哪种算法最好(如果有的话)插入这些数据并获得准确的结果

4

2 回答 2

2

我想到了两种方法。

第一个切入点:您可以尝试将数字存储在数组中,索引是一个简单的数字(即索引是 1、2、3 等),而不是将概率存储在以数字作为索引的数组中。您为表中的每个条目在数组中放置一个条目,然后从数组中的 1..number 个元素中随机选择一个数字。使用此随机数从数组中提取组合。通过这种方式,您将从具有预期频率的阵列中提取组合。

另一种选择是继续使用组合作为键,但不是将概率存储在数组中,而是存储每个组合的实际出现次数(例如,存储 350 而不是 0.035)。随机选择一个从 1 到出现总数的数字并遍历数组,从随机值中减去存储在数组中的出现计数,直到随机值变为零或负数,在这种情况下,您刚刚的元素的索引看着是你找到的组合。

如果我必须这样做,我更喜欢#1 - 它简单易行。#2 节省了一点内存,30 年前我会选择,但今天我们可以使用千兆字节的实际内存,我认为没有充分的理由尝试尽量减少非关键资源的使用。

YMMV。

分享和享受。

于 2013-03-14T18:42:07.273 回答
0

看起来您正在尝试计算n-grams 的概率;这类似于谷歌在自然语言处理中使用的,你使用的是数字而不是单词。有许多现有的模型来解决这个问题。

您可以特别有效地做的一件事是根据数字估计马尔可夫链模型,该模型将有效地存储并为您提供所有 n-gram 的概率。不过,这确实做出了一个仅取决于您当前观察到的数字的假设。

于 2013-03-14T19:05:19.173 回答