帮我在写一个算法，推测前区随球。
入参有高位/中位/低位，  3个号码（看好） + 5个号码（上期前区） + 2个号码（上期后区）。
高位：
（一）
取前三个号码中的第一个号码作为主球号去d5（按系数从大到小排列的 ） 表中查询，取最大值向下 11 个球号，注意第11位的号码对应的系数如果有多个，则需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_frontend_history_top_100表中比较，取系数高者
     * 2) 若经过dlt_frontend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，，就默认选择第一位。
比如第10/11/12/13这四个位置的号码对应的系数相同，需要选择最后的10位和11位两个号码，则需要那这4个号码作为主球号去dlt_history_frontend_top_100 比较对应的系数，
如果结果是12位的系数最高，其余位置的系数相同；首先将12位对应的号码作为需要筛选出的11位号码的第十位；
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数，取系数对应最大的一个球号作为需要筛选出的17位号码的第十七位；
若是经过dlt_frontend_history_top比较还是无法筛选出，就默认选择第一位。
注意：这一步取出11个球号后，还需要记录这11个球号在d5表中对应的系数，最后记录一个包含球号和对应的系数的map（11个球号）。
（二）
拿第二块的5个球号，也就是上期前区号码对应的5个球号分别去d9（按系数从大到小排列的 ） 表中查询，取最大值向下 30 个球号，注意第30位的号码对应的系数如果有多个，则需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_frontend_history_top_100表中比较，取系数高者
     * 2) 若经过dlt_frontend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，，就默认选择第一位。
比如第29/30/31/32这四个位置的号码对应的系数相同，需要选择出最后的29位和30位两个号码，则需要那这4个号码作为主球号去dlt_frontend_history_top_100 比较对应的系数，
如果结果是31位的系数最高，其余位置的系数相同；首先将31位对应的号码作为需要筛选出的30位号码的第29位；
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数，取系数对应最大的一个球号作为需要筛选出的30位号码的第30位；
若是经过dlt_frontend_history_top比较还是无法筛选出，就默认选择第一位
（三）
筛选出dlt_history_frontend_top表中取平均值向上的3位球号
（四）
筛选出dlt_history_frontend_top_100表中取平均值向上的3位球号。如果第一个位置对应的系数有多个，这一步也需要处理毛边；
若3个号码中第一个位置对应的系数有多个，需要拿这多个球号去dlt_frontend__history_top比较系数值大的号码作为最终的号码。
（五）
拿第三块的2个球号，也就是上期后区号码对应的2个球号分别去d12（按系数从大到小排列的 ） 表中查询，取最大值向下 30 个球号，注意第30位的号码对应的系数如果有多个，则需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_frontend_history_top_100表中比较，取系数高者
     * 2) 若经过dlt_frontend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，，就默认选择第一位。
比如第29/30/31/32这四个位置的号码对应的系数相同，需要选择出最后的29位和30位两个号码，则需要那这4个号码作为主球号去dlt_frontend_history_top_100 比较对应的系数，
如果结果是31位的系数最高，其余位置的系数相同；首先将31位对应的号码作为需要筛选出的30位号码的第29位；
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数，取系数对应最大的一个球号作为需要筛选出的30位号码的第30位；
若是经过dlt_frontend_history_top比较还是无法筛选出，就默认选择第一位
（六）
取第一块的3个球号。
最终最取11+5*30+3+3+2*30+3 = 230个球。

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

中位：
（一）
取前三个号码中的第一个号码作为主球号去d5（按系数从大到小排列的 ） 表中查询，取平均值（这一个球号作为主球号去d5表查询，对应的所有系数的平均值，离这个平均值最近且比它大的号码。）和平均值向上5个球号，向下5个球号，共11个号球。
注意第一位和第11位的号码对应的系数如果有多个，则需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_frontend_history_top_100表中比较，取系数高者
     * 2) 若经过dlt_frontend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，，就默认选择第一位。
处理下方的毛边时：
比如第10/11/12/13这四个位置的号码对应的系数相同，需要选择最后的10位和11位两个号码，则需要那这4个号码作为主球号去dlt_history_frontend_top_100 比较对应的系数，
如果结果是12位的系数最高，其余位置的系数相同；首先将12位对应的号码作为需要筛选出的11位号码的第十位；
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数，取系数对应最大的一个球号作为需要筛选出的17位号码的第十七位；
若是经过dlt_frontend_history_top比较还是无法筛选出，就默认选择第一位。
处理上方的毛边：
比如第1/2位和第1位向上的两个球号这四个位置的号码对应的系数相同，需要筛选最后的1位和2位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
结果是第2位的系数最高，其余位置的系数相同；首先将2位对应的号码作为需要筛选出的11位号码的第1位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，去系数对应最大的一个球号作为需要筛选出的11位号码的第2位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位
注意：这一步取出11个球号后，还需要记录这11个球号在d5表中对应的系数，最后记录一个包含球号和对应的系数的map（11个球号）。
（二）
拿第二块的5个球号，也就是上期前区号码对应的5个球号分别去d9（按系数从大到小排列的 ） 表中查询，取最大值向下 30 个球号，注意第30位的号码对应的系数如果有多个，则需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_frontend_history_top_100表中比较，取系数高者
     * 2) 若经过dlt_frontend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，，就默认选择第一位。
