zoukankan      html  css  js  c++  java
  • 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~

  • 相关阅读:
    window 7系统环境同时安装window xp系统,形成双系统
    工作感悟
    数据湖框架选型很纠结?一文了解Apache Hudi核心优势
    mysql数据库设计-规则
    maven中多个子模块的构建顺序
    EXTJS3.0 表单元素TextField datefield 设置只读并改背景颜色为灰色
    MySQL5.7的账号回收权限
    哲学王子-复旦博导王德峰教授:阅读与哲学思考
    abseil 的 cmake 方式编译
    [javascript] ie下audio不支持一些媒体类型
  • 原文地址:https://www.cnblogs.com/kongqueling/p/kongqueling_Permutation-and-Combination.html
Copyright © 2011-2022 走看看