当前位置:首页 » 操作系统 » 如何弄懂算法

如何弄懂算法

发布时间: 2022-06-18 03:23:45

算法不难懂,可是想破脑袋都看不懂用代码实现的算法怎么办

算法一般是为了解决特定问题而存在的,如果看不懂;可以尝试从问题出发
了解算法是如何一步一步解决问题中的模块,进而知道算法的每一句代码是做什么的
所以你可以找一个例子,然后单步调试代码;多次运行,查看结果之间的关联

② 如何研究学习一个机器学习算法

如何研究学习一个机器学习算法
1. 还记得我刚来算法组的时候,我不懂TFIDF是什么,更不要说什么SVD,LDA了听都没听过,不懂user-based和item-based的区别,甚至连贝叶斯公式都写不全。在最初的一段时间,我看别人的代码,半懂不懂地听组会分享,然后实现一个又一个现在看来很幼稚的算法,感觉进步是飞速的。接过来一个算法需求,我就去网上找篇paper,然后把算法给实现了就丢给产品线用。
这个时候,同事A对我讲,“算法工程师不是懂一些数学,会写些算法就行了,算法工程师最重要的技能,在于如何定义问题,然后接下来才是如何解决这个问题。”从那以后,当面临一个需求时,我更愿意分析这个需求的关键点在哪,然后从大脑里搜索已有的东西能不能解决这个问题,比如FM的算法缺乏多样性,那么我想一下我看过的解决多样性的paper都有什么?能不能用在这个上面。如果不能,我再对应去搜问题的关键字,而不是算法的关键字。

2. 转眼间一年过去了,虽说看过的paper不够多,但是可以应付大部分的需求了。但是我开始迷茫起来,我觉得自己在实现一个又一个的算法trick,知道一个算法可以用,我就去网上down一个对应的算法包,然后把数据丢进去。没了......那么我的出路到底在哪?我的核心竞争力在哪?在于知道这么个东西,然后变成跑准备数据的么?
这个时候,同事B给我讲了到底博士是如何完成一个毕业设计的,几百篇论文作为基础。那是不是把几百篇论文全都和我以前一样一字不差的看完?PHD为什么很容易进入到一个他之前所未知的领域,在于在研究领域所积累的一套方法论。言归正传:
当接触到一个新的算法时要怎么去入手?用SVM举例吧:
第一,去找SVM的Survey,每一个成熟的算法分支必定有着survey这样的汇总性paper,通过这个paper,我们大致可以了解这个算法为什么出现,最基本的算法原型是什么样的,接下来后人对他做了什么样的改进,他到底还有什么问题。
第二,弄懂这个算法的来龙去脉,为什么出现,出现是因为改进了前面算法所不能做的什么事情?例如我们为什么不用基本的线性分类器?和用传统的分类算法找到一个超平面区别在于哪?
第三,知道了来龙去脉,我们还要知道这个算法的缺点在哪?不能适用于什么?我们怎么知道?这个就涉及到如何来快速地过一遍一篇paper。
第四,Abstract是最重要的,他告诉了我们这篇paper发的目的是什么?他想解决什么问题?然后是Future Work,之所以有着FutureWork是因为这个算法还有一些问题没有解决,这个就告诉了我们当前算法还有什么缺点?
第五,递归再去看这个缺点是否有其他的研究者已经解决掉了。

那么我们为什么看paper,为什么实现某算法,我归结为两点:
1. 学习目的,扩展思路,如果处于这种目的,理解paper的精髓是最重要的。
2. 解决实际问题。那么应该丢弃的观点是我最初那样拿过来一篇paper也没理解透彻也不知道能不能解决问题,也不知道到底是不是可行,就先实现了再说。劳民伤财~

