搞算法的
1. 如何向亲戚朋友,解释自己是搞算法的
有些人觉得算法竞赛很有内容,比工程甚至普通的研究还有难度。我觉得这个是比较方法不太合适,写个小爬虫、做个个人网站、弄个C--编译器,这种入门的东西当然简单,但是我们搞竞赛的时候入门的是什么?A+B?高精度加减法?一样水的很。你不能拿一个领域高级的东西去和另外一个领域入门的东西比。搞竞赛搞得极致的巨巨当然很厉害,但他们身上不是只有竞赛选手这么一个标签,他们的成就也不是只靠搞竞赛就搞出来的。况且,就像码农群体大多是每天死于业务逻辑的搬砖工,科研群体很多时候都是浪费咖啡的灌水机一样,竞赛选手这个群体,更多的人是那些做不出来题的,让大家拿金牌银牌的那个基数(不要看不起基数,要是有一天这些基数决定不参加竞赛了,大家一起玩完)。如果说搬砖灌水还填补了一些巨巨大牛没有时间去做的东西,万一铜铁牌回家,除了锻炼了自己的能力,我们敢说我们创造了什么东西吗?不能说丽洁姐姐搞过竞赛,你也搞过竞赛,你就搞过丽……(不对划掉)你就也是丽洁姐姐这个水平了。我们是竞赛选手,是算法爱好者,在算法上有了入门的机会,不去想着有朝一日去建模没有人解决好的问题,也不想着将来如何去处理许多人想也不敢想的复杂或是大量的数据,过早的给自己固化一个标签,满足于这种答题的模式,我真的是觉得非常可惜。
利益相关:一个内心深处其实还是隐约的想搞算法,但是清楚自己不是那块料,省队都进不去,算上邀请赛才敢说自己金银铜铁都拿过的退役OI/ICPCer
2. 搞算法的都是高手,搞开发的都是没脑子,只会复制代码这观点对吗
用来解决问题的方法都是算法,搞开发的也是把现实的问题用代码解决!可能每个人的解决办法都不一样,这样就有了不同的算法了!不一定是些出很深的算法才是算法!
3. 计算机科学与技术是不是就是搞算法的
计算机科学与技术是大学本科开设的理论性的专业。而计算机应用技术时专科儿大学开设的理论性专业。说白了第一个专业是高分大学的第二个专业是低分大学的。都是学理论知识的前者更加侧重的是它的实用性和实践性学习的时候强调实践和成效应用方面有更加严格的要求后者的学术性和知识性会更加的侧重你学习的时候可以一门是主修一门指定选修或者是选修看来你对这方面不是很清楚。我想告诉你一般大学里指的计算机专业都是了解整个计算机体系而设立的。部分大学会开设专门偏向软件编写的软件工程专业。你所说的计算机应用这个东西只能作为一项专门的技术存在,比如玛雅,AUTOCAD这种都是以课程的身份存在,其本身不能单独成为一个专业。
4. 搞算法(图像识别,深度学习)必须要懂C/C++吗
由于图像识别、深度学习这方面已经有许多人做了基础性工作,他们提供的程序或者库都是利用c或c++形式提供的,或者是类似的调用接口,因此要利用这些库、将这些基本算法结合到自己的工程中来,需要c和c++的知识
算法应当是可移植的,同时又不能离硬件太远。可移植的特点是要求编程语言具备可移植性、通用性,c或c++是比较好的载体;所谓离硬件不太远,是因为要在算法优化方面有需求时,需要针对硬件特点,或者硬件提供的能力,做到发挥算法的最大效能,由于c语言可以很好地结合汇编语言和高级语言,因此在优化方面是比较灵活的。
如果大部分通用算法都是用c或c++编写的,为成为通用算法,你有可能需要顺应这一习惯,以便别人将你的算法结合到他们的c或c++工程中去。
往往你的算法是在别人编写的现有算法上改进得到,如果别人的算法就是c或c++编写的,你需要这方面的知识来消化别人算法的思路,理解成熟算法的意图。
5. 如何做算法研究
一、DSP与TI
为什么提到电机控制很多人首先会联想到DSP?而谈到DSP控制总绕不过TI,首先DSP芯片是一种具有特殊结构的微处理器。该芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,提供特殊的指令,可以用来快速地实现各种数字信号处理算法。基于DSP芯片构成的控制系统事实上是一个单片系统,因此整个控制所需的各种功能都可由DSP芯片来实现。因此,可以减小目标系统的体积,减少外部元件的个数,增加系统的可靠性。优点是稳定性好、精度高、处理速度快,目前在变频器、伺服行业有大量使用。主流的DSP厂家有美国德州仪器(Texas Instruments,TI)、ADI、motorola、杰尔等其他厂商,其中TI的TMS320系列以数字控制和运动控制为主,以价格低廉、简单易用、功能强大很是受欢迎。
二、常见的电机控制算法及研究方法
1、电机控制按工作电源种类划分:可分为直流电机和交流电机。按结构和工作原理可划分:可分为直流电动机、异步电动机、同步电动机。不同的电机所采用的驱动方式也是不相同的,这次主要介绍伺服电机,伺服主要靠脉冲来定位,伺服电机接收到1个脉冲,就会旋转1个脉冲对应的角度,从而实现位移,因此,伺服电机本身具备发出脉冲的功能,所以伺服电机每旋转一个角度,都会发出对应数量的脉冲,同时又与伺服电机接受的脉冲形成了呼应,或者叫闭环,进而很精确的控制电机的转动,从而实现精确的定位,可以达到0.001mm。伺服电机相比较普通电机优势在于控制精度、低频扭矩,过载能力,响应速度等方面,所以被广泛使用于机器人,数控机床,注塑,纺织等行业
三、PWM控制及测试结果
脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中,脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变
6. 做算法的,怎么快速提高编程能力
先好好读书,这里我推荐The art of unix programming,我自己便是看完这书后技术能力才有质的变化。
然后,减少看微博、博客、知乎等的时间,最好是彻底不看,这些资讯的网站是非常浮躁的,很难学到真正的东西。
学门新语言,比方说go, python, ruby, haskell等等,然后用这门语言去做一个开源项目,比方说,一个ORM。然后,再去看这门语言的成功项目的源码。看看自己写的跟别人的不足是什么,然后,再把自己的项目重新实现一遍。自觉略有所得之后换个方向,比方说模板,再搞个开源项目。服务器后端的MVC各搞一次,还可以再去搞前端的。
最后,心态要好,不要急于求成,欲速则不达。修炼一年能有小成就不错的了~
7. 搞架构和搞算法,哪个更牛一些
我以为,这个问题的答案不是“谁更牛”,而是应该(甚至必须)二者得兼。
先说说机器学习算法的重要性。最近十年的IT行业是互联网主导的。互联网服务之所以称为服务,就是要能了解、理解、服务好用户。传统行业如银行、医院、商场也是服务行业。互联网服务和他们的区别在于——利用机器智能,回答长尾问题,服务大众——用户不需要是衣冠楚楚的就可以P2P贷款。这是人工智能技术最近十年在互联网行业发展起来的核心原因。也是大家能看到所谓”算法工程师”的收入比其他工种相对高的原因。
人工智能算法和大学专业课“算法”有一个本质区别:后者教大家如何用“人脑”,利用人的知识,想明白解法,然后描述成代码,让机器照着执行;而前者是让机器去从数据里“学习”或者“总结”知识,然后来解决问题。
要想互联网服务质量过人一等,能回答好的问题要更多,所以知识的量得更大,也就是说要能从更多数据中学习和归纳知识。这就是“大数据”的核心价值,也是“架构”技法的重要性。
用Python+NumPy、R、Matlab、Octave、甚至一台机器里的一两个GPU、不具备容错能力从而只能覆盖几十台机器的MPI,在很多情况下都不能搞定”大数据学习“问题。读书的时候,用这些工具只是方便大家对人工智能算法尽快有个了解。实际情况是,最好在工作前,至少在工作中,要能掌握large scale system开发的思想和方法。
大数据学习支撑互联网行业突破已经至少十年了。它悄悄带来了很多革命性的变化:tenure的知名人工智能教授们也面临中年危机了;其中有远见有执行力的人寻求进入公司发力(入Andrew Ng);有业界经验的人开始进入大学执教(如Alexander Smola);架构高手跨界进入人工智能算法领域(如Jeff Dean);大数据存储和处理相关的开源项目的兴盛(如Hadoop、Spark、Mesos、CoreOS、Kubernetes。
如果在这样的大潮前还看不到两者得兼的必要性,还在二者选一,甚至通过回避技术完备去谈”商业模式上的突破“,在没有做好log信息和第三方数据收集时自称”我们没有大数据“,都可能让我们在不远的未来会碰到尴尬。
8. 计算机搞算法的去公司里都作什么
做算法的一般逻辑和空间能力较好,低点的做软件开发,好的做架构搭建,也就是架构师,如果涉及数据库,一般是数据检索优化,算法优化,保障网站程序能够快速响应客户需求,较快捷从数据库取出数据。
9. 搞算法好还是搞开发好,算法就是纯数学
数学是一门工具性很强的科学,它与别的科学比较起来还具有较高的抽象性等特征。起初是计算机科学工作者离不开数学,而数学工作者认为计算机对他们可有可无,但是现在是互相都离不开对方了,计算机也提高了数学工作者在人们心目中的地位,大部分的数学工作者开始认识到计算机的重要性,并越来越多地进入到计算机领域发挥作用。但是随着人工智能、GPS(全球定位系统)等飞速的发展和计算机运算性能飞跃性的提升,计算机的优势越来越深入到思维领域,于是计算机将高深的数学理论用到实际中来,十分有效地解决了许多实际问题,例如着名难题四色问题就是被计算机证明的。问题的求解过程中有许多具有实用价值的数学分支如分析几何、小波分析、离散数学、仿生计算、数值计算中的有限单元方法等。它让人们知道计算机程序设计结合的就是数学知识和数学思想。
编程是基于数学模型的基础上面的,所以,数学是计算机科学的主要基础,以离散数学为代表的应用数学是描述学科理论、方法和技术的主要工具。编程中不仅许多理论是用数学描述的,而且许多技术也是用数学描述的。从计算机各种应用的程序设计方面考察,任何一个可在存储程序式电子数字计算机上运行的程序,其对应的计算方法首先都必须是构造性的,数据表示必须离散化,计算操作必须使用逻辑或代数的方法进行,这些都应体现在算法和程序之中。此外,到现在为止,算法的正确性、程序的语义及其正确性的理论基础仍然是数理逻辑,或进一步的模型论。真正的程序语义是模型论意义上的语义。于是编程思想运行的严密性、学科理论方法与实现技术的高度一致是计算机科学与技术学科同数学学科密切相关的根本原因。从学科特点和学科方法论的角度考察,编程的主要基础思想是数学思维,特别是数学中以代数、逻辑为代表的离散数学,而程序技术和电子技术仅仅只是计算机科学与技术学科产品或实现的一种技术表现形式。
(一)数学在计算机领域的发展
如今形形色色的,都与数学有必然的联系,它们相互相成。例如,逻辑学在学科中的应用从早期的数理逻辑发展到今天的程序设计模型论;数学在学科中的应用从早期的抽象代数发展到今天的图形学、工程问题方面;几何学的应用从早期的二维平面计算机绘图发展到今天的三维动画系统,并在与复分析的结合中产生了分形理论与技术;在游戏、图形开发中引用了线性代数中大量的坐标变换,矩阵运算;在数据压缩与还原、信息安全方面引入了小波理论、代数编码理论等。
(二)编程的思维定式
编程的思维定式决定了一个人编程的水平,在编程过程中,数学思维清晰,编写出来的程序让人耳目一新。结合教学,通过调查分析,了解到超过85%的学生,他们在编程时是根据语法而编写程序,完全脱离了编程的思维,这种思维定式使得他们编写的程序相当糟糕,没有一点逻辑。
之所以造成这种编程的思维,是因为他们平时对数学思维的培养不够重视。很多学计算机的学生想:学高数,这有什么用?学线性代数有什么用?学离散数学,有什么用?于是他们很少去上这些课,马马虎虎,整天闷在寝室里,玩玩游戏,装装,看看C语言。只知道概率问题和矩阵知识在其它课程上起到了互补作用,学的不是很深。但是当他们看到<<数据结构和算法>>时,感到其中的内容对他们而言感觉相当的艰涩难懂,这时他们就隐约感觉到了数学思维的作用了。在此之前,他们不仅荒废了大学的高等数学,连初中的初等数学也忘的好多,当他们进行高抽象思维时,确实感觉自己的思维已经很迟钝了。学计算机的学生之所以觉得《数据结构》这门课程很难,就是因为他们的数学思维锻炼的不够!其实生活中有很多这样的例子:对于一个刚毕业的,编应用的大学生,在编程中用到《线性代数》的矩阵时,恐怕便会想,在大学把线性代数学好就好了;当在程序中用到动态链表、树时,恐怕也会想“在大学时花点时间去学《数据结构》,会多么的有意义”;当学数据结构时,恐怕也会想“学《离散数学》时为什么要逃那么多的课,要不然学离散的时候就会很轻松”。所以数学思维不够,在编程会有很多的疑虑,显的有点缩手缩尾,而且写的程序也不够健全,缺乏逻辑。
(三)编程与数学思维的融合
很多专业人士觉得数学和编程能力就像太极和拳击,编程能力很强就好比出拳速度很快很重,能直接给人以重击;数学很好的话就好像一个太极高手,表面上看没有太大的力量但是内在的能量是更强大的,但是好的拳击手是越年轻越好,而太极大师都是资历越深越厉害。所以数学是成就大师的必备能力,虽然很多学生看上去感觉没有什么用途,但是到了一定的水平之后就会体会它的力量了。