python – 按值将文件分成相等的部分

使用bash或python(2.4.x)

我有一个文件 – 文件中大约有100行,文件结构如下.

aaaaa,  100
aaaab,  75
aaaac,  150
aaaad,  135
aaaae,  144
aaaaf,  12
aaaag,  5
aaaah,  34
aaaai,  11
aaaaj,  43
aaaak,  88
aaaal,  3
baaaa,  25
baaab,  33
baaac,  87
baaad,  111
baaae,  45
baaaf,  99
baaag,  71
baaah,  68
baaai,  168
baaaj,  21
baaak,  11
baaal,  47
caaaa,  59
caaab,  85
caaac,  77
caaad,  33
caaae,  44
caaaf,  16
caaag,  111
caaah,  141
caaai,  87
caaaj,  59
caaak,  89
caaal,  3

我想要做的是将它分成12列,每列具有大致相同数量的传感器,每列的总和接近相同.

换句话说,如果我采用上面的列表并将其拆分为这样.

aaaaa   100     aaaab   75      baaab   33
aaaai   11      baaah   68      baaac   87
aaaak   88      caaaa   59      caaac   77
       199             202              197

aaaah   34      baaaf   99      caaad   33
baaad   111     baaal   47      aaaac   150
aaaaj   43      caaae   44      caaaf   16
       188             190              199

aaaag   5       aaaaf   12      baaaa   25
aaaad   135     caaai   87      caaag   111
caaaa   59      caaak   89      baaag   71
       199                 188          207

aaaae   144     baaaj   21      caaaj   59
aaaal   3       baaak   11      caaah   141
baaae   45      baaai   168     caaal   3
       192              200              203

它产生12列相同的项目,非常接近均值.

我可以手动完成,但我们最终需要这样做几次.我甚至不确定从哪里开始除了把它变成一个数组,计算数组中的项目并进行随机分割.仍然坚持价值平衡.

有什么指针吗?

解决方法:

如果您想要最佳解决方案,这对于大型输入来说并不会很有趣.你正在寻找一些与CS-Knapsack,Bin Packing之类的一些非常着名的难题相符合的东西.一些更简单,不太完美的解决方案可能足够接近.

这不是确切的,但是,根据您的示例数据集,我设法通过一种非常简单的方法获得214,197,194,199,205,182,195,192,199,199,206,208的大小.它可能适用于也可能不适用于实际数据.

方法是:

>按大小排序列表
>将列表拆分为3个部分 – 高,中和低
>将每个成员置于一个集合中.
>反向中低列表.
>将它们(按相反顺序)放入现有的集合中

当您接近最佳分区时,解决方案可能会变得更加复杂.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...