A. ICP演算法的介紹
三維空間R3存在兩組含有n個坐標點的點集,分別為: PL和PR。三維空間點集PL中各點經過三維空間變換後與點集PR中點一一對應,其單點變換關系式為:(0-1)上式中,R為三維旋轉矩陣,t為平移向量。在ICP配准方法中,空間變換參數向量X可表示為[9] 。參數向量中四元數參數滿足約束條件為:(0-2)根據迭代的初值X0,由式(0-1)計算新點集Pi為:(0-3)式中,P表示原始未修改過的點集,Pi的下標i表示迭代次數,參數向量X的初始值X0為 。根據以上數據處理方法,ICP配准演算法可以概括為以下七個步驟:1) 根據點集Plk中的點坐標,在曲面S上搜索相應就近點點集Prk;2) 計算兩個點集的重心位置坐標,並進行點集中心化生成新的點集;3) 由新的點集計算正定矩陣N,並計算N的最大特徵值及其最大特徵向量;4) 由於最大特徵向量等價於殘差平方和最小時的旋轉四元數,將四元數轉換為旋轉矩陣R;5) 在旋轉矩陣R被確定後,由平移向量t僅僅是兩個點集的重心差異,可以通過兩個坐標系中的重心點和旋轉矩陣確定;6) 根據式(0-3),由點集Plk計算旋轉後的點集P』lk。通過Plk與P』lk計算距離平方和值為fk+1。以連續兩次距離平方和之差絕對值 作為迭代判斷數值;7) 當 時,ICP配准演算法就停止迭代,否則重復1至6步,直到滿足條件 後停止迭代
B. 非線性最小二乘法
一.梯度下降法以及Jacobian矩陣計算
在2010年的關於L-K和AAM的博客里提到,模板匹配公式的一階泰勒展開ΔT=J*Δp,J是用於梯度下降的Jacobian矩陣,是高維矢量函數值T=f(p)相對與參數矢量p變化時的增量(導數)。如果p是n維矢量,T是M維矢量,則J是一個[m*n]的矩陣。J在(i,j)處的元素值是(əTi/əpj)。
C. 求解常微分方程的初值問題,哪種演算法格式一般不單獨使用
求解常微分方程的初值問題,經典龍格-庫塔演算法演算法格式一般不單獨使用。
用ode函數求常微分方程(組)的初值問題的基本原則:對於剛性的常微分方程(組),可以考慮ode23t、ode23s、ode23tb和ode15s等函數來求解。對於非剛性的常微分方程(組),可以考慮ode113、ode45等函數來求解。
通常微分方程
在很多學科領域內有著重要的應用,自動控制、各種電子學裝置的設計、彈道的計算、飛機和導彈飛行的穩定性的研究、化學反應過程穩定性的研究等。這些問題都可以化為求常微分方程的解,或者化為研究解的性質的問題。應該說,應用常微分方程理論已經取得了很大的成就,但是,它的現有理論也還遠遠不能滿足需要,還有待於進一步的發展,使這門學科的理論更加完善。
D. 對聚類中心過於依賴的聚類演算法有哪些
層次聚類分析:
是創建一個層次以分解給定的數據集。該方法可以分為自上而下(分解)和自下而上(合並)兩種操作方式。為彌補分解與合並的不足,層次合並經常要與其它聚類方法相結合,如循環定位。典型的這類方法包括:
第一個是;BIRCH(Balanced Iterative Recing and Clustering using Hierarchies) 方法,它首先利用樹的結構對對象集進行劃分;然後再利用其它聚類方法對這些聚類進行優化。
第二個是CURE(Clustering Using REprisentatives) 方法,它利用固定數目代表對象來表示相應聚類;然後對各聚類按照指定量(向聚類中心)進行收縮。
第三個是ROCK方法,它利用聚類間的連接進行聚類合並。
最後一個CHEMALOEN,它則是在層次聚類時構造動態模型。
E. 作業調度演算法的選擇原則有哪幾個
批處理作業的調度演算法主要有以下幾種:
①先來先服務演算法。原則上按照作業進入輸入井的次序調度,如果作業的資源得不到滿足,將會推遲調度,它的資源得到滿足的時候會優先被調度進來。
優點:具有一定的公平性。
缺點:系統的吞吐率低,平均周轉時間長,有大作業到來的時,許多小作業推遲調度。
②計算時間短的作業優先.優先調度計算時間短的作業進行調度,資源不滿足的情況下推遲調度。在這種調度演算法下,要求用戶要對作業的計算時間預先有一個估計,調度以此為依據。
優點:由於被選中的作業計算時間,所以不能盡快地完成並退出系統,降低了作業的平均等待時間,提高了系統的吞吐率。
缺點:大作業會不滿意,而且極限情況下使得某些大作業始終得不到調度。
③響應比高者優先演算法。該演算法考慮了計算時間等待時間,既考慮了計算時間短的作業優先,又考慮了大作業長期等待的問題。所謂響應比是按照以下公式來定義的:
響應比R=等待時間/計算時間
這里的計算時間是估計的作業計算時間,從公式看,計算時間越短,響應比越高;而另一方面,大作業等待時間越長,響應比也會越大。一個作業完成以後,需要重新計算一下在輸入井中的各個作業的響應比,最高的將優先調度。
④優先數調度演算法。為每一個作業指定一個優先數,優先數高的作業先被調度。對於優先數相等的作業採用先來先服務的策略。優先數的制定原則是:作業的緩急程序,估計的計算時間,作業的等待時間,資源申請情況等因素綜合考慮。
⑤均衡調度演算法。使用不同資源的進程同時執行,減少作業等待同類設備而耗費的時間,加快作業的執行。
F. ICP演算法的三維點雲演算法
三維激光掃描技術的快速發展,使其在各個領域得到廣泛應用。由於物理上的一些限制,一次三維激光掃描不能獲取掃描物體的全部數據,因此要對掃描點雲進行拼接。首先,對最常用的ICP演算法進行一系列研究,ICP演算法的前提條件是具有一個良好的配准初值,文中在配准初值的選取上採用主成分分析法,為後續ICP演算法的工作提供一個良好前提條件,增加點集預處理,點對查找上增加各種限制,採用kd-tree加速查找,以此對演算法進行改進,並通過實例來驗證本演算法的有效性及合理性。
G. 哪位大神有ICP(迭代最近點)演算法的C++代碼,可以對兩組三維點雲進行配準的,求一個能用的,感激不盡……
創建一個pcl::PointCloud實例Final對象,存儲配准變換後的源點雲,應用ICP演算法後,IterativeClosestPoint能夠保存結果點雲集,如果這兩個點雲匹配正確的話(也就是說僅僅對其中一個應用某種剛體變換,就可以得到兩個在同一坐標系下相同的點雲)
H. ICP演算法的迭代就近點演算法
在20世紀80年代中期,很多學者開始對點集數據的配准進行了大量研究。1987年,Horn[1]、Arun[2]等人用四元數法提出點集對點集配准方法。這種點集與點集坐標系匹配演算法通過實踐證明是一個解決復雜配准問題的關鍵方法。1992年,計算機視覺研究者Besl和Mckay[3]介紹了一種高層次的基於自由形態曲面的配准方法,也稱為迭代就近點法ICP(Iterative Closest Point)。以點集對點集(PSTPS)配准方法為基礎,他們闡述了一種曲面擬合演算法,該演算法是基於四元數的點集到點集配准方法。從測量點集中確定其對應的就近點點集後,運用Faugera和Hebert提出的方法計算新的就近點點集。用該方法進行迭代計算,直到殘差平方和所構成的目標函數值不變,結束迭代過程。ICP配准法主要用於解決基於自由形態曲面的配准問題。
迭代就近點法ICP就近點法經過十幾年的發展,不斷地得到了完善和補充。Chen和Medioni[4]及Bergevin等人[5]提出了point-to-plane搜索就近點的精確配准方法。Rusinkiewicz和Levoy提出了point-to-p rojection搜索就近點的快速配准方法。Soon-Yong和Murali提出了Contractive-projection-point搜索就近點的配准方法。此外,Andrew和Sing[6]提取了基於彩色三維掃描數據點紋理信息的數據配准方法,主要在ICP演算法中考慮三維掃描點的紋理色彩信息進行搜索就近點。Natasha等人[7]分析了ICP演算法中的點雲數據配准質量問題。
基本原理
三維空間R3存在兩組含有n個坐標點的點集,分別為: PL和PR。三維空間點集PL中各點經過三維空間變換後與點集PR中點一一對應,其單點變換關系式為:
(0-1)
上式中,R為三維旋轉矩陣,t為平移向量。
在ICP配准方法中,空間變換參數向量X可表示為[9] 。參數向量中四元數參數滿足約束條件為:
(0-2)
根據迭代的初值X0,由式(0-1)計算新點集Pi為:
(0-3)
式中,P表示原始未修改過的點集,Pi的下標i表示迭代次數,參數向量X的初始值X0為 。
根據以上數據處理方法,ICP配准演算法可以概括為以下七個步驟:
1) 根據點集Plk中的點坐標,在曲面S上搜索相應就近點點集Prk;
2) 計算兩個點集的重心位置坐標,並進行點集中心化生成新的點集;
3) 由新的點集計算正定矩陣N,並計算N的最大特徵值及其最大特徵向量;
4) 由於最大特徵向量等價於殘差平方和最小時的旋轉四元數,將四元數轉換為旋轉矩陣R;
5) 在旋轉矩陣R被確定後,由平移向量t僅僅是兩個點集的重心差異,可以通過兩個坐標系中的重心點和旋轉矩陣確定;
6) 根據式(0-3),由點集Plk計算旋轉後的點集P』lk。通過Plk與P』lk計算距離平方和值為fk+1。以連續兩次距離平方和之差絕對值 作為迭代判斷數值;
7) 當 時,ICP配准演算法就停止迭代,否則重復1至6步,直到滿足條件 後停止迭代。
I. 為什麼icp只能是普通索引
查詢優化)Index Condition Pushdown (指數條件下推)(ICP)
ICP是MYSQL使用索引從表中檢索行數據的一種優化方式。
目標
減少從基表中讀取操作的數量,從而降低I/O操作。
禁用ICP
存儲引擎會通過遍歷索引定位基表中的行,然後返回給Server 層,在去為這些數據進行WHERE 後的條件過濾。
開啟ICP特性
如果部分where 條件能夠使用索引中的欄位,那麼 MySQLServer就會把這部分下推導存儲引擎層。存儲引擎通過索引過濾,把滿足的行從表中讀取出。
效果決定於存儲引擎通過ICP篩選掉的數據的比例。如果引擎層能夠過濾掉大量的數據,就能減少I/O次數、提高查詢語句性能。
對於InnoDB 表,ICP只適用於輔助索引,當時用ICP優化時,執行計劃的Extra列顯示 Using index condition提示。
mysql開啟ICP
SET optimizer_switch="index_condition_pushdown=on"
登錄後復制
mysql關閉ICP
SET optimizer_switch="index_condition_pushdown=off"
登錄後復制
實驗舉例:
一張表默認只有一個主索引,因為ICP只能作用於二級索引,所以我們建立一個二級索引。
CREATE TABLE `employees` (
`emp_no` int NOT NULL AUTO_INCREMENT,
`birth_date` date NOT NULL,
`first_name` varchar(14) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`last_name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`gender` enum('M','F') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`) USING BTREE,
INDEX `first_name_last_name`(`first_name`, `last_name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
登錄後復制
為了明確查詢性能,啟用profiling並關閉Query Cache
SET profiling = 1;
登錄後復制
SET query_cache_type = 0;
登錄後復制
SET GLOBAL query_cache_size = 0;
登錄後復制
但是因為我用的是8.x版本的資料庫,由於在8.x版本query cache已經被廢棄了,所以這里會提示為
Unknown system variable 'query_cache_size'
登錄後復制
在SELECT * FROM employees WHERE first_name = 'Mary' AND last_name like '%man';語句中,根據MySQL索引的前綴匹配原則,兩者對索引的使用是一致的,即只有first_name採用索引,last_name由於採用模糊前綴,無法使用索引進行匹配。
查詢三次select,並執行show profiles.
SELECT * FROM employees WHERE first_name = 'Mary' AND last_name like '%man';
登錄後復制
show profiles;
登錄後復制
查看執行計劃,在select前加explain就可以了.
EXPLAIN SELECT * FROM employees WHERE first_name = 'Mary' AND last_name like '%man';
登錄後復制
同理,關閉ICP,在查詢三次測試
耗時
開啟ICP
關閉ICP
比較執行計劃
開啟ICP
關閉ICP
執行計劃參數含義:
type表的連接類型,如果是ALL (最差的一種類型,從頭到尾全表掃描)
key表示查詢實際使用到的索引。
possible_keys列指出MySQL能使用哪個索引在該表中找到行。如果該列是NULL,則沒有相關的索引。
rows表示mysql在表中進行查詢時必須檢查的行數。
extra列顯示mysql在處理查詢時的詳細信息,主要包括
using index這個說明MySQL使用了覆蓋索引,避免訪問了表的數據行;
using where這說明伺服器在存儲引擎收到行後將進行過濾;
using temporary說明mysql對查詢結果進行排序的時候使用了臨時表,
using filesort這個說明mysql會對數據使用一個外部的排序,MySQL 中無法利用索引完成的排序操作稱為「文件排序」
(查詢優化)Multi-Range Read Optimization(多量程讀優化)(MRR)
MRR是優化器將隨機I/O轉化為順序I/O,目的是減少磁碟的隨機訪問,以降低查詢過程中I/O的開銷,對I/O-bound類型的SQL語句性能帶來極大的提升。
在不使用MRR時,優化器需要根據二級索引返回的記錄來進行回表,這個過程一般會有較多的隨機I/O。
在使用MRR時,MRR的優化在於,並不是每次通過輔助索引回表取記錄,而是將rowid緩存起來,然後對rowid進行排序後在去訪問記錄,優化器將二級索引隨機的I/O進行排序,轉化為主鍵的有序排列,從而實現隨機I/O到順序I/O的轉化,大幅提升性能。
對比mrr=on 和mrr=off時的執行計劃
CREATE TABLE t1
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL ,
`c` int(11) DEFAULT NULL ,
PRIMARY KEY (`id`),
KEY `mrrx` (`a`,`b`),
KEY `xx` (`c`)
);
登錄後復制
在關掉MRR的情況下,當執行計劃使用的是索引xx©,即從索引 xx 上讀取一條數據後回表,取回該主鍵的完整數據,當數據較多且比較分散的情況下會有較多的隨機I/O,導致性能低下。
SET optimizer_switch="mrr=off";
登錄後復制
EXPLAIN SELECT * FROM t1 WHERE (a BETWEEN 1 AND 10) AND (c BETWEEN 9 AND 10);
登錄後復制
基於成本的演算法過於保守,導致大部分情況下優化器都不會選擇MRR 特性。為了確保優化器使用MRR特性,需要執行 SQL 語句:
SET optimizer_switch="mrr=on,mrr_cost_based=off";
登錄後復制
發現在Extra 的輸出中多了Using MRR 信息,對MRR Optimization I/O層進行了優化,可以減少 I/O 方面的開銷。
在不使用MRR之前,先根據where 條件中的輔助索引獲取輔助索引與主鍵的集合,在通過主鍵來獲取對應的值。利用輔助索引獲取的主鍵來訪問表中的數據會導致多次I/O 和隨機讀。
使用MRR 優化的好處是能使數據訪問變得較有順序。它將根據輔助索引獲取的結果集根據主鍵進行排序,將無序化為有序,可以用主鍵順序訪問基表,將隨機讀轉化為順序讀,多頁數據記錄可一次性讀入或根據此次的主鍵范圍分次讀入,減少 I/O操作,提高查詢效率。
相關參數:
mrr=on,mrr_cost_based=on: 表示cost base 的方式還選擇啟用MRR優化,當發現優化後的代價過高時就會不使用該項優化。
mrr=on,mrr_cost_based=off: 表示總是開啟MRR優化。
(查詢優化)Batched Key Access(批處理鍵訪問)(BKA)
BKA是提高表join性能的演算法,是在表連接的過程中為了提升join 性能而使用的一種 join buffer ,作用是在讀取被連接表的記錄時使用順序I/O。
對於嵌套循環,如果關聯的表數據量很大,那麼join 關聯的時間會很長,後來引入了BNL(Block Nested Loop)演算法來優化嵌套循環。BNL演算法通過使用在外部循環中讀取行的緩沖來減少內部循環中的表必須被讀取的次數。
BKA的原理是對於多表join語句,將外部表中相關的列放入join buffer 中。批量地將Key(索引鍵值)發送到Multi-Range Read (MRR)介面。Multi-Range Read(MRR)根據收到的Key 對應的ROWID進行排序,然後進行數據得到讀取操作。
BKA join 演算法將能極大地提高 SQL 的執行效率,特別是在內表上有索引並且該索引為非主鍵,聯表需要訪問內部表主鍵上的索引情況下。這時BKA演算法會調用 Multi-Range Read (MRR)介面,批量地進行索引鍵的匹配和主鍵索引上獲取數據的操作,以此來提高聯接的執行效率,因為讀取數據是以順序磁碟I/O而不是隨機磁碟I/O進行的。
BKA使用 join buffer size 來確定buffer的大小,buffer越大緩沖區越大,對聯表操作的右側表的順序訪問就越多,可以顯著提高性能。
創建表employees.
CREATE TABLE employees (
emp_no INT NOT NULL,
birth_date DATE NOT NULL,
first_name VARCHAR(14) NOT NULL,
last_name VARCHAR(16) NOT NULL,
gender ENUM ('M','F') NOT NULL,
hire_date DATE NOT NULL,
PRIMARY KEY (emp_no)
);
登錄後復制
創建表dept_emp
CREATE TABLE dept_emp (
emp_no INT NOT NULL,
dept_no CHAR(4) NOT NULL,
from_date DATE NOT NULL,
to_date DATE NOT NULL,
FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE,
FOREIGN KEY (dept_no) REFERENCES departments (dept_no) ON DELETE CASCADE,
PRIMARY KEY (emp_no,dept_no)
);
登錄後復制
啟動BKA
SET optimizer_switch='mrr=on,mrr_cost_based=off,batched_key_access=on';
登錄後復制
查詢計劃
EXPLAIN SELECT a.gender,b.dept_no FROM employees a,dept_emp b WHERE a.birth_date=b.from_date;
登錄後復制
添加索引在查看查詢計劃
ALTER TABLE employees ADD INDEX (birth_date);
登錄後復制
EXPLAIN SELECT a.gender,b.dept_no FROM employees a,dept_emp b WHERE a.birth_date=b.from_date;
登錄後復制
索引
mysql
資料庫
索引優化
演算法
高清播放機,圖片大全,點擊查看詳情!
精選推薦
廣告
MYSQL的索引優化技術ICP、MRR、BKA
109閱讀·0評論·0點贊
2020年5月25日
【mysql】關於ICP、MRR、BKA等特性
113閱讀·0評論·0點贊
2020年4月30日
隨寫02 關於ICP、MRR、BKA等特性
133閱讀·0評論·0點贊
2020年9月8日
Mysql優化演算法-MRR(Multi-Range Read Optimization)
287閱讀·0評論·0點贊
2022年9月7日
mysql資料庫BKA演算法詳解
702閱讀·0評論·0點贊
2021年8月16日
索引下推ICP詳解
813閱讀·0評論·3點贊
2020年4月29日
播放機-高清視頻播放器,一鍵直達!
精選推薦
廣告
MySQL-小章節-ICP/MRR/BKA特性
50閱讀·0評論·0點贊
2022年6月1日
bka mysql,MYSQL之ICP、MRR、BKA
38閱讀·0評論·0點贊
2021年4月29日
MySQL--BNL/ICP/MRR/BKA
98閱讀·0評論·0點贊
2018年6月27日
優化器 MRR & BKA
449閱讀·0評論·0點贊
2016年2月3日
MySQL---MRR策略和BKA演算法
211閱讀·0評論·0點贊
2021年7月13日
InnoDB ICP 代碼路徑
78閱讀·0評論·0點贊
2016年5月10日
InnoDB ICP、MRR、BAK特性
335閱讀·1評論·1點贊
2020年8月15日
二級索引和回表優化之MRR
168閱讀·0評論·0點贊
2022年1月5日
mysql mrr_cost_based_MySQL MRR介紹
79閱讀·0評論·0點贊
2021年1月19日
優化的道路永無止境——Mysql的ICP及MRR
149閱讀·0評論·0點贊
2020年12月3日
mysql 5.7中的MBR和BKA演算法
955閱讀·0評論·0點贊
2017年10月3日
說說mysql的MRR,ICP,BKA優化。
404閱讀·0評論·2點贊
2020年3月7日
學習MYSQL之ICP、MRR、BKA
4234閱讀·0評論·2點贊
2016年8月14日
mysql使用bka_MySQL Batched Key Access (BKA)原理和設置使用方法舉例
328閱讀·0評論·0點贊
2021年1月19日
去首頁
看看更多熱門內容
評論1
Xd聊架構
贊
來互動吧,幫我點贊最新的一篇文章,謝謝!!!