3. 我自认为自己还算努力,看了很多书,看了很多算法,但是其实有时候说起来,比如用PCA还是SVD,他们到底有什么区别,我们如何选择,我其实还是不明白。
这时,同事C对我说,理解一个算法,最重要的是要理解这个算法的世界观,这个算法背后的哲学基础是什么?只有理解了这个,才算理解一个算法。
用Boosting来举例,他背后的世界观是PAC原则。那么Boosting为什么不能引入一个强分类器,因为这个做个类比就相当于Boosting原本是美国的民主政治,一旦引入了一个强势的领导,就一下子变成了当年毛爷爷时候的政治了。Boosting的世界观就崩塌掉了。至于说Boosting最终是如何调整数据集的权重,这些就都属于了细节的层面。

最后,补充一个同事D,无意间的话让我发觉自己要变得更优秀才行:
同事D在搜Resys,有一个快照上面写着:本科生Resys十佳论文。同事扭头对我说,靠,现在本科生都可以发Resys paper了。让我意识到了自己其实在原本上差距有多大,我要付出更大的努力才能弥补这些也许别人觉得无法跨越的鸿沟。

③ 求数据结构和算法大神分享一下学习它们的一些方法或经验。不甚感激!

一楼这打酱油的我也是醉了。。

数据结构和算法是很抽象的。。和编译原理,操作系统,并称本专业最难课程了。。

你首先弄懂原理,再看基于某种语言的数据结构实现(C,CPP,java等)。其次看懂算法的原理,KMP啊,排序,查找等到。。再看语言的实现。。

总的来说就两部:看懂原理,再看实现。这个急不来的,数据结构和算法一定要放多点时间。到一定地步了(所有数据结构和经典算法都弄懂了),建议你买写“教你如何设计算法的书籍”看看。开始进军算法的设计。。

我的理解数据结构和类型基本上一样。都是写给人看的。因为在计算机存储的只是两种模式:顺序和链式。现实世界有某某问题需要用到计算机解决,而该问题又依附在某某数据结构上(例如村庄布线需要用到最小生成树,寻找点用到最短路径等等。。)而算法是某类型对于处理问题的一个封装,例如:类也可以说是一个数据结构了。。

④ 我现在再自学C语言,但是到了算法的时候就一点也看不懂了,怎么办,我想得到详细的解释

找一个学习小组。 讨论着学习。

学习语言不要光看 。 自己把例子试着运行一遍。一步一步理解。然后改掉其中一些代码来应正自己的想法。

⑤ 如何通俗易懂地解释遗传算法有什么例子

相信遗传算法的官方定义你已经看过,就我个人理解
遗传算法的思想是物竞天择,优胜劣汰。
你可以理解为,当我们解某道数学题时,如果这个题太难我们没法列公式算出正确答案,我们有时候也可以蒙答案去反过来看看是否满足这道题提干的要求,如果能满足,说明我们蒙的答案是正确的。但是蒙对答案要试很多遍,每次随机的去试数可能要试1000次才能蒙对。可是遗传算法可以让我们科学的去蒙答案,每次蒙的答案都会比上一次蒙的更接近正确答案,这样可能蒙十几次我们就找到正确答案了。
希望我的回答对你理解GA有所帮助,望采纳

⑥ C语言的些算法看不懂怎么办

多看多做啊,还有程序一定要自己写,还可以看看一些其他书,比如数值分析啊,数据结构啊!!可以看看

⑦ 如何浅显易懂地解说 Paxos 的算法

Paxos算法解决的问题是在一个可能发生消息可能会延迟、丢失、重复的分布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决议的一致性。

一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。

一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。 节点通信存在两种模型:共享内存和消息传递。Paxos算法就是一种基于消息传递模型的一致性算法。

分析Paxos算法的目的

Paxos算法的目的是为了解决分布式环境下一致性的问题。多个节点并发操纵数据,如何保证在读写过程中数据的一致性,并且解决方案要能适应分布式环境下的不可靠性(系统如何就一个值达到统一)。

