erlang实现排列组合问题
今天在公司做一个日志分析的任务,在做统计的时候,遇到这样一个问题,
之前已经将数据拆分好,出现这样一张中间表Table,简略写如下:
A属性 B属性 C属性 D属性
1 3 5 7
2 4 6 8
现在A属性 B属性 C属性 D属性代表Table表中的四个字段,他们的value有多个,四个属性都是不为空的,现在需要计算出A属性、B属性、C属性、D属性分别组合之后的组合在Table表中的存在数据条数。
因为把这张分析的中间表放入数据库,本来初期是想SQL语句进行查找,不过可能由于SQL知识比较弱,所以还没想到很好的SQL语句,感觉这样的查找即使写出来,也可能效率很低吧~ 有朋友知道可以告诉我哈~* _ *~
所以转变了一下思路,
1 先通过sql语句group_by 来查找每个字段有几个不同的value值,比如:
select A from Table group_by A;
这样就获取了A属性、B属性、C属性、D属性分别存在的不同value值;
2 现在就需要获取到可能的排列情况喽~由于我目前在用erlang开发项目,自然想到用erlang去实现这样一个功能函数啦~
代码附上:
calc_group(A, B, C, D) ->
%A = [1,2], B = [3,4], C = [5,6], D = [7,8],
Result = lists:foldl(fun(A1, Acc) ->
Result1 = lists:foldl(fun(B1, Acc2) ->
Result2 = lists:foldl(fun(C1, Acc3) ->
Result3 = lists:foldl(fun(D1, Acc4) ->
[{A1, B1, C1, D1} | Acc4]
end, [], D),
%lager:log(info, self(), "Result3:~p", [Result3]),
Acc3 ++ Result3
end, [], C),
%lager:log(info, self(), "Result2:~p", [Result2]),
Acc2 ++ Result2
end, [], B),
%lager:log(info, self(), "Result1:~p", [Result1]),
Acc ++ Result1
end, [], A),
Result.
第一次写这样的链表操作,一个套一个啊(惶恐哦)~~不知道在数据量较大的时候会不会影响太大,目前是还没有测试阶段,不知道线上效果如何,谁还有没有更好的方法呢?
3 最后这一步就好做了,通过获取到的排列组合,可以用sql获取count啦~
这就是今天早上做的第一个任务,做一个简单的统计分析的工作,当然还没有界面,估计后期要用php做个界面给非技术人员统计查看~fighting~
erlang实现排列组合问题的更多相关文章
- 学习sql中的排列组合,在园子里搜着看于是。。。
学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...
- .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)
今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(一)—组合生成
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- hdu1521 排列组合(指数型母函数)
题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数. (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2, ...
- [leetcode] 题型整理之排列组合
一般用dfs来做 最简单的一种: 17. Letter Combinations of a Phone Number Given a digit string, return all possible ...
- 排列组合算法(PHP)
用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m ...
- iOS多线程中,队列和执行的排列组合结果分析
本文是对以往学习的多线程中知识点的一个整理. 多线程中的队列有:串行队列,并发队列,全局队列,主队列. 执行的方法有:同步执行和异步执行.那么两两一组合会有哪些注意事项呢? 如果不是在董铂然博客园看到 ...
随机推荐
- MyBatis与Hibernate总结篇
也用了这么久的Hibernate和MyBatis了,一直打算做一个总结,就他们之间的优缺点说说我自己的理解: 首先,Hibernate是一个ORM的持久层框架,它使用对象和我们的数据库建立关系,在Hi ...
- String和StringBuffer的常见用法
链接:https://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7?answerType=1&f=dis ...
- SpringCloudGateWay之限流
一.引言在高并发系统中,经常需要限制系统中的电流化妆.一方面是防止大量的请求使服务器过载,导致服务不可用,另一方面是防止网络攻击.常用的限流方法,如hystrix.应用线程池隔离.超过线程池的负载和g ...
- 第七篇 CSS盒子
CSS盒子模型 在页面上,我们要控制元素的位置,比如:写作文一样,开头的两个字会空两个格子(这是在学校语文作文一样),其后就不会空出来,还有,一段文字后面跟着一张图,它们距离太近,不好看,我们要移 ...
- python tkinter 基本使用
这里只放表格和一个控件基本属性 grid(**options) 属性-- 下方表格详细列举了各个选项的具体含义和用法: 选项 含义column 1. 指定组件插入的列(0 表示第 1 列)2. 默认值 ...
- 了解并安装Nginx
公司使用nginx作为请求分发服务器,发现本人在查看nginx配置上存在些许困难,故仔细阅读了陶辉的<深入理解nginx模块开发与框架>第一部分,并作此记录. 了解 我根据书上的思路来了解 ...
- 关于STM32中printf函数的重定向问题
printf函数一般是打印到终端的,stm32芯片调试中经常需要用到串口来打印调试信息,那能不能用串口实现类似windows的Console中的printf呢? 答案是肯定的,那就是printf函数的 ...
- windows文本操作字符命令含义
r 打开只读文件,该文件必须存在. r+ 打开可读写的文件,该文件必须存在. rb+ 读写打开一个二进制文件,只允许读写数据. rt+ 读写打开一个文本文件,允许读和写. w 打开只写文件,若文件存在 ...
- 测试人员必备:linux文件清理不得不知道的技巧
测试人员最常见和繁琐的任务之一就是清理系统,比如防止磁盘空间出现不足.下面是我收集的一些常用的 Linux 文件系统相关命令. 一 检查可用空间 要查找服务器上所有文件系统上的可用空间,请执行以下命令 ...
- 有趣的动画swf 小鼠吃豆子
今天发现一个有趣的动画swf,小鼠吃豆子,呵呵 <object width="240" height="206" data="http://cd ...