【发布时间】:2011-08-18 13:10:52
【问题描述】:
我有一个从 csv 文件生成的客户对象数组:
日期、姓名、销售额
03/01,阿尔法,110
03/23,阿尔法,25
01/02,测试版,135
...
并且需要一种有效的方法来创建一个新的具有中等销售额的独特客户数组并将它们导出回 csv。可能有多达 500,000 条记录和 100,000 个唯一客户!
【问题讨论】:
我有一个从 csv 文件生成的客户对象数组:
日期、姓名、销售额
03/01,阿尔法,110
03/23,阿尔法,25
01/02,测试版,135
...
并且需要一种有效的方法来创建一个新的具有中等销售额的独特客户数组并将它们导出回 csv。可能有多达 500,000 条记录和 100,000 个唯一客户!
【问题讨论】:
-将您的源数据拆分为每个客户的集合。
对于每个客户:
--按销售额排序
--如果记录数为奇数,则返回中间索引处的销售额
--如果记录数是偶数,则返回中间两边记录的平均值
-将返回的记录拖放到结果数组中。
【讨论】:
在这种情况下,我会使用:
Dictionary<string, List<int>> dict;
键是客户名称(假设它们是唯一的,否则分配某种唯一的 ID?)
这些值是每个客户的销售列表。填充此数组后,您可以继续排序并获取中间元素(如上所述)或求和并除以元素数以获得中位数。(这是错误的)
排序(使用比较方法)需要 O(nlog n) 时间,其中 n 是要排序的列表的长度。
有一些选择算法可以返回 O(n) 中的第 k 个最小值,请查看下面的维基百科链接
【讨论】: