|
|
1
3
既然可以从实际分配中提取,为什么还要满足于幂律分配呢?我建议您修改LastNames表以包含一个数字列,该列将包含一个数字值,该值表示具有更常见名称的实际indivuduals数。你可能会想要一个更小但成比例的数字,比如说,每百分之一万的表示。
然后,列表将类似于:
选择的名字是
那就是选择一个不超过[uniform distribution]随机数的名字。注意查询如何使用 小于 并下令 描述 -结束订单;这将保证第一个条目(Smith)被选中。另一种选择是,从史密斯的10060开始,而不是从零开始,并放弃小于此值的随机抽签。 除了上面提到的边界管理问题(从零开始而不是从10060开始)之外,这个解决方案以及到目前为止的另外两个响应与 德马克 对这个问题中提到的问题的回答。基本上,我们的想法是使用CDF( 累积分布函数 ).
编辑
:
笔记:
假设3的幂,那么查询看起来像
这是问题中除最后一行之外的查询。
重新编辑
:
如果我们需要,比如说,1000个名字,我们会从名单的前三分之一抽取334个,从第二个三分之一抽取333个,从最后一个三分之一抽取333个。
|
|
|
2
2
不要将pdf存储为rank,而是存储CDF(从Aldekirk开始,直到该名称为止的所有频率的总和)。 然后修改您的选择以检索排名大于公式结果的第一个项次。 |
|
|
3
1
我把这个问题理解为“我需要得到一系列的名字,这些名字将反映1990年美国人口普查中姓氏的频率” 我可能读这个问题有点不同于其他的建议,虽然答案已经被接受,一个非常彻底的答案是,我将贡献我的经验与人口普查姓氏。 我从1990年的人口普查中下载了同样的数据。我的目标是在一个病历应用程序的性能测试过程中产生大量的名字提交给搜索测试。我将姓氏和频率百分比插入表中。我添加了一个列并用一个整数填充它,这个整数是“total names required*frequency”的乘积。人口普查的频率数据加起来并不是100%,所以我的名字总数也有点不足。我可以通过从列表中随机选择名字并增加他们的计数来更正这个数字,直到我得到了所需的数字,随机添加的计数从未超过1000万总数的0.05%。 我生成了1到88799之间的1000万个随机数。对于每个随机数,我将从列表中选择该名称,并减少该名称的计数器。我的方法是模拟处理一副牌,除了我的牌有很多不同的牌和每一张牌的不同数目。 |
|
|
4
0
你把实际频率和等级一起存储吗?
如果您知道要使用什么值,那么将代数从公认的答案转换为MySQL就不麻烦了
|