免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2380 | 回复: 1
打印 上一主题 下一主题

这样的排列组合该如何实现并统计? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-04 10:45 |只看该作者 |倒序浏览
本帖最后由 lvteCorp 于 2011-09-04 10:50 编辑

有以下内容,每行的前几列是字符串内容,最后一列是数量:
  1. a b c    100
  2. a b d     50
  3. b d e     30
  4. a c d e   10
复制代码
现在需要对每行字符串进行排列组合(两个字符及以上),并对重新组合后的字串内容进行统计。
例如,第一行将产生下列组合:
  1. a b    100
  2. a c    100
  3. b c    100
  4. a b c  100
复制代码
此时,每个组合的数量均为100,第二行将产生下列组合:
  1. a b    150
  2. a d    50
  3. b d    50
  4. a b d  50
复制代码
此时,a b组合的数量将是100+50=150。。。其他各行以此类推。

说明:行/列的字符串数量是不固定的,每行的末尾是数量。

以上就是需求的大致情况,求好的算法和思路,谢谢。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
2 [报告]
发表于 2011-09-04 16:52 |只看该作者
好绕的需求。。。
  1. function func($arr, $value, &$results, $k='')
  2. {
  3.     $k .= array_shift($arr);
  4.     if (count($arr)==1) {
  5.         $results[$k.$arr[0]] += $value;
  6.     } else {
  7.         foreach ($arr as $val) {
  8.             $results[$k.$val] += $value;
  9.         }
  10.         func($arr, $value, &$results, $k);
  11.     }
  12. }

  13. $arr = array(
  14.             0 => array('key'=>array('a','b','c'),'value'=>100),
  15.             1 => array('key'=>array('a','b','d'),'value'=>50),
  16.             2 => array('key'=>array('b','d','e'),'value'=>30),
  17.             3 => array('key'=>array('a','c','d','e'),'value'=>10),
  18.             );
  19. $results = array();
  20. foreach ($arr as $val) {
  21.     foreach ($val['key'] as $key=>$value) {
  22.         if (count($val['key'])==1) break;
  23.         func($val['key'], $val['value'], &$results);
  24.         unset($val['key'][$key]);
  25.     }
  26. }
  27. print_r($results);exit;
复制代码
回复 1# lvteCorp
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP