【发布时间】:2011-11-14 01:48:02
【问题描述】:
我正在尝试编写一个程序来从US Census last name list 中选择一个随机名称。列表格式为
Name Weight Cumulative line
----- ----- ----- -
SMITH 1.006 1.006 1
JOHNSON 0.810 1.816 2
WILLIAMS 0.699 2.515 3
JONES 0.621 3.136 4
BROWN 0.621 3.757 5
DAVIS 0.480 4.237 6
假设我将数据加载到类似的结构中
Class Name
{
public string Name {get; set;}
public decimal Weight {get; set;}
public decimal Cumulative {get; set;}
}
什么数据结构最适合保存名称列表,以及从列表中选择随机名称但名称分布与现实世界相同的最佳方法。
如果数据结构有所不同,我只会使用前 10,000 行。
我曾尝试查看有关加权随机性的其他一些问题,但我在将理论转化为代码时遇到了一些麻烦。我对数学理论不太了解,所以我不知道这是否是“有或没有替换”随机选择,我希望同一个名字能够出现不止一次,这意味着。
【问题讨论】:
-
将累积值存储在平衡二叉树中,节点中包含名称。选择一个小于累积值之和的随机整数,并在 bin 树中搜索(小于)。
-
@belisarius .NET 中是否有任何二叉树结构,或者我必须编写一个?
-
@Scott:你可以只使用一个数组来做这个——BinarySearch 可以正常工作,只要它被排序......
-
@Scott 我不会说.Net,但我想应该有......这就是我没有写答案的原因
-
@Scott:没有内置的,但是有不错的选择,比如:itu.dk/research/c5
标签: c# random distribution weighted