Files
cpzs-backend/算法第一步.txt
2025-11-04 17:18:21 +08:00

129 lines
14 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

帮我在写一个算法,推测前区首球。
入参有高位/中位/低位5个前区号码加2个后区号码。
分三种情况:
如果是高位:
step1.先拿这5个前区号码分别作为主球号到d9d9表中的系数需要先按系数从大到小排列表去查询系数最大的前17位注意第17位的号码对应的系数如果有多个则需要处理毛边
处理毛边的规则是:
* 1) 拿系数相同的号码先去dlt_frontend__historytop_100 表中比较,取系数高者
* 2) 若经过dlt_frontend_history_top_100还是无法筛选出相同的号码先去dlt_frontend_history_top表比较取系数高者
* 3) 若仍无法区分,就默认选择第一位
比如第16/17/18/19这四个位置的号码对应的系数相同需要选择最后需要筛选出的17位号码的16位和17位两个号码则需要那这4个号码作为主球号去dlt_frontend__historytop_100 比较对应的系数,
如果结果是18位的系数最高其余位置的系数相同首先将18位对应的号码作为需要筛选出的17位号码的第十六位
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数去系数对应最大的一个球号作为需要筛选出的17位号码的第十七位
若是经过dlt_frontend_history_top比较还是无法筛选出就默认选择第一位
注意这一步取出17个球号后还需要记录这17个球号在d9表中对应的系数最后记录一个包含球号和对应的系数的map。最后组成85个球号的map
step2.筛选出dlt_frontend__historytop表中去系数最大的3个值作为对应的系数
step3.筛选出dlt_frontend__historytop_100表中去系数最大的3个值作为对应的系数这一步也需要处理毛边
若3个号码中第三个位置对应的系数有多个需要拿这多个球号去dlt_frontend__historytop比较系数值大的号码作为最终的号码
若经过dlt_frontend__historytop还是无法选出就默认选择第一位
step4.最后拿这2个后区号码分别作为主球号到d12表d12表中的系数需要先按系数从大到小排列去查询系数最大的前17位注意第17位的号码对应的系数如果有多个则需要处理毛边
处理毛边的规则是:
* 1) 拿系数相同的号码先去dlt_frontend__historytop_100 表中比较,取系数高者
* 2) 若经过dlt_frontend_history_top_100还是无法筛选出相同的号码先去dlt_frontend_history_top表比较取系数高者
* 3) 若仍无法区分,就默认选择第一位
比如第16/17/18/19这四个位置的号码对应的系数相同需要选择最后的16位和17位两个号码则需要那这4个号码作为主球号去dlt_frontend__historytop_100 比较对应的系数,
如果结果是18位的系数最高其余位置的系数相同首先将18位对应的号码作为需要筛选出的17位号码的第十六位
则需要那这个号码作为主球号去dlt_frontend__historytop_100 比较对应的系数,
若是经过dlt_frontend_history_top比较还是无法筛选出就默认选择第一位
最后组成5*17 + 3 + 3 + 2*17 = 125个号码
从125个备选球号中按照“累计出现最多次D9系数最大和百期排行最靠前历史排行为终裁”的阶梯原则依次取出前12个。
具体是这样的:
首先需要统计125个球号出现的次数取出出现次数最多的球号若出现次数排名前十的已经选出而第11/12/13/14对应的出现次数一样
则需要拿这四个球号分别去step1中记录的map取出对应的系数因为1个球号在map中可能有有多个需要记录系数和如果1次都没出现对应的系数和则为0最后比较这个球号对应的系数和
若14位球号对应的系数和最大其余相等则取第14位的球号最为12个中的第11个
此时还没有到达12个则需要那这个11/12/13号码作为球号去dlt_frontend__historytop_100 比较对应的系数,比较对应的系数;
如果还是没有筛选出则需要那这个11/12/13号码作为球号去dlt_frontend__historytop 比较对应的系数最终组成12个球号。
如果是中位:
step1.先拿这5个前区号码分别作为主球号到d9d9表中的系数需要先按系数从大到小排列表取平均值每个球号作为主球号去d9表查询对应的所有系数的平均值离这个平均值最近且比它大的号码。下面的平均值定义也一样
向上8个球向下8个球组成17个球号注意此时第1位和第17位的号码都需要处理毛边
处理毛边的规则是:
* 1) 拿系数相同的号码先去dlt_frontend__historytop_100 表中比较,取系数高者
* 2) 若经过dlt_history__frontend_top_100还是无法筛选出相同的号码先去dlt_frontend_history_top表比较取系数高者
* 3) 若仍无法区分,则就默认选择第一位
处理下方毛边时:
比如第16/17/18/19这四个位置的号码对应的系数相同需要选择最后的16位和17位两个号码则需要那这4个号码作为主球号去dlt_frontend__historytop_100 比较对应的系数,
如果结果是18位的系数最高其余位置的系数相同首先将18位对应的号码作为需要筛选出的下方8位号码的第7位
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数去系数对应最大的一个球号作为需要筛选出的下发8位号码的第8位
若是经过dlt_frontend_history_top比较还是无法筛选出就默认选择第一位
处理上方毛边时:
比如 第1/2和第一位上面的两个球号 这四个位置的号码对应的系数相同需要选择最后的第1位和第2位两个号码则需要那这4个号码作为主球号去dlt_frontend__historytop_100 比较对应的系数,
如果结果是第2位系数最高其余位置的系数相同首先将2位对应的号码作为需要筛选出的8位号码的第1位
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数去系数对应最大的一个球号作为需要筛选出的8位号码的第2位
若是经过dlt_frontend_history_top比较还是无法筛选出就默认选择第一位
注意这一步取出17个球号后还需要记录这17个球号在d9表中对应的系数最后记录一个包含球号和对应的系数的map。最后组成85个球号的map
step2.筛选出dlt_frontend__history_top表中去系数最大的3个值作为对应的系数
step3.筛选出dlt_frontend__history_top_100表中去系数最大的3个值作为对应的系数这一步也需要处理毛边
若3个号码中第三个位置对应的系数有多个需要拿这多个球号去dlt_frontend__historytop比较系数值大的号码作为最终的号码
若经过dlt_frontend__historytop还是无法选出就默认选择第一位
step4.最后拿这2个后区号码分别作为主球号到d12表d12表中的系数需要先按系数从大到小排列去查询系数最大的前17位注意此时第1位和第17位的号码都需要处理毛边
处理毛边的规则是:
* 1) 拿系数相同的号码先去dlt_frontend__historytop_100 表中比较,取系数高者
* 2) 若经过dlt_frontend_history_top_100还是无法筛选出相同的号码先去dlt_frontend_history_top表比较取系数高者
* 3) 若仍无法区分,就默认选择第一位
处理下方毛边时:
比如第16/17/18/19这四个位置的号码对应的系数相同需要选择最后的16位和17位两个号码则需要那这4个号码作为主球号去dlt_frontend__historytop_100 比较对应的系数,
如果结果是18位的系数最高其余位置的系数相同首先将18位对应的号码作为需要筛选出的下方8位号码的第7位
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数去系数对应最大的一个球号作为需要筛选出的下发8位号码的第8位
若是经过dlt_frontend_history_top比较还是无法筛选出就默认选择第一位
处理上方毛边时:
比如 第1/2和第一位上面的两个球号 这四个位置的号码对应的系数相同需要选择最后的第1位和第2位两个号码则需要那这4个号码作为主球号去dlt_frontend__historytop_100 比较对应的系数,
如果结果是第2位系数最高其余位置的系数相同首先将2位对应的号码作为需要筛选出的8位号码的第1位
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数去系数对应最大的一个球号作为需要筛选出的8位号码的第2位
若是经过dlt_frontend_history_top比较还是无法筛选出就默认选择第一位
最后组成5*17 + 3 + 3 + 2*17 = 125个号码
从125个备选球号中按照“累计出现最多次D9系数最大和百期排行最靠前历史排行为终裁”的阶梯原则依次取出前12个。
具体是这样的:
首先需要统计125个球号出现的次数取出出现次数最多的球号若出现次数排名前十的已经选出而第11/12/13/14对应的出现次数一样
则需要拿这四个球号分别去step1中记录的map取出对应的系数因为1个球号在map中可能有有多个需要记录系数和如果1次都没出现对应的系数和则为0最后比较这个球号对应的系数和
若14位球号对应的系数和最大其余相等则取第14位的球号最为12个中的第11个
此时还没有到达12个则需要那这个11/12/13号码作为球号去dlt_frontend__historytop_100 比较对应的系数,比较对应的系数;
如果还是没有筛选出则需要那这个11/12/13号码作为球号去dlt_frontend__historytop 比较对应的系数最终组成12个球号。
如果是低位:
step1.先拿这5个前区号码分别作为主球号到d9表d9表中的系数需要先按系数从大到小排列取最小值向上16个球组成17个球号注意此时第1位号码17个中系数最大值需要处理毛边
处理毛边的规则是:
* 1) 拿系数相同的号码先去dlt_frontend__historytop_100 表中比较,取系数高者
* 2) 若经过dlt_frontend_history_top_100还是无法筛选出相同的号码先去dlt_frontend_history_top表比较取系数高者
* 3) 若仍无法区分,就默认选择第一位
比如 第1/2和第一位上面的两个球号 这四个位置的号码对应的系数相同需要选择最后的第1位和第2位两个号码则需要那这4个号码作为主球号去dlt_frontend__historytop_100 比较对应的系数,
如果结果是第2位系数最高其余位置的系数相同首先将2位对应的号码作为需要筛选出的17位号码的第十六位
再拿其余3个位置的号码作为主球号去 dlt_frontend_history_top里比较对应的点系数去系数对应最大的一个球号作为需要筛选出的17位号码的第十七位
若是经过dlt_frontend_history_top比较还是无法筛选出就默认选择第一位
注意这一步取出17个球号后还需要记录这17个球号在d9表中对应的系数最后记录一个包含球号和对应的系数的map。最后组成85个球号的map
step2.筛选出dlt_frontend__history_top表中去系数最大的3个值作为对应的系数
step3.筛选出dlt_frontend__history_top_100表中去系数最大的3个值作为对应的系数这一步也需要处理毛边
若3个号码中第三个位置对应的系数有多个需要拿这多个球号去dlt_frontend_historytop比较系数值大的号码作为最终的号码
若经过dlt_frontend__historytop还是无法选出就默认选择第一位
step4.最后拿这2个后区号码分别作为主球号到d12表d12表中的系数需要先按系数从大到小排取最小值向上16个球组成17个球号注意此时第1位需要处理毛边
处理毛边的规则是:
* 1) 拿系数相同的号码先去dlt_frontend__historytop_100 表中比较,取系数高者
* 2) 若经过dlt_frontend_history_top_100还是无法筛选出相同的号码先去dlt_frontend_history_top表比较取系数高者
* 3) 若仍无法区分,就默认选择第一位
比如 第1/2和第一位上面的两个球号 这四个位置的号码对应的系数相同需要选择最后的第1位和第2位两个号码则需要那这4个号码作为主球号去dlt_frontend__history_top_100 比较对应的系数,
如果结果是18位的系数最高其余位置的系数相同首先将18位对应的号码作为需要筛选出的17位号码的第十六位
则需要那这个号码作为主球号去dlt_frontend__historytop_100 比较对应的系数,
若是经过dlt_frontend_history_top比较还是无法筛选出就默认选择第一位
最后组成5*17 + 3 + 3 + 2*17 = 125个号码
从125个备选球号中按照“累计出现最多次D9系数最大和百期排行最靠前历史排行为终裁”的阶梯原则依次取出前12个。
具体是这样的:
首先需要统计125个球号出现的次数取出出现次数最多的球号若出现次数排名前十的已经选出而第11/12/13/14对应的出现次数一样
则需要拿这四个球号分别去step1中记录的map取出对应的系数因为1个球号在map中可能有有多个需要记录系数和如果1次都没出现对应的系数和则为0最后比较这个球号对应的系数和
若14位球号对应的系数和最大其余相等则取第14位的球号最为12个中的第11个
此时还没有到达12个则需要那这个11/12/13号码作为球号去dlt_frontend__historytop_100 比较对应的系数,比较对应的系数;
如果还是没有筛选出则需要那这个11/12/13号码作为球号去dlt_frontend__historytop 比较对应的系数最终组成12个球号。