【分分3分快3官网】一个从四秒到10毫秒 花了1年的算法问题?

  • 时间:
  • 浏览:1
  • 来源:彩神快3官方-彩神大发快三

特别注意:本文的算法问题报告 图片对统统有专业计算机的人分分3分快3官网来说,很简单,以后注意看文章的人物背景。

五一后的第一周,原应着搬家腰扭伤了,没注意原应压迫神经,躺在床上休息了好几天。统统有没事就挂 QQ,两个网民视频 总爱 问了我两个算法问题报告 图片。统统有有了这篇文章。感触陷得,统统有特发此文,以纪念和写给新亲戚亲戚一帮人,以及那此热爱编程的非专业人事。所有人原应着技术含量很低,但都很真实。我虽然我只花了很少的时间,但避免了你这人网民视频 困惑了1年的问题报告 图片,你这人网民视频 倒是特别感激,而我倒是感觉特别心塞。那亲戚亲戚一帮人喝杯茶,看看你这人过程吧。

1.人物背景

你这人网民视频 我也是以后聊天才了解到他的情况汇报。他是两个1977年出生的湖北网民视频 ,为了分析相关数据,学精了VB.NET,你这人年龄的人还学了你这人,真的不容易,分分3分快3官网之都能不能 够用VB.NET开发比较多样化的数据分析界面。我我虽之以后了解到那此,自愧不如啊。统统有对算法问题报告 图片,你这人亲戚亲戚一帮人遇到困难,也都能不能 理解。

我我虽然你这人亲戚亲戚一帮人很早分分3分快3官网可是的QQ好友,也知道都是做数据分析,所有我有新的算法方面的文章会发给他看,偶尔聊一下,但如此 问过我问题报告 图片。上个月发表了一篇文章:机器学习之PageRank算法应用与C#实现(1)算法介绍,发表之前 ,他看了后,才问我你这人问题报告 图片。

我:我我虽然我也是个半吊子,对算法可是精通,可是业余研究感兴趣而已。。说实话我须我你要写个二分搜索,我一时半会还搞不定,但我看看论文和资料,都能不能 写个马尔可夫链原应着贝叶斯类似于的。。。你这人东西何如说呢,在统统有问题报告 图片中,空间强度和时间强度,特别是在硬件条件如此 富裕的情况汇报下,都能不能 考虑得更少你这人。。当然这里绝对都是说算法是如此 用的,可是对统统有非常普通的人来说,研究的规模太小,以后原应着经验和特殊原应,如此 算法和数据社会形态基础,只有不考虑了,以避免实际问题报告 图片为主吧。

2.原始问题报告 图片

该网民视频 的原始问题报告 图片是两个的,我从QQ聊天记录里直接Copy过来:

有两组随机生成的(0~99999)Int32数据A和B,将A按顺序判断在B中算不算趋于稳定并记录在Boolean型的C中,我分别尝试了Array与List(Of T),在VS2010下以我的破电脑的强度Array至少须要4秒,而List(Of T)则要24秒,以下是我用Array和List(of T)的代码,请高手指点, 顺便问下算不算秒杀的措施。(注:他的VB代码我你要不贴了,思路知道就都能不能 了)

我不看了看用那此措施避免,谢谢

一帮人说用哈希,可惜太满再再,也没百度到

他的开发环境是VS2010 + VB.NET

我收到他的消息的之前 是正在用手机QQ上的,他还贴了段VB的代码,我是比较反感直接贴代码的人。不过当时躺在床上,也没啥事,好奇嘛,就仔细看了一下你这人问题报告 图片,代码真的没看。

3.避免问题报告 图片的过程

原应着是手机上的,统统有也没开电脑敲代码。就想了一下。

网民视频 的原始代码中的比较都是使用Array.IndexOf,都能不能 想象10万的数组,强度慢也正常 。

1.首先我是把哈希给否定了的。我我虽之以后想起来,是我错了,我以为他说的哈希是把每个元素求哈希值后对比,这都是多此一举么。。两个计算哈希就要时间,还是要比较。。。那太满再 呢。。。以后我才想到,他说的原应着是“哈希表”,这是后话,不提了,哈希表你这人措施何如样真不知道,应该也还都能不能 吧;但还是先看看我的措施。