Paxos算法中,可分为4种角色:

  • Proposer:提议发起者,处理客户端请求,将客户端的请求发送到集群中,以便决定这个值是否可以被批准。

  • Acceptor:提议批准者,负责处理接收到的提议,他们的回复就是一次投票。会存储一些状态来决定是否接收一个值。

  • Client:产生议题者,Proposer就像Client的使者,由Proposer使者拿着Client的议题去向Acceptor提议,让Acceptor来决策。

  • Learner:最终决策学习者,最终学习的目标是Acceptor们最终接受了什么议题?

  • Paxos算法的原理

    例如:公司商定年会举办的地点,每个人都可以提出建议。在现实环境中我们可以在一个会议室共同讨论或在微信群中讨论(基于内存共享方式);但在基于消息传递的分布式环境中每个人只能通过手机短信与其它人通过。如何在这种会延迟、丢失的环境中确定一个年会举办地点。

    Paxos算法是这样解决这个问题:

    每个人都可以提出建议、同意建议、接受建议

    少数服从多数。只要建议被多数人同意即可确定该建议。

    于是确定以下讨论方式:

  • 只有被提出来的建议才能被大家同意。

  • 最终只能确定一个建议。

  • 如果某个人认为大家同意了某 个建议,那么这个建议必须真的是被大家同意的。

  • Paxos算法图解

    在实现环境中会通过一次提议,选择一个Leader。后续所有的提议都只能由Leader提出。

    原来paxos算法里的角色都是这样的不靠谱,不过没关系,结果靠谱就可以了。该算法就是为了追求结果的一致性。

    原文链接:什么是Paxos算法?Paxos算法是区块链核心算法之一

⑧ 看不懂算法,买了C程序设计,算法到底干什么的。

算法其实就是将解决一个问题的思路用C语言(或其他程序设计语言)描述出来,比如:一个整数序列,要将其按从小到大的顺序进行排列,就有插入排序、选择排序、冒泡排序、堆排序等多种算法来实现,这些算法书上都有讲解,如果你刚开始学的话,首先各种数据类型(int、float...)、操作(+、-、++、--、<<、>>......)、数据结构(数组、链表、堆栈、队列......)这些得先明白的,从最简单的A+B开始学,逐步深入,练习和学习各种算法可以去POJ(http://poj.org/)等各大OJ上去做题,题目量多,可到网上去搜题目类型的分类……敲的挺累的,希望有所帮助!!

⑨ 数据结构中的常用算法有哪些呀,对于初学者应该怎样把它学好呀

基本:
线性表,链表,栈,队列
排序:
快速排序,堆排序,归并排序,希尔排序,插入排序,选择排序
二叉树:
前序,中序,后序遍历,层次遍历,包括递归算法和非递归算法两种
AVL树,Huffman编码
二叉树和树,森林之间的转换,穿线树
图算法:
深度优先遍历算法,广度优先遍历算法,最小生成树,最短路径
字符串:
查找子串,KMP算法等。

初学者一定要弄懂这些基本的算法。还有,要多动手练习书上的算法,代码是敲出来的。对于考试而言,多看看老师划的重点足矣。

热点内容
mvc创建数据库 发布:2024-11-07 03:27:29 浏览:54
quartus加密 发布:2024-11-07 03:27:29 浏览:299
安卓手机删除的视频在哪个文件 发布:2024-11-07 03:26:09 浏览:507
an脚本库 发布:2024-11-07 03:21:48 浏览:843
进销存asp源码 发布:2024-11-07 03:19:27 浏览:623
android用户界面设计 发布:2024-11-07 03:06:32 浏览:917
mc服务器如何给指令方块 发布:2024-11-07 02:58:03 浏览:400
魔兽地图作弊脚本 发布:2024-11-07 02:57:28 浏览:923
防爬虫算法 发布:2024-11-07 02:51:39 浏览:351
怎么删除明日之后玩过的服务器 发布:2024-11-07 02:45:42 浏览:273