帮我在写一个算法，推测后区首球。
入参有高位/中位/低位，  1个号码（后区首球）+ 5个号码（下期前区）+ 5个号码（上期前区） + 2个号码（上期后区）。
高位：
（1）
先拿第一段的1个号码（后区首球）分别去d7表（按系数从大到小排列）作为主球号查询，取最大值向下5个号码，注意第5个号码对应的系数如果有多个话，需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_backend__history_top_100 表中比较，取系数高者
     * 2) 若经过dlt_backend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，就默认选择第一位
比如第4/5/6/7这四个位置的号码对应的系数相同，需要选择最后的4位和5位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
如果结果是5位的系数最高，其余位置的系数相同；首先将5位对应的号码作为需要筛选出的5位号码的第4位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，去系数对应最大的一个球号作为需要筛选出的5位号码的第5位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位
注意：这一步取出5个球号后，还需要记录这5个球号在d7表中对应的系数，最后记录一个包含球号和对应的系数的map。最后组成5个球号的map.
（2）
拿第二段的5个号码（下期前区）分别去d6表（按系数从大到小排列）作为主球号查询，取最大值向下10个号码，注意第10个号码对应的系数如果有多个话，需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_backend_history_top_100 表中比较，取系数高者
     * 2) 若经过dlt_backend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，就默认选择第一位
比如第9/10/11/12这四个位置的号码对应的系数相同，需要选择最后的9位和10位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
如果结果是10位的系数最高，其余位置的系数相同；首先将10位对应的号码作为需要筛选出的10位号码的第9位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，去系数对应最大的一个球号作为需要筛选出的10位号码的第10位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位
（3）
拿第三段的5个号码（上期前区）分别去d10表（按系数从大到小排列）作为主球号查询，取最大值向下10个号码，注意第10个号码对应的系数如果有多个话，需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_backend_history_top_100 表中比较，取系数高者
     * 2) 若经过dlt_backend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，就默认选择第一位
比如第9/10/11/12这四个位置的号码对应的系数相同，需要选择最后的9位和10位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
如果结果是10位的系数最高，其余位置的系数相同；首先将10位对应的号码作为需要筛选出的10位号码的第9位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，去系数对应最大的一个球号作为需要筛选出的10位号码的第10位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位
（4）
拿第四段的2个球号（上期后区）分别去D11（按系数从大到小排列）作为主球号查询，取最大值向下10个号码，注意第10个号码对应的系数如果有多个话，需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_backend__history_top_100 表中比较，取系数高者
     * 2) 若经过dlt_backend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，就默认选择第一位
比如第9/10/11/12这四个位置的号码对应的系数相同，需要选择最后的9位和10位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
如果结果是第11位的系数最高，其余位置的系数相同；首先将11位对应的号码作为需要筛选出的10位号码的第9位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，取系数对应最大的一个球号作为需要筛选出的10位号码的第10位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位。
（5）
筛选出dlt_backend_history_top表中取平均值向上的2位球号，平均值是dlt_backend_history_top表中系数的平均值。
（6）
筛选出dlt_backend_history_top_100表中取平均值向上的2位球号，平均值是dlt_backend_history_top_100表中系数的平均值。
如果第一位球号对应的系数有多个话，则需要拿这些相同系数的球号去dlt_backend_history_top_100表比较，最终取2位球号。

最终组成 5 +5*10 + 5*10 + 2*10 + 2 +2 = 129个球号。
从129个备选球中，按照“累计出现最多次，D7规选最大值，百期排行最靠前，历史排行为终裁”的阶梯原则，依次取出前3个。
具体是这样的：
首先，需要统计129个球号出现的次数，取出出现次数最多的球号，若出现次数排名前1的已经选出，而第3/4/5/6对应的出现次数一样，
则需要拿这四个球号分别去步骤（一）中记录的map取出对应的系数，如果没在map中出现，对应的系数和则为0，最后比较这四个球号对应的系数，
若第4位球号对应的系数和最大，其余相等，则取第4位的球号作为最后需要选出3个中的第2个；
此时还没有到达3个，则需要那这个3/5/6位的号码作为球号去dlt_backend__historytop_100 比较对应的系数，比较对应的系数；
如果还是没有筛选出，则需要那这个3/5/6号码作为球号去dlt_backend_historytop 比较对应的系数，最终组成3个球号。

