PHP-算法问题:从数据集中按规则取指定数量的数据集合

发布于 2017-05-26 19:52:36 字数 9338 浏览 1218 评论 1

遇到一个算法问题,一直不得求解,恳请大神指点!
现有数据:
<?php
$data = array(
array('e', 'l'),
array('a', 'e', 'g', 'k', 'o', 'v', 'y'),
array('d', 'g', 'l', 'v', 's', 'j', 'r', 'z', 'y', 'e', 'p', 't', 'w', 'q', 'x', 'i', 'f', 'c'),
array('c', 'd', 'g', 'i', 'n', 's', 'u'),
array('b', 'l', 'q', 'n', 't', 'm', 'p', 'x', 'e', 'k', 'd', 'h', 's', 'f', 'g', 'v', 'z', 'o', 'r', 'j'),
array('l', 't', 'u', 'w'),
array('c', 'f', 'g', 'h', 'i', 'l', 'n', 'o', 'p', 'q', 'u', 'w', 'y'),
array('b', 'd', 'e', 'f', 'g', 'i', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'y'),
array('g', 'a', 's', 'z', 'd', 'w', 'k', 'n', 'h', 'b', 'r'),
array('j', 'g', 'c', 'u', 'h', 'o', 'w', 'z', 's', 'f', 'e', 'x', 'i', 'k', 'r', 'a', 'y', 't', 'l', 'p', 'q', 'v', 'n', 'b'),
array('a', 'b', 'g', 'h', 'j', 'k', 'l', 'o', 'p', 'v', 'w', 'x'),
array('m', 'q', 't', 'e', 'w', 'n', 'l', 'j', 'v', 'x', 'h', 'p', 'b', 'a', 'g', 'f', 'z', 'c', 'd', 'k', 'u', 'o', 's', 'r', 'y', 'i'),
array('k', 'n', 'p', 'r'),
array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'n', 'o', 'p', 'q', 'r', 'v', 'x', 'y'),
array('j', 'k', 'p', 'z', 'g', 'c'),
array('j', 'c', 'q', 'x', 'z', 'u', 'r', 't', 'm', 'l', 'f', 'n', 'h', 'y', 'w', 'p', 'd', 'k', 'b', 'i', 'a', 'o', 'e'),
array('a', 'b', 'c', 'd', 'e', 'h', 'j', 'n', 'p', 'q'),
array('a', 'c', 'd', 'e', 'h', 'i', 'j', 'p', 'q', 'r', 'y'),
array('m', 'a', 'c', 'p', 't', 'z', 'd', 'u', 'l', 'f'),
array('b', 'q', 't', 'u', 'w'),
array('f', 'k', 'o', 'r'),
array('y', 'n', 'l', 't', 'b', 'j', 'f', 'i', 'k', 'd', 'r', 'o', 'g', 'v', 'c', 'a', 'm', 'w', 'z'),
array('q', 'u', 's', 'p', 'o', 'g', 'h', 'l', 'j', 'y', 'z', 'b'),
array('c', 'y', 'j', 'v', 'a', 'g', 'f', 'l', 'm', 'z', 'o', 'e', 'u', 'q', 'k', 'n'),
array('e', 'y', 'i', 'z', 'g', 'x', 'd', 's', 'h', 'w', 'j', 'b', 'm', 'v', 'u', 'a', 'k', 'n', 'r', 'q', 'p', 'f', 'o', 't', 'c'),
array('a', 'c', 'd', 'e', 'f', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 'u', 'v', 'w', 'x', 'y'),
array('b', 'g', 'h', 'i', 'j', 'l', 'm', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y'),
array('n', 'b', 'c', 'i', 'o', 'k', 'g', 's', 'e', 't', 'w', 'z', 'a', 'l', 'j', 'u', 'h'),
array('a', 'd', 'i', 'k', 'r', 'y'),
array('e', 'f', 'g', 'j', 'l', 'n', 'o', 'r', 't', 'u', 'w', 'x'),
array('t', 's', 'n', 'f', 'w', 'm', 'u', 'l', 'o', 'z', 'g', 'y', 'a', 'j', 'q', 'v', 'h', 'k', 'c', 'd'),
array('q', 'g', 'b', 'p', 'z', 'i', 's', 'm', 'k', 'c', 'y', 'w', 'e', 'h'),
array('h', 'x', 'r', 'e', 'f', 'b', 'd', 'n', 's', 'j', 'k', 'a', 'p', 'z', 'm', 'o', 'y', 'v', 'c', 'w', 't', 'g', 'u'),
array('d', 'e', 'h', 'm', 'p'),
array('u', 'm', 'd', 'k', 't', 'l', 'y', 'o', 'e', 'x', 'z', 'w', 'g', 'h', 'i', 'v', 'j', 'f', 'p', 'a', 'q', 'c', 'b', 'n', 's', 'r'),
array('g', 'l', 's', 'y'),
array('w', 'j', 'u', 's', 'h', 'i', 'z', 'o', 'm', 'r', 'v'),
array('f', 'o', 'q', 'h', 'x', 's', 'w', 'g', 'p', 'd', 'l', 'j', 'k', 'c', 'n', 'e', 'i', 'z', 't', 'y', 'b', 'm'),
array('n', 't', 'h', 'v', 'i', 'j', 'g', 'u', 'x', 'z', 'c', 'k'),
array('h', 'e', 'r', 'z', 'w', 's', 'b'),
array('k', 'i', 'w', 'm', 'g', 'a', 'r', 'n', 'y', 'x', 't', 'v', 'h', 'b', 'e', 'd', 'j', 'f', 'u', 'q', 's', 'p', 'c', 'z', 'o', 'l'),
array('a', 'c', 'd', 'h', 'i', 'k', 'p', 'r', 'v', 'w', 'y'),
array('m', 'a', 'n', 't', 'i', 'u', 'h', 'd', 'b', 'v', 'x', 'z', 'w', 'g', 's', 'y', 'j', 'l', 'e', 'o', 'c'),
array('y', 't', 'r', 'w', 'n', 'u', 'z'),
array('z', 'b', 'q', 'i', 'm', 'v', 't', 'h', 'a', 'k', 'e', 'o', 'w', 'f', 's', 'g', 'l', 'd', 'y', 'n', 'c', 'x', 'r', 'p', 'u', 'j'),
array('b', 'c', 'e', 'h', 'k', 'l', 'n', 'o', 'p', 'q', 'v'),
array('a', 'e', 'h', 'k', 'n', 'p', 'q', 'r', 't', 'x', 'y'),
array('j', 'u', 'v', 'm', 'g', 'l', 'f', 'z', 'a', 'd', 'n', 'b', 'h', 'q', 'c', 'y', 'w'),
array('g', 'j', 'r', 'u'),
array('c', 'd', 'e', 'h', 'i', 'k', 'l', 'o', 'p', 'q', 'r', 'u', 'v', 'y'),
array('y', 't', 'u', 'n', 'f', 'z', 'r', 'c', 'i', 'v', 'o', 'j', 'g', 'p', 'b', 'h', 'w', 'm', 'e', 'k', 'l', 's', 'd', 'q'),
array('d', 'f', 'g', 'i', 'j', 'o', 'q', 'u', 'x'),
array('a', 'b', 'c', 'e', 'f', 'g', 'h', 'i', 'k', 'l', 'p', 'q', 't', 'u', 'x'),
array('p', 'u', 'r', 'y', 'v', 'l', 'b', 'n', 'z', 'k', 'q', 'm', 'a', 't', 'e', 'c'),
array('k', 'j', 'x', 'v', 'p', 'd', 't', 'f', 'l', 's', 'c', 'z', 'b'),
array('j', 'm', 't', 'e', 'v', 'u', 'k', 'w', 'c', 'b', 'q', 'y', 'o', 'i', 'p', 'h', 'g', 'z', 'd', 's', 'f', 'l', 'r', 'n'),
array('a', 'r', 's'),
array('n', 'd', 'e', 'g', 'r', 's', 'o', 'm', 'j', 'v', 't', 'x', 'z', 'a', 'i', 'y', 'f', 'k', 'h'),
array('b', 'x', 'k', 'j', 'o', 'g', 'm', 'c', 'i', 'q', 'r', 'h', 'e', 'p', 'w', 'a', 'd', 'v', 'z'),
array('x', 'o', 'l', 'z', 'j', 'h', 'y', 'g', 'k', 'u', 'p', 's', 'v', 'q', 'm', 'a', 'n', 'i', 't', 'b', 'e', 'd', 'c', 'f', 'r'),
array('h', 'i', 'm', 'o', 'x', 'y'),
array('m', 'y', 'n', 'p', 'l', 'e', 'o', 't', 'r', 'q', 'v', 'd', 'z'),
array('a', 'c', 'd', 'f', 'g', 'h', 'i', 'j', 'k', 'o', 'p', 'q', 's', 'u', 'w', 'x'),
array('a', 'd', 'h', 'i', 'j', 'l', 'm', 'n', 'o', 'r', 's', 'w', 'x', 'y'),
array('f', 'k', 'l', 'y', 'p', 'e', 'n', 'j', 'v', 's', 't', 'm', 'd', 'x', 'z', 'r', 'i'),
array('e', 'y', 'v', 't', 'x', 'r', 'k', 'n', 'p', 'm', 'i', 'z', 'j', 'l', 'c', 'g'),
array('x', 'z', 'r', 'c', 'n', 'q', 'h', 'j', 'a', 'l'),
array('p', 'z', 'x', 'm', 'r'),
array('s', 'r', 'x', 'l', 'b', 'e', 't', 'g', 'y', 'w', 'm', 'z', 'o', 'a', 'v', 'i', 'q', 'd', 'p', 'c'),
array('s', 'g', 'u', 'd', 'n', 'm', 't', 'a', 'y', 'x', 'w', 'v', 'r', 'l', 'f', 'z', 'q', 'j', 'k', 'e', 'p', 'h', 'b'),
array('h', 'y', 'j', 'o', 'k', 'z', 'e', 'a', 'r', 'f', 'c'),
array('z', 'm', 's'),
array('c', 'd', 'e', 'f', 'g', 'j', 'l', 'm', 'o', 'q', 'r', 's', 't', 'u', 'v'),
array('w', 'c', 'q', 'j', 'i', 'b', 'v', 'a', 'k', 'z', 'm', 'g', 'n', 'l', 's', 'd', 'u', 't', 'e', 'f', 'r', 'x'),
array('a', 'o', 'k', 'd', 'm', 'q', 'p', 'e', 'r', 's', 'z', 'y'),
array('a', 'c', 'f', 'g', 'h', 'j', 'n', 'q', 'r', 'u', 'x'),
array('x', 'z', 'd', 's', 'f', 'i', 'e', 'h', 'c', 'j'),
array('h', 'i', 'y'),
array('z', 's', 'm', 'i', 'o', 'c', 'd', 'j', 'f', 't', 'p', 'h', 'q', 'x', 'r', 'e', 'k'),
array('t', 'b', 'f', 'q', 'c', 'i', 'd', 'v', 'm', 'k', 'n', 's', 'e', 'p', 'x', 'h', 'z', 'y', 'r'),
array('c', 'j', 'l', 'o', 'r'),
array('z', 'd'),
array('z', 'o', 'e', 'y', 'b', 'd', 'l', 'w', 'v'),
array('k', 'd', 'z', 'o', 'm', 'c', 'i', 'n', 'p', 'x', 'e', 'y', 'w', 'b', 'f', 'h', 'r', 'g', 'q', 's', 'v'),
array('k', 's'),
array('o', 'g', 'z', 'b', 'm', 'n', 'u', 'w', 'q', 's', 't', 'i', 'c', 'h', 'd', 'x', 'f', 'y', 'a', 'k'),
array('a', 'b', 'c', 'd', 'e', 'f', 'h', 'i', 'j', 'k', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x'),
array('a', 'x', 't', 'm', 'l', 'i', 'v', 'd', 'y', 'n', 'q', 'o', 'h', 's', 'c', 'b', 'g', 'u', 'z', 'e', 'k', 'j', 'p'),
array('j', 'k', 'p', 'z', 'u', 'q', 'n', 't', 'm', 'f', 'i', 'h', 'l', 'c', 'x', 'a', 'e', 'v', 'b', 's', 'r', 'y', 'w', 'd', 'g', 'o'),
array('l', 'm', 'v', 'y'),
array('c', 'f', 'h', 'i', 'j', 'n', 'p', 'q', 's', 't', 'w', 'x'),
array('d', 'm', 's'),
array('h', 'w', 'x', 'u', 'e', 'r', 'd', 'i', 'k', 'j', 'a', 'l', 'g', 'y', 'b', 'f', 't', 'n', 'o', 's', 'q', 'z', 'm', 'v'),
array('f', 'y'),
array('d', 'f', 'i', 'p', 'u'),
array('a', 'b', 'j', 'm', 'r'),
array('n', 'h', 'd', 'z', 'e', 'v', 'x', 'j', 'f', 'b', 'q', 'r', 'y', 'c', 'w', 'k', 'm'),
array('x', 'y', 'q', 'h', 'w', 'r', 's', 'g', 'j', 'z', 'e', 'v', 'u', 'p'),
array('h', 'w', 'm', 'l', 'f', 'p', 'a', 'v', 'b', 'q', 'g', 'y', 'c', 'u', 'r', 't', 'j', 'o', 'k', 'z', 'x', 'n', 'e', 'i', 's'),
array('i', 'u'),
);
$times = array(
'a' => 29,
'b' => 11,
'c' => 33,
'd' => 84,
'e' => 46,
'f' => 67,
'g' => 19,
'h' => 18,
'i' => 88,
'j' => 8,
'k' => 54,
'l' => 86,
'm' => 88,
'n' => 29,
'o' => 96,
'p' => 1,
'q' => 4,
'r' => 100,
's' => 89,
't' => 44,
'u' => 53,
'v' => 68,
'w' => 12,
'x' => 54,
'y' => 23,
'z' => 78,
);
?>
其中$data包含100组数据,每组数据由字母组成,数量和内容都是随机的。
其中$times是每个字母出现的次数。
现在需要从$data中取20组数据,使这20组数据排重过滤后组成的新数据中,所有字母出现次数总和最小(相比于其他的可能的组合)。
穷举法比较的路子走不通,因为从100组数据中取所有20组数据可能的组合,这个数据量太大。
请问,应该如何获取?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

瑾兮 2017-07-20 09:56:03

所有字母出现的次数总和最小?意思就是20个数组里面的字母个数加在一起最小不就行了吗?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文