数值算法研发
Ⅰ 有工作经验的开发者面试有数据算法么
老实说,本人没有任何实际开发经验,但马上就要面试软件研发工程师职位,那个急啊!
我本想随便找几个项目经验蒙混过关,但是仔细琢磨还是不行啊!因为在实际开发项目中,一个人不可能负责项目的方方面面,只是负责项目的一小块,要是整出个完整的项目经验,那多半是闭门造车或者网上当的,你们说是吧!
所以,我求你们的,将你们工作中实际参与的项目以及实际做的事情跟我说说吧!我现在是巧妇难为无米之炊啊!我的文采一向很好,可是这没个材料,我真他娘的难编啊,有才无用啊!
现在这些混蛋面试官都要什么项目经验,你们说我不编行吗?帮帮忙吧!谢谢您们的回答。其实有两点我是可以肯定的:
1、技术细节肯定没有问题,本人深信自己的编程功底。
2、本人独立研发过几个小的项目,但都是闭门造车的,难登大雅之堂,所以这里才很为难的啊。
我现在急需的就是有个项目作为载体好说事,要不就算你技术再牛,也没办法证明不是!但是我自己做的小项目虽说五脏俱全,但是那太小了的,几天就能搞定的项目,你总不能编个几个月吧,而且还分模块。。。。。
Ⅱ 数值计算方法的主要研究对象有哪些其常用基本算法主要包括哪三个方面
数值计算方法的主要研究对象:研究各种数学问题的数值方法设计、分析、有关的数学理论和具体实现。其常用基本算法在数值分析中用到迭代法的情形会比直接法要多。例如像牛顿法、二分法、雅可比法、广义最小残量方法及共轭梯度法等等。在计算矩阵代数中,大型的问题一般会需要用迭代法来求解。
许多时候需要将连续模型的问题转换为一个离散形式的问题,而离散形式的解可以近似原来的连续模型的解,此转换过程称为离散化。
例如求一个函数的积分是一个连续模型的问题,也就是求一曲线以下的面积若将其离散化变成数值积分,就变成将上述面积用许多较简单的形状(如长方形、梯形)近似,因此只要求出这些形状的面积再相加即可。
(2)数值算法研发扩展阅读
数值分析也会用近似的方式计算微分方程的解,包括常微分方程及偏微分方程。
常微分方程往往会使用迭代法,已知曲线的一点,设法算出其斜率,找到下一点,再推出下一点的资料。欧拉方法是其中最简单的方式,较常使用的是龙格-库塔法。
偏微分方程的数值分析解法一般都会先将问题离散化,转换成有限元素的次空间。可以透过有限元素法、有限差分法及有限体积法,这些方法可将偏微分方程转换为代数方程,但其理论论证往往和泛函分析的定理有关。另一种偏微分方程的数值分析解法则是利用离散傅立叶变换或快速傅立叶变换。
Ⅲ 数据结构和算法在实际的软件开发中都有哪些
应用太多了。
基本上来说C#是基于面向对象语言,你所定义的所有类/结构体都算是数据结构,而且在.net类库中已经定义中诸多可用的类型以供使用。实际开发中根本就离不开结构与算法。
题主之所以有这样的问题,基本上认识到了很多程序员易犯的一个毛病——理论知识与实际应用中的脱节问题,不少程序员都说自己写程序用不上理论知识,或者是理论无用。我一直认为理论才是真正编程的指导,别说你所学的理论知识了,有时我们必须遵守一些软件活动上的标准/规范/规定。比如ISO29500标准有多少程序员读过或听说过?他实事就是关于openxml的一个国际标准,我们要想达到通用的程序,这些标准还是读一读的好。
扯回你的问题,什么是数据结构,什么是算法?如果你真的狭义理由数据结构,或者只是从课本上例子来说,数据结构被定义成一个只有属性成员的类或结构体才算是数据结构吗?事实上并不是,那么是不是只有链表/栈/队列才算是数据结构呢?可以说这是某些人狭义理解数据结构时的一种常规定势思维,但事实上来说,类或结构是数据结构的基本,否则你链表存在的实体到底是什么东西?所以数据结构包含着基本结构与狭义上的顺序表/链表/栈/队等存在实体的集体。为什么我说数据结构在实际运用中广泛体现呢?就数据结构而言,课本上只是为了讲明白结构而已,弱化了其中实体的真正含义,而且不语言的具体实现亦不尽相同,所以他们所讲的数据结构是基本理论的。
我来个例子:链表(C#语言)
publicclassMember
{
publicstringName{get;set;}
publicstringResponsibility{get;set;}
publicstringPosotion{get;set;}
}
publicclassMemberNode
{
publicMemberMember{get;set;}
publicMemberNext{get;set;}
}
//Node其他就是链表中的一个结点结构,这个结点结构除了指明当前的Member之下还指向下Next的下一个结构结构,它最终可以形成一个链表。这就是定义的一个链表。
从以上例子上你可以看出这是一个类似于课本的标准定义,但事实上在C#语法中存在泛型的特点,那么这类似的结构我们不须要一个个地定义了!所以在不同的语言中为了方便编程者,我们甚至可以把这样的结构进行简单化,从而达到一种最简单的使用方式。以C#为例,我们可以使用Node<T>来表示链表/List<T>表示顺序表/Stack<T>表示栈/Queue<T>表示队列,在这种情况下,我们只需要定义我们的泛型即可,结构链之类的本身使用泛型已经在类库中实现了——虽然你不用定义,但不代表不使用或者不用理解这其中的知识。而在课本讲理论的时候,他不可能附带泛型来讲的,所以很多人认为自己去定义数据结构才行,那才是“真正”的数据结构,其实不然。以链表为例,我们需要一个节点除了其实体意义之外,还存在指向下一结点的指针(其实是地址引用)才算是数据结构。根据课本,他们必须这么定义(C#):
publicclassMemberNode
{
publicstringName{get;set;}
publicstringResponsibility{get;set;}
publicstringPosition{get;set;}
publicMemberNodeNext{get;set;}
}
//死读书的只会承认这种才是真正的数据结构吧(链表节点)
事实上,链表讲的只是一种形式,能最终形成的一种组织数据结构的形式。这个代码会导致我们出现一种极大的误解——每个类型的结构都需要重新定义一次。如果有多个类型结构的话,我们会出现多个不同的定义,这会导致将来类的定义越来越多,对于维护上来说是比较麻烦的。由于设计模式/面向切片等各种开发方式的介入,我们会使用相对比较简单的形式。所以才会有我定义两个类的进步,而后可以出现泛型的更进一步。
你可以这样理解,这种课本上的结构,会导致我们造成每种结构基本上都需要重新定义一次,我最开始给出的例子可以使用继承的方式,实现某个基类的数据结构(下面的似乎也行,但在使用中可能会出现部分问题),而Node<T>则从根本上解决了这个问题,可以支撑多种类型。
所以此时在理解数据结构时,比如Node<T>,他不旦要求理解链表的节点,还要理解T泛型,那么在数据结构上来说,它指的不再是单一的节点结构,还在包括一个基础的类型。
换句话来说,你在C#等语言中已经不需要再做类似的定义了,只需要定义其基本结构类型即可。但课本上在讲知识的时候,它不可能只针对面向对象或支持泛型的语言来讲,若不支持泛型时,我们必须使用课本上或我最开始写的例子中的形式,若不支持继承的面向过程语言,那么课本上的知识就是硬性的规定,你必须以这种形式来说,而引用则使用指针引用的方式(面向对象的引用其实是一种引用型引用,也就是址引用或称地址引用,与指针类似)。
相信讲到这里你能明白,数据结构在不同的语言中只是变了个形而已,并不是必须是存在指针的才是,也不是只说表面上的那点东西。早期教程都是以fortain语言为主的,而且课本的目的是讲清道理,而不是一种规定。死读书的人以为用不到数据结构,其实他们一直在使用。
再来说一下算法,算法是什么?是解决问题的一种模式,比如解二元一次方程等等,所以算法的定义其实已经告诉你,顺序代码他也算是一种算法,不能说只有背包问题,八皇后问题,回溯问题才算是算法——你能明白吗?其实你正常写的就是一种算法,这种算法简单,就是顺序执行下来就可以了,他也是一种算法的,就算解二元一次方程组有固定的模式(算法),但不代表加减法就不是算法了!所以算法也是常用的东西,那么你学习的算法其实算是开辟思路的一种而已。算法自身的概念已经决定,基本上程序都是由结构与算法构成。我也来举个例子,怎么判断某个链表是否为循环链表?是你的回溯算法,贪心算法还是背包算法?它们只是在解决一些典型问题的一种通用方式而已,很显然,我的问题不是这种典型问题,但不代表他不典型,我们正常的算法是设计两个变量等于头元素,然后开始进入循环,一个变量每次向下推一,即找到他下一个节点,而另一个变量每次找到其孙节点,就算当于两个变量一个每次向下推进一次,而另一个每点推进两次(如果可能),如果不是循环链表,则进两次的那个会在链表总长度的一半时,遇到空引用,否则会在某一时间两指针引用同一对象(不是对象相等,而是引用相同的对象),什么意思呢,好象两个人在圆型跑道上跑步,一个每秒1米,另一个每秒2米,同时同地同向出发,最归跑得快的那个会追上跑得慢的那个!当然这种情况下你也可以给他起个名字,叫“追及算法”?如果只有你学的那几个典型算法是算法的话,这个算不算算法?
现在我们的问题是,如果语言层面上已经实现了这些东西,那么这些理论我们是否可以不用理解就可以了?答案是可以——如果你只是一个不思进取的程序员或允许bug乱飞的没有责任心的编程人员的话,可以不用理解——毕竟有些人只是“混”饭吃而已!
理解了不会去应用,这就是典型的理论联系不到实际,他们也不知道自己的代码将如何控制。我举一个例子,由于性能等各方面的要求,我们要使用多线程对某些数据进行处理。怎么处理?不好人会使用多线程——他们定义一个临界资源,然后让多个线程在读取数据表(DataSet)时进行阻塞,然后每个线程去处理那些超时长的问题,处理完的时个再按这种方式读取数据——这样有问题吗?没有,这也算是算法的一种!反正如果编程代码有功底的话没有任何问题的,这种代码算不算优雅呢——很多人认为代码的优雅就是代码编写过程的形式或是良好的编程习惯!这里边其实用不到数据结构与算法的。
好吧,我承认,但如果我们换一句思路来看看,如果我用一个线程负责读取数据,并不停地放入到一个队列中,而多个线程从队列中不停地读取处理这些放入的数据,这样如何?我的意思是说,并没有直接在DataSet中处理,而是选择使用队列的方式。
我们看一个问题,这个队列Queue<T>,一个线程用来插入数据,多个线程用来读取数据,而且要保证不能重复,那么我们可以使用队列的安全版本(CorrentQueue<T>,在.net中如果非线程安全的情况下,多线程使用实应该找到其对应的安全版本或者控制线程安全)。
插入线程如果发现队列中的长度(容量)较大时,可以暂缓插入。这样可以保证队列的长度基本固定,占用内存得到控制(不是DataSet批量读来一大堆),由于使用安全队列,所以各线程不用考虑线程之间的安全问题,每个线程从队中获得数据并删除,可以保证数据只被处理一次。当然还可以考虑优雅的通知机制,插入线程在插入数据时通知处理线程启动,如果插入速度过快,发现插入数量达指定的长度(比如30个),停止插入,插入线程阻塞;处理处理再次处理时可通知插入线程再进行插入。
这也算是一种算法吧?它可以让插入线程与处理线程同时工作,而使用DataSet那种常规的结果时,只能是等待处理完或加入多个控制条件进行控制,既然这么控制的话,何不直接使用队列的方式?CorrentQueue<T>中的T也完全可以是一条记录DataRow嘛!
如果你认为第一种是你经常使用方式,那么算法对于你来说学与不学无所谓的,你必须使用自己的编程/调试功底以保证你的代码尽量很少出错或不出错。而如果你认为第二种方案优雅一些的话,那么你会认为你学习的算法与结构还是有用的,理论与实践结合了。
我之所以举这么一个例子,其实告诉你的无非是几点非常重要的信息:
你有选择算法的自由(只不过是代码质量、后期维护的问题)
如果你知道的较多的算法与结构,你会有更多的选择。
算法或结构在实际使用中,所谓的典型问题并不是使用场景和书上描述一模一样(试想一下,我第二种考虑的例子中,是不是跟书上比他不典型?其实也是非常典型的)
分析问题时,应该拿要点,而不是整体去套。(如果整体去套用的话,你肯定会想不到使用哪种结构或算法)
不管是数据结构/算法/设计模式都要求是灵活运用,而不是场景对比使用,也不是生搬硬套。
试想一下,你的背包问题,怎么可能公司也让你分拆包装?你的八皇后问题公司恰好让你下棋?你的贪心算法公司恰好让你找零钱?你的回溯算法公司恰好让你走迷宫?学不能致用的原因就是太死板——这几个举个例子的场景你再遇到或理能遇到的机率是非常小的,所以如果觉得学了没用,那就真没用了——只不过不是算法没用,而是人没人!
讲个小故事:从前一个家人的板凳坏了,要找一个合适的两股叉的树杈重新制做一个板凳腿,让孩子到树园里找了半天,孩子回来说“我都没见过有向下叉的树杈!他老爹气得要死——怎么会可能有向下长的树杈呢!这孩子是不是笨——你就不会把地刨了找一个向下分叉的树根!
算法也是一样,迷宫找路可以使用回溯算法,但不是所有的回溯算法都用于迷宫找路——它还可以用来设计迷宫!嘿嘿嘿!
Ⅳ 做研发好还是做数据挖掘或算法好,或者说哪个更有前途
这个看怎么说,事实上如果你做得比较浅,都很容易,因为门槛低。也正因为这个所以你能做,别人也能做。因此谈不上什么前途。但你如果做得深,那基本都不会太差。
Ⅳ 数据算法工程师主要是做什么的
只有数据科学家和算法工程师,数据科学家关注于用算法研究数据背后的信息,算法工程师负责将科学家研发的算法应用到实际生产活动中
算法工程师就是会一些人工智能算法的工程师。工作就是做一些人工智能算法相关的任务:根据任务整理数据(如果没有数据最好可以协助建立获取数据的流程)跑模型,改进模型部署模型,测试,优化速度等等其实AI行业比较欠缺好的产品经理,算法工程师在需求设计和沟通上最好也能参合参合,都是有益的。
想了解数据算法工程师这个职业可以到CDA认证中心去了解一下,CDA认证,致力于打造全球数据人才考核行业标准,推动全球数人才发展。包括开发和整合国际数据科学领域的前沿技术及优质资源; 制定并完善数据科学行业人才标准与职业道德行为准则;编写和建立专业教材体系与题库;组织并实施命题审题、人才评定和考试服务;管理会员与提供行业咨询服务等事务。
Ⅵ Google用了哪些数值算法
首先,每个数值的值出现的概率比较平均,所以用哈夫曼(Huffman)算法无法取得太专业了,建议你去专门的论坛去问.用英文去google搜下,或者google 讨论组.
Ⅶ 数值模拟主要过程和步骤
1、首先要建立反映问题(工程问题、物理问题等)本质的数学模型。
具体说就是要建立反映问题各量之间的微分方程及相应的定解条件。这是数值模拟的出发点。没有正确完善的数学模型,数值模拟就无从谈起。牛顿型流体流动的数学模型就是着名的纳维—斯托克斯方程(简称方程)及其相应的定解条件。
2、寻求高效率、高准确度的计算方法
由于人们的努力,目前已发展了许多数值计算方法。计算方法不仅包括微分方程的离散化方法及求解方法,还包括贴体坐标的建立,边界条件的处理等。这些过去被人们忽略或回避的问题,现在受到越来越多的重视和研究。
3、开始编制程序和进行计算
实践表明这一部分工作是整个工作的主体,占绝大部分时间。由于求解的问题比较复杂,比如方程就是一个非线性的十分复杂的方程,它的数值求解方法在理论上不够完善,所以需要通过实验来加以验证。正是在这个意义上讲,数值模拟又叫数值试验。应该指出这部分工作决不是轻而易举的。
(7)数值算法研发扩展阅读:
数值模拟的发展史:
1955年Peaceman与Rachford研发的交替隐式解法(ADI)是数值模拟技术的重大突破。该解法非常稳定,而且速度快,所以迅速在包括石油,核物理,热传导等领域得到广泛应用。1958年Douglas,Jim和Blair,P.M第一次进行了考虑毛管压力效果的水驱模拟。
60年代数值模拟技术的发展主要在数值解法,第一个有效的数值模拟解法器是1968年Stone推出的SIP(Strong Implicit Procere)。该解法可以很好地用来模拟非均质油藏和形状不规则油藏。
Stone在70年代发表了三相相对渗透率模型,由油水和油气两相相对渗透率计算油、气、水三相流动时的相对渗透率,该技术现在还广为应用。70年代另一项主要成就是Peaceman提出的从网格压力来确定井底流压的校正方法。
参考资料来源:网络—数值模拟
Ⅷ 算法在研发阶段,对AI数据标注行业有什么样的需求
不理解问的是什么
算法研发阶段和数据标注行业有什么关系
一般来说数据质量越高 对算法要求就越低,如果数据质量不够 就得更厉害的算法来建模
从技术上说 算法实现只需要少量数据,因为实现算法只管格式,不管内容质量的
Ⅸ 数据挖掘,数据开发,算法工程师是什么职位
大数据在带来极大商业价值的同时,也面临着巨大的人才需求。据数联寻英发布的《大数据人才报告》称:目前我国大数据人才仅 46 万,在未来 3 - 5 年内大数据人才缺口达 1,500,000 之巨。