相似算法学习

  当今越来越多的应用需用到相似算法,世间事物因种种原因都会变形,转换。在这种情况下计算机里相似算法的重要性就体现了。

  常用的算法有:
  
   1. levenshtein 又称编辑距离
     
protected function costLeven(a:Array,b:Array):uint{
			
			// point
			if (a[0]==-1){
				return b.length==0 ? 0 : 100000;
			}
			
			// precalc difangles
			var d:Array=fill2DTable(a.length+1,b.length+1,0);
			var w:Array=d.slice();
			
			for (var x:uint=1;x<=a.length;x++){
				for (var y:uint=1;y<b.length;y++){
					d[x][y]=difAngle(a[x-1],b[y-1]);
				}
			}
			
			// max cost
			for (y=1;y<=b.length;y++)w[0][y]=100000;
			for (x=1;x<=a.length;x++)w[x][0]=100000;
			w[0][0]=0;
			
			// levensthein application
			var cost:uint=0;
			var pa:uint;
			var pb:uint;
			var pc:uint;
			
			for (x=1;x<=a.length;x++){
				for (y=1;y<b.length;y++){
					cost=d[x][y];
					pa=w[x-1][y]+cost;
					pb=w[x][y-1]+cost;
					pc=w[x-1][y-1]+cost;
					w[x][y]=Math.min(Math.min(pa,pb),pc)
				}
			}
			
			return w[x-1][y-1];
		}


    2. Jaro-Winkler Distance

    3. n-gram

图形相拟的算法:

   1.sift算法
   2.surf算法

   

你可能感兴趣的:(算法)