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~

  • 相关阅读:
    SQLServer提取日期中的年月日及其他格式
    大白话解说,半分钟就懂 --- 分布式与集群是什么 ? 区别是什么?
    VS2015 Git 源码管理工具简单入门
    Web.Config配置文件中customErrors元素的使用方法
    C#发起Http请求,调用接口
    如何停止和禁用Linux系统中的不需要的服务
    QtCreator调试传入运行参数
    gSOAP 在windows下的安装与使用(mingw32)
    MinGW 使用 mintty 终端替代默认终端以解决界面上复制与粘贴的问题
    在windows下执行./configure,make,makeinstall源码安装程序spice-gtk
  • 原文地址:https://www.cnblogs.com/kongqueling/p/kongqueling_Permutation-and-Combination.html
Copyright © 2011-2022 走看看