【问题标题】:probability algorithm to find the next combination寻找下一个组合的概率算法
【发布时间】:2013-03-03 06:45:12
【问题描述】:

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

...
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 个数字是偶数还是奇数等......当我得到所有这些因素时,哪种算法最好(如果有的话)插入这些数据并获得准确的结果

【问题讨论】:

  • 如果我理解你的话,要搜索的短语是“加权随机选择”或“加权随机选择”。根据您使用的语言,如果您添加语言名称,您可能会在前几次点击中找到实现。不过,我并不完全确定我是否在关注你,因为“从这个数组中随机选择最有可能出现的组合”与在 3.5% 的时间内返回“3,5,19”不同.
  • 我是否有权:对于 Number1/Number2/Number3 的每个唯一组合,您需要行数除以总行数并以百分比表示。
  • @DSM 我知道加权随机选择,但我正在寻找一个特定的算法,我会自己实现它我不使用其他代码。想知道是否可以将生成日期添加为可以增加/减少概率的因素之一
  • @PieterGeerkens 是的,但那部分我自己知道怎么做,我需要一些东西来增加/减少基于日期或基于奇数/偶数等的组合出现的概率。 . 简而言之,我需要知道如何考虑多个因素并将其插入某个计算器,该计算器将计算它出现的概率
  • 因此,您正在为尚未完成规范的需求构建算法寻求帮助。这一次我会过去的;当你决定你想要什么后回电。

标签: algorithm math statistics probability


【解决方案1】:

想到了两种方法。

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

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

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

YMMV.

分享和享受。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 2011-12-05
      • 2021-07-25
      • 2022-01-11
      相关资源
      最近更新 更多