中位：
（1）
先拿第一段的1个号码（后区首球）分别去d7表（按系数从大到小排列）作为主球号查询，取平均值（这一个球号作为主球号去d5表查询，对应的所有系数的平均值，离这个平均值最近且比它大的号码。）
和平均值向上2个球号，向下2个球号，共5个号球。第一个和第五个都需要处理毛边。
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_backend__history_top_100 表中比较，取系数高者
     * 2) 若经过dlt_backend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，就默认选择第一位
向下处理时：
比如第4/5/6/7这四个位置的号码对应的系数相同，需要选择最后的4位和5位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
如果结果是5位的系数最高，其余位置的系数相同；首先将5位对应的号码作为需要筛选出的5位号码的第4位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，去系数对应最大的一个球号作为需要筛选出的5位号码的第5位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位
向上处理时：
比如第1/2位和第1位向上的两个球号这四个位置的号码对应的系数相同，需要筛选最后的1位和2位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
结果是第2位的系数最高，其余位置的系数相同；首先将2位对应的号码作为需要筛选出的5位号码的第1位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，去系数对应最大的一个球号作为需要筛选出的5位号码的第2位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位
注意：这一步取出5个球号后，还需要记录这5个球号在d7表中对应的系数，最后记录一个包含球号和对应的系数的map。最后组成5个球号的map.
（2）
拿第二段的5个号码（下期前区）分别去d6表（按系数从大到小排列）作为主球号查询，取最大值向下10个号码，注意第10个号码对应的系数如果有多个话，需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_backend_history_top_100 表中比较，取系数高者
     * 2) 若经过dlt_backend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，就默认选择第一位
比如第9/10/11/12这四个位置的号码对应的系数相同，需要选择最后的9位和10位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
如果结果是10位的系数最高，其余位置的系数相同；首先将10位对应的号码作为需要筛选出的10位号码的第9位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，去系数对应最大的一个球号作为需要筛选出的10位号码的第10位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位
（3）
拿第三段的5个号码（上期前区）分别去d10表（按系数从大到小排列）作为主球号查询，取最大值向下10个号码，注意第10个号码对应的系数如果有多个话，需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_backend_history_top_100 表中比较，取系数高者
     * 2) 若经过dlt_backend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，就默认选择第一位
比如第9/10/11/12这四个位置的号码对应的系数相同，需要选择最后的9位和10位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
如果结果是10位的系数最高，其余位置的系数相同；首先将10位对应的号码作为需要筛选出的10位号码的第9位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，去系数对应最大的一个球号作为需要筛选出的10位号码的第10位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位
（4）
拿第四段的2个球号（上期后区）分别去D11（按系数从大到小排列）作为主球号查询，取最大值向下10个号码，注意第10个号码对应的系数如果有多个话，需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_backend__history_top_100 表中比较，取系数高者
     * 2) 若经过dlt_backend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，就默认选择第一位
比如第9/10/11/12这四个位置的号码对应的系数相同，需要选择最后的9位和10位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
如果结果是第11位的系数最高，其余位置的系数相同；首先将11位对应的号码作为需要筛选出的10位号码的第9位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，取系数对应最大的一个球号作为需要筛选出的10位号码的第10位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位。
（5）
筛选出dlt_backend_history_top表中取平均值向上的2位球号，平均值是dlt_backend_history_top表中系数的平均值。
（6）
筛选出dlt_backend_history_top_100表中取平均值向上的2位球号，平均值是dlt_backend_history_top_100表中系数的平均值。
如果第一位球号对应的系数有多个话，则需要拿这些相同系数的球号去dlt_backend_history_top_100表比较，最终取2位球号。

最终组成 5 +5*10 + 5*10 + 2*10 + 2 +2 = 129个球号。
从129个备选球中，按照“累计出现最多次，D7规选最大值，百期排行最靠前，历史排行为终裁”的阶梯原则，依次取出前3个。
具体是这样的：
首先，需要统计129个球号出现的次数，取出出现次数最多的球号，若出现次数排名前1的已经选出，而第3/4/5/6对应的出现次数一样，
则需要拿这四个球号分别去步骤（一）中记录的map取出对应的系数，如果没在map中出现，对应的系数和则为0，最后比较这四个球号对应的系数，
若第4位球号对应的系数和最大，其余相等，则取第4位的球号作为最后需要选出3个中的第2个；
此时还没有到达3个，则需要那这个3/5/6位的号码作为球号去dlt_backend__historytop_100 比较对应的系数，比较对应的系数；
如果还是没有筛选出，则需要那这个3/5/6号码作为球号去dlt_backend_historytop 比较对应的系数，最终组成3个球号。


