企业级循环处理方案-减少穷举

在生产环境下面对纷繁的业务处理场景,我们知道要处理很多逻辑代码,其中有个叫枚举(也称穷举),当处理这类事务时,会产生大量的循环执行,而循环是最耗CPU的,大量的迭代计算,可直接拉低计算速度,怎么处理这类问题呢?

对于事务的不定项的选择几率,都会有一定的规律,比如说事件的概率发生,根据概率论的知识,我们可以去统计穷举各项的频率,按其大小依次排列,这样前面的枚举项就可消费大部分数据,剩下的低概率枚举项就会以最小的执行次数执行。

比如说有1000000条数据,枚举项有50个,假如平均25次能找到匹配项,就需要运行25000000次(2.5*10的7次方)

换种思路:假如第一枚举项是是30%,2是25%,3是20%这样前三项就消费750000*3+250000*25=8500000(8.5*10的6次方)

直接降一个数量级的执行次数,当然这些都是假设,是不太准的

但是思路就一样,就是将发生概率高的事件统计优先处理,这既符合生活规律,又符合事务发展的客观规律。

应用场景就太多了,例子:

例子一:话说网络运营商想分析用户的上网行为分析。他不会将网络上的各种资源都先收集一份,然后再去匹配每个用户的某时的上网行为 

那样做机器也会累的。所以先样本调查,然后分析大部分的用户行为特征,根据样本获取统计资源,然后这样以最小的资源消费最大的数据,剩下的小概率事件。

例子二:百度搜索词条的建立,也会寻找样本,统计大概率数据精准处理,作为频繁搜索词缓存,让搜索快速而精准,当然那其他的陌生词条利用机器学再处理。每天计算词条的权重,这样以权重排列,这样就会让大概率更加大概率,再次节约速度。

总而言之,事务的发展规律都是一样的,总会有大概率事件,事物的发展规律都是一样的。符合二八定律。

学会一门技术靠的是努力,精通一门技术靠的是领悟。感受生活,感受万物,大道归一。

时间: 2025-01-02 02:44:27

企业级循环处理方案-减少穷举的相关文章

C#。3.1 循环(叠加、穷举)

循环. for 循环 嵌套的应用, 迭代.穷举 一.迭代法 每次循环都是从上次运算结果中获得数据,本次运算的结果都是要为下次运算做准备.例:1.100以内所有数的和. int sum = 0; for (int i = 1; i <= 100; i++) { sum = sum + i; } Console.WriteLine(sum); 2.求年龄.//求年龄:有6个小孩子排在一起,问第一个多大年龄,他说比第二个小2岁,问第二个多大年龄,他说比第三个小2岁,以此类推,问第6个多大年龄,他说自己

循环语句 for 循环的嵌套 、穷举、迭代 while

for 循环的嵌套: Console.Write("请输入一个数字:"); int n = Convert.ToInt16(Console.ReadLine()); for (int i = 1; i <= n; i++)//i从1开始递增到n结束 { for (int t = 1; t <= i; t++)//循环条件与i有关,当i=1,t满足条件,打印一个"★", {  //t递增到不再满足条件<=i,则不再进行循环,而执行下一个命令打印换行&

作业:for循环,迭代法和穷举法

                                                for()循环 四要素:初始条件,循环条件,状态改变,循环体. 执行过程:初始条件--循环条件--循环体--状态改变--循环条件.... 注意:for的小括号里面用分号隔开,for的小括号后不要加分号. for的嵌套. 应用:迭代法,穷举法. 一.迭代法:有一定规律. 每次循环都是从上次运算结果中获得数据,本次运算的结果都是要为下次运算做准备. 第一题:求100以内所有数的和. 第二题:求阶乘!(6的

2017.02.24C# 跳转语句,迭代法,穷举法,异常语句处理。

一,跳转语句(1)break: 代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace @break 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 Int32 a = 0; 13 for(a=0;a<25;a++) 14 { 15 Consol

2016年10月10日--穷举、迭代、while循环

穷举 将所有可能性全部全部走一遍,使用IF筛选出满足的情况 练习: 1.单位给发了一张150元购物卡, 拿着到超市买三类洗化用品. 洗发水15元,香皂2元,牙刷5元. 求刚好花完150元,有多少种买法, 没种买法都是各买几样? int i = 0; int j = 0; for (int x = 0; x <= 10; x++) { for (int y = 0; y <= 30; y++) { for (int z = 0; z <= 75; z++) { j++; if (x * 1

15-07-03 语句- for () 循环语句-穷举法

for()  穷举法 用循环把各种可能的情况都走一遍,然后用if条件把满足要求的结果给筛选出来. 例如:1.找100以内的偶数 for (int i = 0; i <= 100; i++) { if (i % 2 == 0) { Console.WriteLine(i); } } 2.小明单位发了50元的购物卡,他到超市买洗化用品,一是牙刷(5元),二是香皂(2元),三是牙膏(10元)怎么可以正好把五十元花完. for (int ys = 0; ys <= 10; ys++) { for (i

for循环的应用:迭代法和穷举法

for()循环.四要素:初始条件,循环条件,状态改变,循环体.执行过程:初始条件--循环条件--循环体--状态改变--循环条件....注意:for的小括号里面分号隔开,for的小括号后不要加分号.for的嵌套.应用:迭代法,穷举法.一.迭代法:有一定规律. 每次循环都是从上次运算结果中获得数据,本次运算的结果都是要为下次运算做准备. 二.穷举法:用循环把各种可能的情况都给走一遍,然后用if条件把满足要求的结果给筛选出来.

for循坏的穷举与迭代,while、do while循环

for循环 穷举:所有情况走一遍,使用if筛选出符合的情况. 1.单位给发了一张150元购物卡,拿着到超市买三类洗化用品.洗发水15元,香皂2元,牙刷5元.求刚好花完150元,有多少种买法,没种买法都是各买几样? int d=0; int e = 0; for (int a = 1; a <= 10;a++ ) { for (int b = 1; b <= 30;b++ ) { for (int c = 1; c <= 75;c++ ) { if(a*15+b*5+c*2==150) {

循环嵌套,while循环,穷举迭代循环

一.循环嵌套 简单的就是说,在一个for循环里嵌入多个小for循环. 其中,在打矩形.三角形和乘法口诀表之类的题目中,大for循环一般表示的是行数,其余的小for循环式每一行中的内容. 二.while循环 1,格式 (1) 初始条件: while(循环条件) { 循环体: 状态改变: } 当循环体不满足循环条件时,才能跳出所处的for循环. (2) 初始条件: do { 循环体: 状态改变: } while(循环条件) 其表示才开始不管满不满足循环条件,限制性一次,如果不符合循环条件,就跳出循环