2我们都都都当时先给了他两个初步的方案,避免问题报告 图片有之前 都是一步到位的,先试试看咯。我的想法是使用IndexOf查找会浪费统统有时间。统统有,你先把B排序,原应着B在实际构造过程中就都能不能 进行排序存储,以后A依次对比的之前 ,采用二分法搜索,甚至有条件,A也都能不能 先排序,以后搜索的之前 记录起点,二分法搜索,两个都能不能 节省不少时间。A和B排序的问题报告 图片,我我虽然根据他的情况汇报,是都能不能 在实际过程中就排序好的,而都是生成后排序,两个就更费时间了。

你这人网民视频 也很如此快了 了 ,过了至少两个小时,测试出来说:“我用的随机数测试了下,强度提升相当明显,比Array.indexof要快多了”

3.上面手机沟通不方便,也就随便说了一下,没想到他放慢做出来了。我虽然快了统统有,但具体时间我也没问。以后我洗澡的之前 ,感觉你这人问题报告 图片都是如此 回事,我之前 貌似也做过类似于的,应该还有放慢的措施。以后洗澡过程中,思考了若干秒。。。两个思路都是了,我虽然你这人想法我感觉很土,但我须要实际效果应该很好,统统有洗完澡,马上开电脑,跟网民视频 说了一下思路,考虑到他有原应着无法理解算法的伪代码原应着比较严格的表述(实际上真真不知道该何如严格表述),统统有就直接打了两个比方,在这里为了方便亲戚亲戚一帮人理解,我先至少写了个思路,应该会看得懂吧。至于问题报告 图片中的记录在C中,我具体没问他何如记录,我我虽然这和问题报告 图片关系不大,核心在前面何如选折 算不算包括:

我给那位网民视频 是如此 拈连的(原始特别乱,我写博客的之前 稍微架构设计 了下),真不知道亲戚亲戚一帮人有如此 歧义,感觉还是上面的伪代码容易理解,以后开心的是,你这人网民视频 还是理解了 :

A数组:不管,随意,可是用排序,
B数组:[5,2,4,1],假设最大为5,注意如此

3
 
初始化两个长度为5(最大数)的布尔数组:a[1],[2],[3],[4],[5]
循环B,将B中值作为a的下标,对应位置标记为true,类似于
a[5]= true;
a[2]= true;
a[4]= true;
a[1]= true;
注意a[3]如此

,为false
 
最后循环A,直接对比下标,原应着A={2,3},如此

:
a[2]=true,说明趋于稳定,则C[2]=true,到C中标记true
a[3]=false,则如此

。C中标记为false
原应着你最大为99999,如此

你这人数组要如此

长我你要直接设置为99999,浪费你这人空间;
原应着你业务中都能不能


直接求出最大值,那是最好的了。所有人试一试。

你这人思路理解了非常简单。你这人网民视频 也放慢理解了,过了一会就把他的结果真不知道了。

下降到10毫秒左右,他把数据扩大到10万,强度也挺快的。

4.后记与C#实现

避免他的问题报告 图片后,第三天亲戚亲戚一帮人又聊了一会,他表示很感谢,说你这人措施强度非常快。说这1年来,他问过统统一帮人,也找过统统有计算机方面的人,但效果都是好。。。

据说还问过两个拿过那此微软认证的人。。。说他的电脑不行,要去换一下。。。你这人特别过份操蛋了。。才几万的数组,能耗几个内存,都是简单的比较计算,须要很好的CPU么。。。

以后我也给他分析过说,所有人原应着如此 完整版理解你的问题报告 图片,都一根绳子 筋考虑强度和强度的问题报告 图片了,统统有考虑的东西多了,我你要的建议可是一定至少。对那此小问题报告 图片,牺牲你这人空间,何况又太满再 ,以后内存也便分分3分快3官网宜,现在动不动2G,4G。。换时间也是够划算的。我这里说的空间,是直接初始化数组C的长度包括所有的数字个数,原应着我可是了解他实际的数据何如来的,当然原应着能计算最大值,肯定最好了。两个稍微计算一下时间多样化度,循环2遍就能避免问题报告 图片。至于我第一次提到的排序和二分法的问题报告 图片,也可是刚开使想到的,如此 更深入的思考,原应着也是考虑到他的数据是都能不能 在生成的之前 就进行排序的,两个也都能不能 省时间,而都是所有的都IndexOf,不慢才怪。

4.1 C#代码实现原始措施

闲的没事,我用C#实现了一下网民视频 原始的措施,代码如下:

static void ValidateArrayElement2()
{
    Stopwatch sp = new Stopwatch();
    sp.Start();
//开使计时
    Random rand = new Random();
    Int32 maxValue = 1300000;
//元素最大值,是两个假定值
    Int32 length = 70000;
// A,B的长度
    Int32[] A = new Int32[length];
    Int32[] B = new Int32[length];
    Boolean[] C = new Boolean[length];
    
//随机初始化A,B数组
    for (int i = 0; i < length; i++)
    {
        A[i] = rand.Next(maxValue);
        B[i] = rand.Next(maxValue);
    }
    
//循环A,验证算不算趋于稳定,将C对应位置标记为true
    for (int i = 0; i < A.Length; i++) if (B.Contains(A[i])) C[i] = true;
    sp.Stop();
    Console.WriteLine(sp.ElapsedMilliseconds);
}

测试了下,我机器是X3000+T9300,3G内存。加上数据初始化总共时间是4.3秒,统统有实际的时间是4秒左右,和网民视频 的结论是差太满再 的。看看我下面的措施:

4.2 C#代码实现上述算法

使用第3节提出的措施,我测试一下时间:

static void ValidateArrayElement()
{
    Stopwatch sp = new Stopwatch();
    sp.Start();
    Random rand = new Random();
    Int32 maxValue = 1300000;
//元素最大值,是两个假定值
    Int32 length = 70000;
// A,B的长度
    Int32[] A = new Int32[length];
    Int32[] B = new Int32[length];
    Boolean[] C = new Boolean[length];
    Boolean[] Atemp = new Boolean[maxValue];
//临时的辅助变量
    
//随机初始化A,B数组
    for (int i = 0; i < length; i++)
    {
        A[i] = rand.Next(maxValue);
        B[i] = rand.Next(maxValue);
    }          
    
//循环B,验证元素算不算趋于稳定
    foreach (var item in B) Atemp[item] = true;
    
//循环A,验证算不算趋于稳定,将C对应位置标记为true
    for (int i = 0; i < A.Length; i++) if (Atemp[A[i]]) C[i] = true;
    sp.Stop();
//停止计时
    Console.WriteLine(sp.ElapsedMilliseconds);
}

实际时间只有5ms左右,原应着不算数据初始化的时间,基本只有1ms,和网民视频 的10ms特别差别,原应着和机器有关吧。总的来说,强度的确是提高了不少。

至于所谓的哈希表措施,这里就不实现了,原应着够快了。

最后感谢那此和我一样,热爱编程的业余人事。。。我虽然亲戚亲戚一帮人都是正规军,我虽然亲戚亲戚一帮人如此 学过数据社会形态,也如此 系统学习过专业的算法课程,如此 接受过专业的编程培训,但假使 细心和动脑筋,避免你这人小规模的问题报告 图片,还是都能不能 的。至于那此大量数据的强度问题报告 图片,算法问题报告 图片就交给大牛吧。

剩下的时间交给网民视频 ,你这人问题报告 图片简单吗?我你要何如避免?期待评论有更好更佳的答案。。。原应着是喷,说问题报告 图片简单那就算了吧,没必要,何苦为难我呢。。。

4.3 HashSet测试

感谢passer.net网民视频 ,说用HashSet,你这人类之前 知道,但很少用,既然提出来了,就测试一下,代码如下:

Stopwatch sp = new Stopwatch();
sp.Start();
Random rand = new Random();
Int32 length = 70000;
// A,B的长度
Int32[] A = new Int32[length];
Int32[] B = new Int32[length];
Boolean[] C = new Boolean[length];
var tmp = new HashSet<int>();
//随机初始化A,B数组
for (int i = 0; i < length; i++)
{
    A[i] = rand.Next();
    B[i] = rand.Next();
    if (!tmp.Contains(B[i]))
        tmp.Add(B[i]);
}
 
//循环A,验证算不算趋于稳定,将C对应位置标记为true
for (int i = 0; i < A.Length; i++) C[i] = tmp.Contains(A[i]);
sp.Stop();
//停止计时
Console.WriteLine(sp.ElapsedMilliseconds);

测试了一下,至少17ms,比文章的措施稍微慢了你这人,但也非常快了,在两个数量级水平吧。原应着哈希表对你这人多样化的类似于数据原应着大数据量更管用。不过无所谓了,都是措施,都能避免问题报告 图片,太满再 纠结那此细节。