低位：
（1）
先拿第一段的1个号码（后区首球）分别去d7表（按系数从大到小排列）作为主球号查询，取最小值向上5个号码，注意第1个号码对应的系数如果有多个话，需要处理毛边，
     * 1) 拿系数相同的号码先去dlt_backend__history_top_100 表中比较，取系数高者
     * 2) 若经过dlt_backend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，就默认选择第一位
向上处理时：
比如第1/2位和第1位向上的两个球号这四个位置的号码对应的系数相同，需要筛选最后的1位和2位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
结果是第2位的系数最高，其余位置的系数相同；首先将2位对应的号码作为需要筛选出的5位号码的第1位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，去系数对应最大的一个球号作为需要筛选出的5位号码的第2位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位
注意：这一步取出5个球号后，还需要记录这5个球号在d7表中对应的系数，最后记录一个包含球号和对应的系数的map。最后组成5个球号的map.
（2）
拿第二段的5个号码（下期前区）分别去d6表（按系数从大到小排列）作为主球号查询，取最大值向下10个号码，注意第10个号码对应的系数如果有多个话，需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_backend_history_top_100 表中比较，取系数高者
     * 2) 若经过dlt_backend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，就默认选择第一位
比如第9/10/11/12这四个位置的号码对应的系数相同，需要选择最后的9位和10位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
如果结果是10位的系数最高，其余位置的系数相同；首先将10位对应的号码作为需要筛选出的10位号码的第9位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，去系数对应最大的一个球号作为需要筛选出的10位号码的第10位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位
（3）
拿第三段的5个号码（上期前区）分别去d10表（按系数从大到小排列）作为主球号查询，取最大值向下10个号码，注意第10个号码对应的系数如果有多个话，需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_backend_history_top_100 表中比较，取系数高者
     * 2) 若经过dlt_backend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，就默认选择第一位
比如第9/10/11/12这四个位置的号码对应的系数相同，需要选择最后的9位和10位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
如果结果是10位的系数最高，其余位置的系数相同；首先将10位对应的号码作为需要筛选出的10位号码的第9位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，去系数对应最大的一个球号作为需要筛选出的10位号码的第10位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位
（4）
拿第四段的2个球号（上期后区）分别去D11（按系数从大到小排列）作为主球号查询，取最大值向下10个号码，注意第10个号码对应的系数如果有多个话，需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_backend__history_top_100 表中比较，取系数高者
     * 2) 若经过dlt_backend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，就默认选择第一位
比如第9/10/11/12这四个位置的号码对应的系数相同，需要选择最后的9位和10位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
如果结果是第11位的系数最高，其余位置的系数相同；首先将11位对应的号码作为需要筛选出的10位号码的第9位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，取系数对应最大的一个球号作为需要筛选出的10位号码的第10位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位。
（5）
筛选出dlt_backend_history_top表中取平均值向上的2位球号，平均值是dlt_backend_history_top表中系数的平均值。
（6）
筛选出dlt_backend_history_top_100表中取平均值向上的2位球号，平均值是dlt_backend_history_top_100表中系数的平均值。
如果第一位球号对应的系数有多个话，则需要拿这些相同系数的球号去dlt_backend_history_top_100表比较，最终取2位球号。

最终组成 5 +5*10 + 5*10 + 2*10 + 2 +2 = 129个球号。
从129个备选球中，按照“累计出现最多次，D7规选最大值，百期排行最靠前，历史排行为终裁”的阶梯原则，依次取出前3个。
具体是这样的：
首先，需要统计129个球号出现的次数，取出出现次数最多的球号，若出现次数排名前1的已经选出，而第3/4/5/6对应的出现次数一样，
则需要拿这四个球号分别去步骤（一）中记录的map取出对应的系数，如果没在map中出现，对应的系数和则为0，最后比较这四个球号对应的系数，
若第4位球号对应的系数和最大，其余相等，则取第4位的球号作为最后需要选出3个中的第2个；
此时还没有到达3个，则需要那这个3/5/6位的号码作为球号去dlt_backend__historytop_100 比较对应的系数，比较对应的系数；
如果还是没有筛选出，则需要那这个3/5/6号码作为球号去dlt_backend_historytop 比较对应的系数，最终组成3个球号。



