⑴ 設計公式識別演算法
遞歸是計算機科學的一個重要概念,遞歸的方法是程序設計中有效的方法,採用遞歸編寫
程序能是程序變得簡潔和清晰.
2.1 遞歸的概念
1.概念
一個過程(或函數)直接或間接調用自己本身,這種過程(或函數)叫遞歸過程(或函數).
如:
procere a;
begin
.
.
.
a;
.
.
.
end;
這種方式是直接調用.
又如:
procere b; procere c;
begin begin
. .
. .
. .
c; b;
. .
. .
. .
end; end;
這種方式是間接調用.
例1計算n!可用遞歸公式如下:
1 當 n=0 時
fac(n)={n*fac(n-1) 當n>0時
可編寫程序如下:
program fac2;
var
n:integer;
function fac(n:integer):real;
begin
if n=0 then fac:=1 else fac:=n*fac(n-1)
end;
begin
write('n=');readln(n);
writeln('fac(',n,')=',fac(n):6:0);
end.
例2 樓梯有n階台階,上樓可以一步上1階,也可以一步上2階,編一程序計算共有多少種不同的走法.
設n階台階的走法數為f(n)
顯然有
1 n=1
f(n)={2 n=2
f(n-1)+f(n-2) n>2
可編程序如下:
program louti;
var n:integer;
function f(x:integer):integer;
begin
if x=1 then f:=1 else
if x=2 then f:=2 else f:=f(x-1)+f(x-2);
end;
begin
write('n=');read(n);
writeln('f(',n,')=',f(n))
end.
2.2 如何設計遞歸演算法
1.確定遞歸公式
2.確定邊界(終了)條件
練習:
用遞歸的方法完成下列問題
1.求數組中的最大數
2.1+2+3+...+n
3.求n個整數的積
4.求n個整數的平均值
5.求n個自然數的最大公約數與最小公倍數
6.有一對雌雄兔,每兩個月就繁殖雌雄各一對兔子.問n個月後共有多少對兔子?
7.已知:數列1,1,2,4,7,13,24,44,...求數列的第 n項.
2.3典型例題
例3 梵塔問題
如圖:已知有三根針分別用1,2,3表示,在一號針中從小放n個盤子,現要求把所有的盤子
從1針全部移到3針,移動規則是:使用2針作為過度針,每次只移動一塊盤子,且每根針上
不能出現大盤壓小盤.找出移動次數最小的方案.
程序如下:
program fanta;
var
n:integer;
procere move(n,a,b,c:integer);
begin
if n=1 then writeln(a,'--->',c)
else begin
move(n-1,a,c,b);
writeln(a,'--->',c);
move(n-1,b,a,c);
end;
end;
begin
write('Enter n=');
read(n);
move(n,1,2,3);
end.
例4 快速排序
快速排序的思想是:先從數據序列中選一個元素,並將序列中所有比該元素小的元素都放到它的右邊或左邊,再對左右兩邊分別用同樣的方法處之直到每一個待處理的序列的長度為1, 處理結束.
程序如下:
program kspv;
const n=7;
type
arr=array[1..n] of integer;
var
a:arr;
i:integer;
procere quicksort(var b:arr; s,t:integer);
var i,j,x,t1:integer;
begin
i:=s;j:=t;x:=b[i];
repeat
while (b[j]>=x) and (j>i) do j:=j-1;
if j>i then begin t1:=b[i]; b[i]:=b[j];b[j]:=t1;end;
while (b[i]<=x) and (i<j) do i:=i+1;
if i<j then begin t1:=b[j];b[j]:=b[i];b[i]:=t1; end
until i=j;
b[i]:=x;
i:=i+1;j:=j-1;
if s<j then quicksort(b,s,j);
if i<t then quicksort(b,i,t);
end;
begin
write('input data:');
for i:=1 to n do read(a[i]);
writeln;
quicksort(a,1,n);
write('output data:');
for i:=1 to n do write(a[i]:6);
writeln;
end.
⑵ 圖像識別演算法都有哪些
圖像識別,是指利用計算機對圖像進行處理、分析和理解,以識別各種不同模式的目標和對像的技術。一般工業使用中,採用工業相機拍攝圖片,然後再利用軟體根據圖片灰階差做進一步識別處理,圖像識別軟體國外代表的有康耐視等,國內代表的有圖智能等。另外在地理學中指將遙感圖像進行分類的技術。
⑶ OCR文字識別用的是什麼演算法
ocr文字識別的使用的演算法,下面就以迅捷辦公中的文字識別軟體為例:
1、打開ocr文字識別軟體,關閉提示窗;2、通過左上角的添加文件,將需要識別的圖片添加進去;3、點擊右下角的一鍵識別按鈕,開始識別。
上面便是ocr文字識別軟體的使用方法啦!
⑷ 人臉識別的識別演算法
人臉識別的基本方法
人臉識別的方法很多,以下介紹一些主要的人臉識別方法。
(1)幾何特徵的人臉識別方法
幾何特徵可以是眼、鼻、嘴等的形狀和它們之間的幾何關系(如相互之間的距離)。這些演算法識別速度快,需要的內存小,但識別率較低。
(2)基於特徵臉(PCA)的人臉識別方法
特徵臉方法是基於KL變換的人臉識別方法,KL變換是圖像壓縮的一種最優正交變換。高維的圖像空間經過KL變換後得到一組新的正交基,保留其中重要的正交基,由這些基可以張成低維線性空間。如果假設人臉在這些低維線性空間的投影具有可分性,就可以將這些投影用作識別的特徵矢量,這就是特徵臉方法的基本思想。這些方法需要較多的訓練樣本,而且完全是基於圖像灰度的統計特性的。目前有一些改進型的特徵臉方法。
(3)神經網路的人臉識別方法
神經網路的輸入可以是降低解析度的人臉圖像、局部區域的自相關函數、局部紋理的二階矩等。這類方法同樣需要較多的樣本進行訓練,而在許多應用中,樣本數量是很有限的。
(4)彈性圖匹配的人臉識別方法
彈性圖匹配法在二維的空間中定義了一種對於通常的人臉變形具有一定的不變性的距離,並採用屬性拓撲圖來代表人臉,拓撲圖的任一頂點均包含一特徵向量,用來記錄人臉在該頂點位置附近的信息。該方法結合了灰度特性和幾何因素,在比對時可以允許圖像存在彈性形變,在克服表情變化對識別的影響方面收到了較好的效果,同時對於單個人也不再需要多個樣本進行訓練。
(5)線段Hausdorff 距離(LHD) 的人臉識別方法
心理學的研究表明,人類在識別輪廓圖(比如漫畫)的速度和准確度上絲毫不比識別灰度圖差。LHD是基於從人臉灰度圖像中提取出來的線段圖的,它定義的是兩個線段集之間的距離,與眾不同的是,LHD並不建立不同線段集之間線段的一一對應關系,因此它更能適應線段圖之間的微小變化。實驗結果表明,LHD在不同光照條件下和不同姿態情況下都有非常出色的表現,但是它在大表情的情況下識別效果不好。
(6)支持向量機(SVM) 的人臉識別方法
近年來,支持向量機是統計模式識別領域的一個新的熱點,它試圖使得學習機在經驗風險和泛化能力上達到一種妥協,從而提高學習機的性能。支持向量機主要解決的是一個2分類問題,它的基本思想是試圖把一個低維的線性不可分的問題轉化成一個高維的線性可分的問題。通常的實驗結果表明SVM有較好的識別率,但是它需要大量的訓練樣本(每類300個),這在實際應用中往往是不現實的。而且支持向量機訓練時間長,方法實現復雜,該函數的取法沒有統一的理論。
人臉識別的方法很多,當前的一個研究方向是多方法的融合,以提高識別率。
在人臉識別中,第一類的變化是應該放大而作為區分個體的標準的,而第二類的變化應該消除,因為它們可以代表同一個個體。通常稱第一類變化為類間變化,而稱第二類變化為類內變化。對於人臉,類內變化往往大於類間變化,從而使在受類內變化干擾的情況下利用類間變化區分個體變得異常困難。正是基於上述原因,一直到21 世紀初,國外才開始出現人臉識別的商用,但由於人臉識別演算法非常復雜,只能採用龐大的伺服器,基於強大的計算機平台。
如果可以的話,可以Te一下colorreco,更好的技術解答。
⑸ 人臉識別演算法是什麼
已經涌現山大量的克服光照變化的人臉識別演算法,安視寶在這方面有很大程度上推動了該項技術的發展。現有的解決光照變化的方法.
⑹ OCR文字識別的演算法是什麼
文通科技ocr文字識別技術是應用清華大學核心識別技術,經過多年優化完成的識別技術,對於橫豎班,中英文混版的文字識別效果都非常好
⑺ 人臉識別演算法的種類
二維人臉識別演算法
三維人臉識別演算法
⑻ 圖像識別的演算法
圖片識別是一個很大的領域,識別也要分很多場景的,有的識別紋理、有的識別顏色、有的識別大小等,都不一樣的。識別之前也有先進行聚類和分類的。
⑼ 模式識別演算法
matlab 程序
http://www.cs.tut.fi/sgn/m2obsi/ex/kmeans.m
更多資源查看http://people.revole.com/kardi/tutorial/kMean/Resources.htm
幫你過來。
% kmeans.m : K-means clustering algorithm % Copyright (c) 2002 - 2003 % Jussi Tohka % Institute of Signal Processing % Tampere University of Technology % P.O. Box 553 FIN-33101 % Finland % [email protected] % ------------------------------- % Permission to use, , modify, and distribute this software % for any purpose and without fee is hereby % granted, provided that the above right notice appear in all % copies. The author and Tampere University of Technology make no representations % about the suitability of this software for any purpose. It is % provided "as is" without express or implied warranty. % ***************************************************************** % [c,costfunctionvalue, datalabels] = kmeans(data,k,c_init,max_iter) % Input: % data is the n x m matrix, where n is the number of data points % and m is their dimensionality. % k is the number of clusters % c_init is the initializations for cluster centres. This must be a % k x m matrix. (Optional, can be generated randomly). % max_iter is the maximum number of iterations of the algorithm % (Default 50). % Output: % c is the k x m matrix of final cluster centres. % costfunctionvalue is the value of cost function after each % iteration. % datalabels is a n x 1 vector of labeling of data. function [c,costfunctionvalue, datalabels,inter] = kmeans(data,k,varargin); datasize = size(data); n = datasize(1); m = datasize(2); if n < m fprintf(1,'Error: The number of datapoints must be greater than \n'); fprintf(1,'their dimension. \n'); return; end if length(varargin) > 0 c_init = varargin{1}; else % First, select k random numbers from 1 to n WITHOUT repetition randomindex = zeros(k,1); for i = 1:k randomindex(i) = unidrnd(n + 1 - i); randomindex(i) = randomindex(i) + sum(randomindex(1:i-1) <= ... randomindex(i)); end c_init = data(randomindex,:); end if size(c_init) ~= [k m]; fprintf(1,'Error: The size of c_init is incorrect.'); end if length(varargin) > 1 max_iter = varargin{2}; else max_iter = 50; end % Start the algorithm iter = 0; changes = 1; distances = zeros(n,k); costfunctionvalue = zeros(max_iter + 1,1); c = c_init; datalabels = zeros(n,1); while iter < max_iter & changes iter = iter + 1; fprintf(1,'#'); old_datalabels = datalabels; % Compute the distances between cluster centres and datapoints for i = 1:k dist(:,i) = sum((data - repmat(c(i,:),n,1)).^2,2); end % Label data points based on the nearest cluster centre [tmp,datalabels] = min(dist,[],2); % compute the cost function value costfunctionvalue(iter) = sum(tmp); % calculate the new cluster centres for i = 1:k c(i,:) = mean(data(find(datalabels == i),:)); end % study whether the labels have changed changes = sum(old_datalabels ~= datalabels); inter(iter).datalabels = datalabels; inter(iter).c = c; end for i = 1:k dist(:,i) = sum((data - repmat(c(i,:),n,1)).^2,2); end [tmp,datalabels] = min(dist,[],2); % compute the cost function value costfunctionvalue(iter + 1) = sum(tmp); fprintf(1,'\n');
希望對您有所幫助