三维重建13X:一些算法试题-今日头条AI-Lab
?被人牽著鼻子走,到了地方還墨明棋妙地吃一頓磚頭。今日頭條AI-Lab,其實我一直發現,最擅長的還是點云圖像處理,且只是點云處理。
一、C++題目???
?? ?? New 與Malloc的區別:
? ??? 看這個:New與Malloc區別???? ????
????? 雖然malloc()函數的類型是(void *),任何類型的指針都可以轉換成(void *),但是最好還是在前面進行強制類型轉換,因為這樣可以躲過一些編譯器的檢查。
1) malloc與free是C++/C語言的標準庫函數,new/delete是C++的運算符。它們都可用于申請動態內存和釋放內存。2) 對于非內部數據類型的對象而言,光用maloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。由于malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加于malloc/free。因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以及一個能完成清理與釋放內存工作的運算符delete。注意new/delete不是庫函數。我們不要企圖用malloc/free來完成動態對象的內存管理,應該用new/delete。由于內部數據類型的“對象”沒有構造與析構的過程,對它們而言malloc/free和new/delete是等價的。3) 既然new/delete的功能完全覆蓋了malloc/free,為什么C++不把malloc/free淘汰出局呢?這是因為C++程序經常要調用C函數,而C程序只能用malloc/free管理動態內存。如果用free釋放“new創建的動態對象”,那么該對象因無法執行析構函數而可能導致程序出錯。如果用delete釋放“malloc申請的動態內存”,結果也會導致程序出錯,但是該程序的可讀性很差。所以new/delete必須配對使用,malloc/free也一樣。
C++11 的新特性
????? ? unique_ptr和shared_ptr的區別:所有權概念。p.671頁。對于特定的圖像,只能有一個智能指針擁有它,這樣只有擁有對象的智能指針的構造函數會刪除該對象。然后,讓賦值操作轉讓所有權。這就是用于auto_ptr和unique_ptr的策略,當unique的策略更為嚴格。
??? ?? 使用引用計數,是shared_ptr采用的策略,僅當最后一個指針過期時,才調用delete。unique能夠區分安全和不安全的用法,因為使用了C++11的特性移動構造函數和右值引用功能。
??????? 注意:使用new分配內存時,才能使用auto和share,使用new[]分配內存時,不能使用它們。不使用new分配內存時,不能使用auto和share;不使用new或者new[]時,不能使用unique_ptr。
? ? ?? 移動語義:移動語義避免了移動原始數據,只是修改了記錄。實現方法原理:讓編譯器知道什么時候需要復制,什么時候不需要復制,這就是右值引用發揮作用的地方。
??? ?? 右值引用:使用移動構造函數。C++.p808.
?
二、多視幾何
?????? 極線約束
?
三、矩陣分析
Cholesky分解和QR分解的區別:建議還是看書,好好把題目再做一遍。??
Cholesky分解法又叫平方根法,是求解對稱正定線性方程組最常用的方法之一。對于一般矩陣,為了消除LU分解的局限性和誤差的過分積累,采用了選主元的方法,但對于對稱正定矩陣而言,選主元是不必要的。
-LU分解、LDLT分解、Cholesky分解:
???? Cholesky分解是一種分解矩陣的方法, 在線形代數中有重要的應用。Cholesky分解把矩陣分解為一個下三角矩陣以及它的共軛轉置矩陣的乘積(那實數界來類比的話此分解就好像求平方根)。與一般的矩陣分解求解方程的方法比較,Cholesky分解效率很高。
???? Cholesky分解的條件:
??? 一、Hermitianmatrix:矩陣中的元素共軛對稱(復數域的定義,類比于實數對稱矩陣)。Hermitiank意味著對于任意向量x和y,(x*)Ay共軛相等
??? 二、Positive-definite:正定(矩陣域,類比于正實數的一種定義)。正定矩陣A意味著,對于任何向量x,(x^T)Ax總是>零(復數域是(x*)Ax>0).
? ? ? Cholesky分解的形式:
????? 可記作A = L L*。其中L是下三角矩陣。L*是L的共軛轉置矩陣。
????? 可以證明,只要A滿足以上兩個條件,L是唯一確定的,而且L的對角元素肯定是正數。反過來也對,即存在L把A分解的話,A滿足以上兩個條件。
??? ?? 如果A是半正定的(semi-definite),也可以分解,不過這時候L就不唯一了。
?????? 特別的,如果A是實數對稱矩陣,那么L的元素肯定也是實數。
?????? 另外,滿足以上兩個條件意味著A矩陣的特征值都為正實數,因為Ax = lamda * x,(x*)Ax = lamda * (x*)x > 0, lamda > 0.
-QR分解是將矩陣分解為一個正交矩陣與上三角矩陣的乘積。用一張圖可以形象地表示QR分解:
??????
??? 這其中, Q為正交矩陣,QTQ=I,R為上三角矩陣。 實際中,QR分解經常被用來解線性最小二乘問題。
??? Cholesky分解只能用于正定對稱矩陣,但實際方程組中,正定對稱矩陣不一定滿足,在接近正定的矩陣時,會產生病態矩陣問題。QR是一種泛用的方法。
常見的矩陣分解有可逆方陣的三角(LU)分解、任意滿秩矩陣的正交三角(QR)分解、對稱正定矩陣的Cholesky分解,以及任意方陣的Schur分解、Hessenberg分解、EVD分解、SVD分解、GMD分解等。 (1)可逆方陣的LU分解矩陣的LU分解就是將一個矩陣表示為一個交換下三角矩陣和一個上三角矩陣的乘積形式。線性代數中已經證明,只要方陣A是非奇異的(即可逆的),LU分解總是可以進行的。 當L為單位下三角矩陣而U為上三角矩陣時,此三角分解稱為杜利特(Doolittle)分解。當L為下三角矩陣而U為單位上三角矩陣時,此三角分解稱為克勞特(Crout)分解。顯然,如果存在,矩陣的三角分解不是唯一的。 (PS:方陣A可唯一地分解為A=LDU(其中L,U分別為單位下,上三角矩陣,D為對角矩陣)的充分必要條件為A的前n-1個順序主子式都不為0。特別:對n階對稱正定矩陣,存在一個非奇異下三角矩陣L,使得A=LL'成立。) MATLAB提供的lu函數用于對矩陣進行LU分解,其調用格式為:[L,U] =lu(X):產生一個上三角陣U和一個變換形式的下三角陣L(行交換),使之滿足X=LU。注意,這里的矩陣X必須是方陣。[L,U,P]=lu(X):產生一個上三角陣U和一個下三角陣L以及一個置換矩陣P,使之滿足PX=LU。當然矩陣X同樣必須是方陣。 (2) 滿秩矩陣的QR分解 對矩陣X進行QR分解,就是把X分解為一個正交矩陣Q和一個上三角矩陣R的乘積形式。QR分解只能對方陣進行。MATLAB的函數qr可用于對矩陣進行QR分解,其調用格式為:[Q,R] =qr(X): 產生一個一個正交矩陣Q和一個上三角矩陣R,使之滿足X=QR。[Q,R,E]=qr(X):產生一個一個正交矩陣Q、一個上三角矩陣R以及一個置換矩陣E,使之滿足XE=QR。 (3)對稱正定矩陣的Cholesky分解如果矩陣X是對稱正定的,則Cholesky分解將矩陣X分解成一個下三角矩陣和上三角矩陣的乘積。設上三角矩陣為R,則下三角矩陣為其轉置,即X=R'R。MATLAB函數chol(X)用于對矩陣X進行Cholesky分解,其調用格式為:R =chol(X):產生一個上三角陣R,使R'R=X。若X為非對稱正定,則輸出一個出錯信息。[R,p]=chol(X):這個命令格式將不輸出出錯信息。當X為對稱正定的,則p=0,R與上述格式得到的結果相同;否則p為一個正整數。如果X為滿秩矩陣,則R為一個階數為q=p-1的上三角陣,且滿足R'R=X(1:q,1:q)。 (4)任意方陣的Schur分解任意一個n階方陣X可以分解為X=URU',其中U為酉矩陣,R為上三角schur矩陣且其主對角線上的元素為X的特征值。[U,R]=schur(X) (5)任意方陣的Hessenberg分解任意一個n階方陣X可以分解為X=PHP', 其中P為酉矩陣, H的第一子對角線下的元素均為0,即H為Hessenberg矩陣。[P,H]=hess(X) (6)任意方陣的特征值分解EVD任意一個n階方陣X可以分解為XV=VD,其中D為X的特征值對角陣,V為X的特征向量矩陣。[V,D]=eig(X)[V,D]=eig(X,Y)計算廣義特征值矩陣D和廣義特征值向量矩陣V,使得XV=YVD。 (7)任意矩陣的奇異值分解SVD任意一個m*n維的矩陣X可以分解為X=USV',U,V均為酉矩陣,S為m*n維的對角矩陣,其對角線元素為X的從大到小排序的非負奇異值。[U,S,V]=svd(X) (8) 任意矩陣的幾何均值分解GMD任意矩陣m*n維的矩陣X可以分解為X=QRP', Q,P均為酉矩陣,R為k*k維的實正線上三角矩陣,其主對角線元素均等于X的所有K個正奇異值的幾何均值,k=rank(X)。 (PS: 一個n × n的實對稱矩陣 M 是正定的當且僅當對于所有的非零實系數向量z,都有 zTMz > 0。其中zT 表示z的轉置。對于復數的情況,定義則為:一個n × n的埃爾米特矩陣 M 是正定的當且僅當對于每個非零的復向量z,都有z*Mz > 0。其中z* 表示z的共軛轉置。由于 M是埃爾米特矩陣,經計算可知,對于任意的復向量z,z*Mz必然是實數,從而可以與0比較大小。因此這個定義是自洽的。正定方陣M的所有的特征值 λi都是正的。)?
四、編程題目
?
???????廣度優先遍歷--使用隊列;
?????? 使用一個先進先出的隊列,可以實現一個二叉樹的廣度優先遍歷BFS。
?
五、深度圖像
? ? ? ? 面元提取、三維特征、
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的三维重建13X:一些算法试题-今日头条AI-Lab的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dnf使徒能量怎么得 地下城与勇士
- 下一篇: 英雄联盟云顶之奕云霄怎么合成