比如第29/30/31/32这四个位置的号码对应的系数相同，需要选择出最后的29位和30位两个号码，则需要那这4个号码作为主球号去dlt_frontend_history_top_100 比较对应的系数，
如果结果是31位的系数最高，其余位置的系数相同；首先将31位对应的号码作为需要筛选出的30位号码的第29位；
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数，取系数对应最大的一个球号作为需要筛选出的30位号码的第30位；
若是经过dlt_frontend_history_top比较还是无法筛选出，就默认选择第一位
（三）
筛选出dlt_history_frontend_top表中取平均值向上的3位球号
（四）
筛选出dlt_history_frontend_top_100表中取平均值向上的3位球号。如果第一个位置对应的系数有多个，这一步也需要处理毛边；
若3个号码中第一个位置对应的系数有多个，需要拿这多个球号去dlt_frontend__history_top比较系数值大的号码作为最终的号码。
（五）
拿第三块的2个球号，也就是上期后区号码对应的2个球号分别去d12（按系数从大到小排列的 ） 表中查询，取最大值向下 30 个球号，注意第30位的号码对应的系数如果有多个，则需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_frontend_history_top_100表中比较，取系数高者
     * 2) 若经过dlt_frontend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，，就默认选择第一位。
比如第29/30/31/32这四个位置的号码对应的系数相同，需要选择出最后的29位和30位两个号码，则需要那这4个号码作为主球号去dlt_frontend_history_top_100 比较对应的系数，
如果结果是31位的系数最高，其余位置的系数相同；首先将31位对应的号码作为需要筛选出的30位号码的第29位；
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数，取系数对应最大的一个球号作为需要筛选出的30位号码的第30位；
若是经过dlt_frontend_history_top比较还是无法筛选出，就默认选择第一位
（六）
取第一块的3个球号。
最终最取11+5*30+3+3+2*30+3 = 230个球。

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

低位：
（一）
取前三个号码中的第一个号码作为主球号去d5（按系数从大到小排列的 ） 表中查询，取最小值向上第3个（含第三个球）至第13个，共11个球。
注意第一位和第11位的号码对应的系数如果有多个，则需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_frontend_history_top_100表中比较，取系数高者
     * 2) 若经过dlt_frontend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，，就默认选择第一位。
处理下方的毛边时：
比如第10/11/12/13这四个位置的号码对应的系数相同，需要选择最后的10位和11位两个号码，则需要那这个号码作为主球号去dlt_history_frontend_top_100 比较对应的系数，
如果结果是12位的系数最高，其余位置的系数相同；首先将12位对应的号码作为需要筛选出的11位号码的第十位；
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数，取系数对应最大的一个球号作为需要筛选出的17位号码的第十七位；
若是经过dlt_frontend_history_top比较还是无法筛选出，就默认选择第一位。
处理上方的毛边
比如第1/2位和第1位向上的两个球号这四个位置的号码对应的系数相同，需要筛选最后的1位和2位两个号码，则需要那这四个号码作为主球号去dlt_backend_history_top_100  表比较对应的系数，
结果是第2位的系数最高，其余位置的系数相同；首先将2位对应的号码作为需要筛选出的11位号码的第1位；
再拿其余3个位置的号码作为主球号去 dlt_backend_history_top里比较对应的点系数，去系数对应最大的一个球号作为需要筛选出的11位号码的第2位；
若是经过dlt_backend_history_top比较还是无法筛选出，就默认选择第一位
注意：这一步取出11个球号后，还需要记录这11个球号在d5表中对应的系数，最后记录一个包含球号和对应的系数的map（11个球号）。
（二）
拿第二块的5个球号，也就是上期前区号码对应的5个球号分别去d9（按系数从大到小排列的 ） 表中查询，取最大值向下 30 个球号，注意第30位的号码对应的系数如果有多个，则需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_frontend_history_top_100表中比较，取系数高者
     * 2) 若经过dlt_frontend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，，就默认选择第一位。
比如第29/30/31/32这四个位置的号码对应的系数相同，需要选择出最后的29位和30位两个号码，则需要那这4个号码作为主球号去dlt_frontend_history_top_100 比较对应的系数，
如果结果是31位的系数最高，其余位置的系数相同；首先将31位对应的号码作为需要筛选出的30位号码的第29位；
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数，取系数对应最大的一个球号作为需要筛选出的30位号码的第30位；
若是经过dlt_frontend_history_top比较还是无法筛选出，就默认选择第一位
（三）
筛选出dlt_history_frontend_top表中取平均值向上的3位球号
（四）
筛选出dlt_history_frontend_top_100表中取平均值向上的3位球号。如果第一个位置对应的系数有多个，这一步也需要处理毛边；
若3个号码中第一个位置对应的系数有多个，需要拿这多个球号去dlt_frontend__history_top比较系数值大的号码作为最终的号码。
（五）
拿第三块的2个球号，也就是上期后区号码对应的2个球号分别去d12（按系数从大到小排列的 ） 表中查询，取最大值向下 30 个球号，注意第30位的号码对应的系数如果有多个，则需要处理毛边，
处理毛边的规则是：
     * 1) 拿系数相同的号码先去dlt_frontend_history_top_100表中比较，取系数高者
     * 2) 若经过dlt_frontend_history_top_100还是无法筛选出，相同的号码先去dlt_frontend_history_top表比较，取系数高者
     * 3) 若仍无法区分，，就默认选择第一位。
比如第29/30/31/32这四个位置的号码对应的系数相同，需要选择出最后的29位和30位两个号码，则需要那这4个号码作为主球号去dlt_frontend_history_top_100 比较对应的系数，
如果结果是31位的系数最高，其余位置的系数相同；首先将31位对应的号码作为需要筛选出的30位号码的第29位；
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数，取系数对应最大的一个球号作为需要筛选出的30位号码的第30位；
若是经过dlt_frontend_history_top比较还是无法筛选出，就默认选择第一位
（六）
取第一块的3个球号。
最终最取11+5*30+3+3+2*30+3 = 230个球。

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


处理毛边的描述的表可能有问题，是先dlt_frontend_history_top_100再dlt_frontend_history_top
