⑴ 如何将数据结构和算法应用到实际之中
写一些程序,尤其是比较底层的程序。就明白它们的用处了。
列举下我们当初的作业(其实是老师从UC Santa Barbara\UC Berkley CS作业直接来题目)
(1)实现一个简单的 TCP 传输层的协议机制
自己去设计协议,不用照搬 RFC 的标准,其实就是数据结构的用场。
需要考虑到数据包丢失(Loss)、损坏(Corruption)、乱序(Disorder)这样的情况。
(2)实现操作系统的虚拟内存机制(基于Nachos系统)
如何去设计页表。如何使用置换算法。以及应用程序请求页的时候,发生缺页,从而导致的中断如何处理。
(3)实现一个简单的编译器(MiniJava)
词法:字符串匹配,表达式求值 等算法;
语法:生成抽象语法树;
语义:采用适当的设计模式(Visitor)来生成语义表、字典、然后转化为目标代码(可以是汇编、或者是类似的 Three-Address Code)
如果以上三个任务都完成并搞懂了,那么恭喜:你不仅掌握了数据结构、算法,而且也学习了计算机网络、操作系统、编译原理中大部分的知识。
⑵ 推荐算法模型原则~运营推广
网店运营:推荐算法建模原理。
直通车,手淘搜索,手淘首页推荐两个核心原则:第一,标签匹配度高优先,第二,权重高优先。
标签匹配,有顾客标签和宝贝标签,顾客标签包括浏览痕迹和购买记录,有些顾客标签比较模糊。婴儿标签包括成交记录,顾客搜索你的婴儿然后成交,顾客标签和搜索关键字给婴儿打标签。
先基本加权店权,再基本加权点击率、转化率、坑产、评价。半标品基本是销量权重越大越好。非标品的热度权重较高。
总之,算法模式在淘宝上都是为了使顾客能够快速找到他们需要的产品,并获得满意的产品。还能使公司利润最大化。很多商店不能做到这一点,是因为同行竞争太激烈,功夫再高也比不上菜刀。
网店运营中,如何做好主图和直通车图点击率高。
淘宝店的运作。
销售不到300的宝贝(对标同店销售超过10000个),最好的办法就是搞优惠活动。
然后是销售300以上(对标同店最高1万以上),方法二:
淘宝店的运作。
在同类公司中研究一下销量前10名的主图和他们的汽车图,看看他们的汽车图就知道了,汽车图很费时找,再结合他们的优势做主图和车图。
叫客服统计的客户咨问做多了有什么问题?把客户关心的问题列出来,制作一个表格,统计15天的数据,找出三个客户最关心的问题,然后把客户关心的三个问题以图表的形式展示出来,这样就可以消除客户关心的三个问题。
⑶ HFSS算法及应用场景介绍
安氏
前言
相信每一位使用过HFSS的工程师都有一个疑问或者曾经有一个疑问:我怎么才能使用HFSS计算的又快又准?对使用者而言,每个工程师遇到的工程问题不一样,工程经验不能够直接复制;对软件而言,随着HFSS版本的更新,HFSS算法越来越多,针对不同的应用场景对应不同的算法。因此,只有实际工程问题切合合适的算法,才能做到速度和精度的平衡。工程师在了解软件算法的基础上,便能够针对自己的需求进行很好的算法选择。
由于当今世界计算机的飞速发展,让计算电磁学这门学科也有了很大的发展,如图1所示,从大的方面来看,我们将计算电磁学分为精确的全波算法和高频近似算法,在每一类下面又分了很多种算法,结合到HFSS软件,通过ANSYS公司40余年来坚持不懈的研发和战略性的收购,到目前为止,HFSS有FEM、IE(MoM)、DGTD、PO、SBR+等算法,本文会针对每种算法和应用场景逐一介绍,相信你看完这篇文章应该对HFSS算法和应用场景会有更深的认识。
算法介绍
全波算法-有限元算法( FEM)
有限元算法是ANSYS HFSS的核心算法,已有二十多年的商用历史,也是目前业界最成熟稳定的三维电磁场求解器,有限元算法的优点是具有极好的结构适应性和材料适应性,充分考虑材料特性:趋肤效应、介质损耗、频变材料;是精确求解复杂材料复杂结构问题的最佳利器,有限元算法采用四面体网格,对仿真物体能够很好的进行还原。
FEM算法的支配方程见下图:
HFSS有限元算法在网格划分方面能够支持自适应网格剖分、网格加密、曲线型网格,在求解时支持切向矢量基函数、混合阶基函数和直接法、迭代法、区域分解法的强大的矩阵求解技术。
在应用领域,HFSS主要针对复杂结构进行求解,尤其是对于一些内部问题的求解,比高速信号完整性分析,阵列天线设计,腔体问题及电磁兼容等应用场景,非常适合有限元算法求解。
有限元算法结合ANSYS公司的HPC模块,ANSYS HFSS有限元算法可以进行电大尺寸物体的计算,大幅度提升仿真工程师的工作效率。针对宽带问题,FEM推出了宽带自适应网格剖分,大大提升了仿真精度。
全波算法-积分方程算法( IE)
积分方程算法基于麦克斯维方程的积分形式,同时也基于格林函数,所以可自动满足辐射边界条件,对于简单模型及材料的辐射问题,具有很大的优势,但原始的积分方程法计算量太大,很难用于实际的数值计算中,针对此问题, HFSS 中的 IE算法提供了两种加速算法,一种是 ACA 加速,一种是 MLFMM,分布针对不同的应用类型。 ACA 方法基于数值层面的加速技术,具有更好的普适性,但效率相比 MLFMM 稍差, MLFMM 算法基于网格层面的加速,对金属材料,松散结构,具有更高的效率。
IE算法的支配方程见下图:
IE算法是三维矩量法积分方程技术,支持三角形网格剖分。IE算法不需要像FEM算法一样定义辐射边界条件,在HFSS中主要用于高效求解电大尺寸、开放结构问题。与HFSS FEM算法一样,支持自适应网格技术,也可以高精度、高效率解决客户问题,同时支持将FEM的场源链接到IE中进行求解。HFSS-IE算法对金属结构具有很高的适应性,其主要应用领域天线设计、天线布局、 RCS、 EMI/EMC仿真等方向。
高频近似算法-PO算法
FEM算法和IE算法是精确的全波算法,在超大电尺寸问题上,使用精确全波算法会造成效率的降低。针对超大电尺寸问题,ANSYS推出PO(物理光学法)算法,PO 算法属于高频算法,非常适合求解此类问题,在适合其求解的问题中,具有非常好的效率优势。
PO算法主要原理为射线照射区域产生感应电流,而且在阴影区域设置为零电流,不考虑射线追迹或多次反射,以入射波作为激励源,将平面波或链接FEM(IE)的场数据作为馈源。但由于不考虑射线的多次反射和绕射等现象,一般针对物理尺寸超大,结构均匀的物体电磁场计算,在满足精度的要求,相比全波算法效率明显提高。比如大平台上的天线布局,大型反射面天线等等。
高频近似算法-SBR+算法
PO算法可以解决超大电尺寸问题的计算,但由于未考虑到多次反射等物理物体,主要用于结构均匀物理的电磁场计算。针对复杂结构且超大电尺寸问题,ANSYS通过收购Delcross公司(Savant软件)引入了SBR+算法, SBR+是在SBR算法(天线发射出射线,在表面“绘制” PO电流)的基础上考虑了爬行波射线(沿着表面追迹射线)、物理绕射理论PTD(修正边缘处的PO电流)、一致性绕射理论UTD(沿着边缘发射衍射射线,绘制阴影区域的电流),因此SBR+算法是高频射线方法,具有非常高效的速度,同时具有非常好的精度,在大型平台的天线布局中效果非常好。
SBR+支持从FEM、IE中导入远场辐射方向图或者电流源,也支持导入相应的测试数据,SBR+算法主要用于天线安装分析,支持多核、GPU等并行求解方式并且大多数任务可在低于8 GB内存下完成。
混合算法( FEBI, IE-Region,PO-Region,SBR+ Region)
前面对频率内的各种算法做了介绍并说明了各种算法应用的场景,很多时候碰到的工程问题既包括复杂结构物理也包括超大尺寸物理,如新能源汽车上的天线布局问题,对仿真而言,最好的精度是用全波算法求解,最快的速度是采用近似算求解,针对该问题,ANSYS公司将FEM算法、 IE 算法、PO 算法、SBR+算法等融合起来,推出混合算法。在一个应用案例中,采用不同算法的优点而回避不同算法的缺点,可极大限度的提高算法的效率,以及成为频域内解决大型复杂问题的必备算法。
HFSS中FEM与IE可以通过IE Region与FEBI边界进行混合求解,FEM与PO、SBR+算法可以通过添加PO Region及SBR+ Region进行混合,混合算法的使用扩大了HFSS的使用范围。
时域算法-transient算法
HFSS时域求解是基于间断伽略金法(discontinuous Galerkin method, DGTD)的三维全波电磁场仿真求解器,采用基于四面体有限元技术,能得到和HFSS频域求解器一样的自适应网格剖分精度,该技术使得HFSS的求精精度成为电磁场行业标准。这项技术完善了HFSS的频域求解器技术,帮助工程师对更加深入详细了解其所设计器件的电磁性能。
Transient算法支配方程见下图:
采用HFSS-Transient算法,工程师可利用短脉冲激励对静电放电、电磁干扰、雷击和等应用问题开展研究,还包括时域反射阻抗以及短时激励下的瞬态场显示也可以借助它来完成。
谐振分析-Eigenmode算法
谐振特性是每个结构都存在固有的电磁谐振,谐振的模式、频率和品质因子,与其结构尺寸相关,这些谐振既可能是干扰源的放大器,也可能是敏感电路的噪声接收器。谐振会导致信号完整性、电源完整性和电磁兼容问题,因而了解谐振对加强设计可靠性很有帮助。
Eigenmode算法支配方程见下图:
在HFSS中,使用eigenmode算法可计算三维结构谐振模式,并可呈现图形化空间的谐振电压波动,分析结构的固有谐振特性。依据谐振分析的结果,指导机箱内设备布局和PCB层叠布局,改善电磁兼容特性。
总结
HFSS里面有各种不同的算法,有全波算法、近似算法以及时域算法,工程师可以格局需要选择不同算法(最高的精度和最高的效率)。首先针对频域算法,使用范围见图14,通常FEM算法和IE算法非常适合于中小尺寸问题,对大型问题,FEM/IE运行时间/内存需求非常巨大; PO方法适合解决超大电尺寸问题,但对问题复杂度有限制,通常通常不能提供客户所期望的精度,但对于均匀物体是一个很好的选择;SBR+算法适合解决超大电尺寸问题,对复杂结构也能够提供很好的精度和速度;针对既有电小尺寸复杂结构计算问题,又有电大尺寸布局计算问题,混合算法是一个很好的选择。Transient算法适合解决与时间相关的电磁场问题,如ESD、TDR等;Eigenmode算法专门针对谐振仿真。
想要更多,点击此处,关注技术邻官网
⑷ 对称加密算法的应用模式
加密模式(英文名称及简写) 中文名称 Electronic Code Book(ECB) 电子密码本模式 Cipher Block Chaining(CBC) 密码分组链接模式 Cipher Feedback Mode(CFB) 加密反馈模式 Output Feedback Mode(OFB) 输出反馈模式 ECB:最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况下很少用。
CBC:明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的喊空密文,这是目前应用最广泛的模式。CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)。
CFB:类似于自同步序列密码,分组加密后,按8位分组将密文和明文进行移位异或后得到输出同时反馈回移位寄存器,优点最小可以按字节进行加解纳洞密,也可以是n位的,CFB也是上下文相关的,CFB模式下,明文的一个郑茄瞎错误会影响后面的密文(错误扩散)。
OFB:将分组密码作为同步序列密码运行,和CFB相似,不过OFB用的是前一个n位密文输出分组反馈回移位寄存器,OFB没有错误扩散问题。
⑸ 求大神简述一下LLE算法(或降维算法)在模式识别和数据挖掘中是怎样被应用的呢,谢谢
关于LLE算法具体的理论部分你可参考http://www.pami.sjtu.e.cn/people/xzj/introcelle.htm
Locally linear embedding (LLE),使用这种算法可以进行非线性降维,关键是其能够使降维后的数据保持原有拓扑结构
先给出一张下面算法得到的图 ,图中第一幅
LLE算法可以归结为三步:
(1)寻找每个样本点的k个近邻点;
(2)由每个样本点的近邻点计算出该样本点的局部重建权值矩阵;
(3)由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出值。
为原始数据,第三个为降维后的数据,可以看出处理后的低维数据保持了原有的拓扑结构。
另,本人对LLE算法不是很熟悉,在此介绍一下其他降维算法的使用,以SVD算法为例。
电影推荐。
(1)假设现在有一个用户和电影评分的二维矩阵,矩阵内容是用户对电影的评分,现有得知某个用户对部分电影的评分,由此为该用户推荐他可能喜欢的电影。
(2)假设用户有100W,电影有100W部,那么对于任意一种推荐算法来说,这个数据量都很大,该问题无法在单机上进行运算解决;
(3)这100W维特征中必然存在一些几乎不重要的特征,这时,我们就需要用降维算法进行降维,降维的目的就是去掉大量的不重要的特征,以简化运算;
(4)在此例中,可以使用SVD(或SVD++)算法对矩阵进行降维
图片相似度
(1)通常,进行图片相似度判断首先会将图片通过傅里叶变换转换成数值代表的矩阵,矩阵代表着该图片,一般来说矩阵维数越高越精确
(2)同样,维数过高的情况下,相似度计算成本很高,因此同样需要降维,在图片相似度识别中常用的降维算法是PCA算法;
总之,降维的目的就是减少特征的维数,减少运算的成本。
以上皆为我的拙见,如有疑义请指正。
⑹ 字符串匹配算法的使用(未完待整理)
字符串的匹配在Java中都知道使用indexOf函数来实现,那么其匹配算法是怎么样的呢?
单模式和多模式的区别就是一次遍历主串能否将多个模式的字符串都查找出来。
英文全称为Brute Force,暴力匹配算法,匹配字符串的方法比较暴力,也比较简单易懂。其大概的思路就是:
我们可以看到,在极端情况下,在主串 aaaa...aab 中寻找模式串 aab ,那么总共需要寻找(n-m+1)次,且每次都需要比对m次,那么时间复杂度将是 (n-m+1)*m ,即 O(n*m) ;但实际上并不会这么低效,因为我们的使用场景中主串和模式串都不会太长,而且在每个子串和模式串进行比对时,只要中途有一个不匹配,那么当前比对就会提前结束,因此大部分情况下,时间复杂度都会比 O(n*m) 要好。
我们在BF算法的基础上引入哈希算法,我们不需要将每个子串与模式串逐个字符地进行比较,而是计算得出每个子串的hash值,然后和模式串的hash值进行比较,如果有相等的,那就说明有子串和模式串匹配上了。
虽然我们只需要比对模式串和子串的hash值就能得到匹配结果,次数为(n-m+1),但是对每个子串进行hash计算的时候,是要遍历每个字符的,因此次数也是m,那么总的时间复杂度还是 O(n*m) ,并没有明显地提升。
那么我们该如何想出一个办法,使得每个子串hash值的计算时间得到提升呢?这就是RK算法的精髓,假设子串包含的字符集中元素个数为k,那么就用k进制数来代表这个子串,然后hash的过程就是将这个k进制的数转换为十进制的数,这个十进制的数就是该子串的hash值。
相邻子串的hash值计算是有规律的,我们只需要遍历一次主串就能得到所有子串的hash值,算法复杂度为O(n),而不是像原先一样,每个子串都需要O(m)的时间复杂度。
然后将模式串的hash值和所有子串的hash值进行比较,每次比较的时间复杂度是 O(1) ,总共比较(n-m+1)次,所以RK算法的总的时间开销为 O(n)+O(1)*O(n-m+1) ,即为 O(n) ,时间复杂度比BF算法更加高效。
当然,有hash的地方就有可能会存在hash冲突,有可能子串和hash值和模式串的hash值是一样的,但内容就是不一样,此时怎么办呢?其实很简单,对于hash值一样的子串,我们增加双保险,再比较一下这m个字符是否都一样即可,总的时间开销为 O(n)+O(1)*O(n-m+1)+O(m) ,即为 O(n) 。
如果极端情况下出现了很多hash冲突呢?我们对于每个和模式串相同hash值的子串都需要逐一再进行比较,那么总的时间开销就会为 O(n)+O(1)*O(n-m+1)+O(m)*O(n-m+1) ,即为 O(n*m) ,不过这种概率太小了,大部分情况下都不会这样。
在真正的文本编辑器中查找和替换某个字符串时,使用的算法既不是上述的BF算法,也不是RK算法;BF算法只适合不是很长的主串,RK算法则要设计一个冲突概率很低的hash算法,这个比较困难,所以实际使用的是BM算法,它是工程中非常常用的一种字符串匹配算法,效率也是最高的。
算法的思想和过程有些复杂,待以后整理。
KMP算法在本质上是和BM算法一样的。算法的思想和过程有些复杂,待以后整理。
浏览器输入框中的智能输入匹配是怎么实现的,它是怎么做动态字符串匹配查找的呢?这就用到了Trie树。
又名字典树,是一种专门用来快速查找字符串前缀匹配结果的树形结构,其本质就是将所有字符串的重复的前缀合并在一起,构造一个多叉树。
其中,根节点不包含任何信息,每个节点表示一个字符,从根节点到红色节点的一条路径表示存储的一个字符串。当我们在如上Trie树中查找"he"时,发现"he"并非是一个字符串,而是"hello"和"her"的公共前缀,那么就会找到这两个字符串返回。
Trie树在内存中是如何存储的呢?因为每一个节点都可能是包含所有字符的,所以每一个节点都是一个数组(或者散列表),用来存储每个字符及其后缀节点的指针。
使用Trie树,最开始构建的时候,时间复杂度为 O(n) ,其中n为所有字符串长度之和,但是一旦构建完成,频繁地查询某个字符串是非常高效的,时间复杂度为 O(k) ,其中k为查找字符串的长度。
Trie树虽然查询效率很高,但是比较浪费内存,每一个节点都必须维护一个数组存放所有可能的字符数据及其指向下一个节点的指针,因此在所有字符串公共前缀并不多的时候,内存空间浪费地就更多了。这种问题其实也有对应的解决办法,我们可以不使用数组,而是使用有序数组、散列表、红黑树来存放,可以相应地降低性能来节省内存空间。
Trie树除了可以实现浏览器动态输入内容查找候选项的功能外,还可以实现多模式地敏感词匹配功能。假设我们需要对用户输入的内容进行敏感词检查,将所有的敏感内容用***代替,那么该如何实现呢?
首先我们可以维护一个敏感词字典,使用上述四种单模式匹配算法也可以实现,但是需要遍历N次用户输入的内容,其中N是所有敏感词的模式串,显得非常低效。但是我们如果将敏感词字典维护为一个Trie树,然后将用户输入的内容从位置0开始在Trie树中进行查询,如果匹配到红色节点,那么说明有敏感词;如果没有匹配到红色节点,就从用户输入内容的下一个位置开始继续在Trie树中查询,直至将用户输入内容遍历完,因此我们只是遍历了一遍主串。
然而更高效的多模式字符串匹配使用地更多的是如下的AC自动机。
如果把Trie树比作BF算法,KMP算法是BF算法的改进,那么AC自动机就是利用同样的思想改进了Trie树。
算法的思想和过程有些复杂,待以后整理。
⑺ 神经网络算法的优势与应用
人工神经网络(ANN)以大脑处理机制作为基础,开发用于建立复杂模式和预测问题的算法。
首先了解大脑如何处理信息:
在大脑中,有数亿个神经元细胞,以电信号的形式处理信息。外部信息或者刺激被神经元的树突接收,在神经元细胞体中处理,转化成输出并通过轴突,传递到下一个神经元。下一个神经元可以选择接受它或拒绝它,这取决于信号的强度。
[图片上传失败...(image-cc0d9d-1512012156403)]
现在,让我们尝试了解 ANN 如何工作:
这里, $w_1$ , $w_2$ , $w_3$ 给出输入信号的强度
从上面可以看出,ANN 是一个非常简单的表示大脑神经元如何工作的结构。
为了使事情变得更清晰,用一个简单的例子来理解 ANN:一家银行想评估是否批准贷款申请给客户,所以,它想预测一个客户是否有可能违约贷款。它有如下数据:
所以,必须预测列 X。更接近 1 的预测值表明客户更可能违约。
基于如下例子的神经元结构,尝试创建人造神经网络结构:
通常,上述示例中的简单 ANN 结构可以是:
[图片上传失败...(image-1b4516-1512012156403)]
ANN 有一些关键优势,使它们最适合某些问题和情况:
ANN 是具有广泛应用的强大的模型。以上列举了几个突出的例子,但它们在医药、安全、银行、金融、政府、农业和国防等领域有着广泛的应用。
⑻ 聚类算法的算法用途
聚类的用途是很广泛的。
在商业上,聚类可以帮助市场分析人员从消费者数据库中区分出不同的消费群体来,并且概括出每一类消费者的消费模式或者说习惯。它作为数据挖掘中的一个模块,可以作为一个单独的工具以发现数据库中分布的一些深层的信息,并且概括出每一类的特点,或者把注意力放在某一个特定的类上以作进一步的分析;并且,聚类分析也可以作为数据挖掘算法中其他分析算法的一个预处理步骤。
聚类分析的算法可以分为划分法(Partitioning Methods)、层次法(Hierarchical Methods)、基于密度的方法(density-based methods)、基于网格的方法(grid-based methods)、基于模型的方法(Model-Based Methods)。