第一篇:磁測資料數據處理解釋小結
磁測資料處理方法:
1、收集磁性資料,并對野外整理后的數據進行檢查、消除畸變點、網格化等預處理工作。
2、實測△T異常是斜磁化條件下的總場異常,它與磁性體的實際位置有偏移。必須將斜磁化條件下的磁異常換算為垂直磁化條件下的磁異常,即進行磁異常的化極處理。
3、磁異常的延拓可以劃分不同深度的磁場區,幫助判斷磁性體的延伸。因此,必須對磁異常做向上延拓100米、200米、300米、500米、1000米、2000米計算。
4、磁異常的方向求導能夠壓制區域背景、突出局部異常、分離疊加磁性體、確定磁性體邊界等。資料處理中必須根據解釋需要對磁異常進行0°、45°、90°、135°及垂直方向求導計算。
5、資料的處理還應根據提取和解釋異常的需要組合使用延拓、求導、分離、圓滑、各種濾波、趨勢分析、多次切割等方法的計算。
6、通過數據的處理,分離工作區縱、橫向迭加的變化磁異常△T,提取出目標磁性體的信息,并結合地質、化探、巖石磁性統計資料進行綜合分析。
磁異常解釋:
1、定性解釋可采用從已知到未知的類比法、模型對比法及統計解釋法等,通過實測物性、地質及其它物探資料的綜合解釋減少多解性。定性解釋既要用未經過處理的基礎圖件,也要用經過處理后的圖件,達到全面分析所有信息的目的。
2、定性解釋一般從磁場的分區入手,將工作區的磁場置于更大范圍場的背景中加以研究,并與鄰區對比,按照磁場特征進行巖性分區和構造分區研究。
(1)巖性分區研究應根據工作區主要巖性磁性測定統計結果與實測磁異常的分析,對磁性差異較明顯的巖性,確定其對應的磁場強度變化范圍,進行磁場強度劃分研究,尤其是劃分火山巖分布區。
(2)構造分區研究應根據不同磁場區與構造區的特征對比,研究磁場與構造區的對應關系,探索劃分成礦帶的展布特征。
3、局部高磁異常解釋工作一般先從強度大的、形態簡單、干擾小的或有巖石露頭的異常入手,異常劃分原則可參照以下三點:(1)異常下限按超過誤差2.5倍即13nT視為可信弱磁異常的下限;(2)2條以上測線有顯示,沿測線方向有3個點高于背景場;(3)形成明顯的局部磁力高圈閉。
4、磁異常斷裂構造劃分可參照以下三點:
(1)呈線性展布的串珠狀高磁異常帶。此類高磁異常帶可能是沿斷裂侵入的巖體或磁鐵礦化引起,可做為劃分斷裂的一項依據。
(2)線性展布的窄脈形低磁異常帶。此類低磁異常帶可能由于斷裂破碎帶造成帶內巖石磁性降低形成,可做為劃分斷裂的一項依據。
(3)不同異常強度的磁場區分界處。斷裂構造形成的上下盤錯動以及兩側巖性明顯差異可以在磁場上形成不同異常強度的磁場區,因此,場區分界處可做為劃分斷裂的一項依據。
5、異常編錄按照由北向南、從西向東的原則對局部高磁異常進行編號,然后在異常登記表中填寫異常長度、寬度、走向、極大值、形態、有無伴生負磁異常及其坐標等資料。
6、必須對優選的局部磁異常進行磁性體進行定量-半定量計算。定量計算時要盡可能用實測的物性參數、已有工程控制的地下地質情況及其它物探工作的結果,作為先驗控制信息,并選用最可能的目標物的形態、產狀、物性參數作為初始模型和控制條件,以減少定量反演的多解性和不可靠性。
7、不具備嚴格的定量反演條件或只需粗略估計時,對規模較大(上頂寬大于上頂埋深)的地質體邊界可以根據垂直地質體的總梯度的極值、水平一階導數極值或垂向一階導數、二階導數零值線大致確定。對接觸面的傾斜方向可根據水平一階導數曲線的不對稱性、垂向一階導數正負極值之比或延拓不同高度的水平一階導數極值的位移(極值向傾斜方向位移)等標志加以粗略判斷。
8、應根據定性和定量解釋、平面和剖面的解釋結果,按照地質學的基本原理編制各類推斷成果圖件,對推斷成果圖件上磁測工作解釋出的地質體、地質現象要進行地質解釋和推斷,闡明它們相互間的關系及與已知地質情況的關系等。若原有地質觀點無法合理解釋物探推斷時,在深入研究綜合資料后,可按照物探推斷結果做出新的地質解釋。9、1∶5萬地面高精度磁測成果需提供直接找礦信息和間接找礦信息,并進行找礦靶區優選。
(1)直接找礦信息的基本原則可參照以下二點:
a、強度大于5000nT的高磁異區可直接作為尋找磁鐵礦體的可靠靶區。b、強度在2000—5000nT之間的高磁異常,經調查研究排除基性—超基性巖、矽卡巖等干擾因素后,也可作為尋找磁鐵礦體靶區。
(2)間接找礦信息的基本原則可參照以下二點:
a、利用磁異常圈出中基性—超基性侵入巖體,劃分出巖體的邊界,結合化探異常及地質填圖優選出可能與中基性—超基性侵入巖體有關的貴金屬、有色、多金屬綜合成礦信息作為找礦目標區。
b、利用磁異常劃分的斷裂構造,結合地質、化探資料,選擇斷裂交匯部位和巖性有利區內的弱磁異常進行踏勘檢查,綜合地質、化探檢查結果劃分找礦靶區。
第二篇:地面高精度磁測小結(范文)
地面高精度磁測小結
一、任務完成情況
我單位立人員于2009年4月27日抵達雅干測區,并且著手開始野外生產工作,野外掃面工作于2009年6月中旬基本結束,6月中旬至7月中旬開始測量標本,9月份以后開始收集資料,進行室內整理。
高精度磁測共完成勘探面積1321.28 km2,設計面積為1400 km2,因為測區緊鄰中蒙邊界,所以導致邊界地區無法進行實地勘測;其中扎尼烏蘇幅90.38 km、好來公幅383.48 km、阿拉格烏拉幅349 km、雅干幅329.78 km、呼和毛日特烏拉幅168.64 km2。實測物理點24604個,檢查點751個,檢查率3.1%。采集物性標本1500塊。
222
二、質量評述
1.使用捷克產PMG-1型高精度質子磁力儀性能穩定,一致性測試精度為1.8559nT。噪聲2503號儀器0.36nT、2504號儀器0.31nT、2505號0.42nT、2512號儀器0.29 nT、8061號儀器0.20 nT、8062號儀器0.15 nT、8063號儀器0.20 nT。
2.基點聯測:經長時間連續觀測和十字剖面觀測,認為基點選擇合理,磁場變化穩定,連續觀測地磁場平均值變化小于2nT,周圍沒有干擾。
3.野外測點觀測采用GPS定點,每個測點插筷子并有紅色標記,每1km定有木樁并注記,注記清晰,定位準確,定位坐標GPS自動記錄,并記錄路線軌跡。
4.高精度磁測觀測逐點進行,并起閉于校正點,儀器自動記錄數據,室內回放計算機進行資料整理,記錄精度高、準確、無人為誤差,資料整理符合《規范》要求。
5.質量檢查隨工作進度逐步開展,質量檢查率3.1%,精度達±2.2nT,滿足《規范》要求。
三、高精度磁測成果
本次地質礦產調查地面高精度磁測的成果研究主要是建立在等值線圖和延拓圖件的基礎上的,用原始數據編制的等值線圖,除白堊系及二疊系覆蓋較厚,異常形態較為簡單,大部分地區異常形態比較雜亂,給異常的劃分工作帶來了困難。因此,將測區的數據進行了化極延拓處理,異常的圈定是在化極延拓100米后進行的。
1、地面高精度磁測異常概述
共圈定異常12處,下面將分別論述:
C1異常:位于扎尼烏蘇幅,東西走向,長約2.7公里,寬約1公里,△T在200nT左右,北側異常梯度變化大,南側異常變化緩慢,是該處東西向串珠狀異常幅值較高、形態較為規整的一處,也是次級斷裂F1穿過的位置。同時,此處還應存在南北向的小斷裂,東西向、南北向構造交錯穿插在中奧陶系地層中,是良好的導礦容礦構造。化探異常也該構造帶也有分布。
C2異常:位于好來公幅道爾根嘎順西北約3公里處,北東走向,長約5公里,寬約0.8公里,處在平靜的負磁背景異常中,多個正異常中心延北東方向展布,異常北西側梯度大,南東側梯度緩,判斷該磁性體為板狀體,傾向南東,產狀較陡。異常形態和出露的華立西晚期中粒石英閃長巖和中粒花崗閃長巖基本吻合,其中石英閃長巖磁化率(K)和剩磁(Jr)都較弱,中粒花崗閃長巖除個別磁化率和剩磁較高外,大部分巖石磁化率和剩磁都比較低,因此引起的磁異常也比較弱,但是在異常中有幅值在400nT以上的磁異常出現,所以需要重點查明。
根據望湖山銅鎳礦的勘探結果,見礦位置基本為低緩的弱磁異常。C3異常:位于好來公幅中部,哈爾敖包附近,異常近似圓形,位于平靜的正磁異常中,異常幅值大于600nT。主要出露的巖性為華立西晚期中粒石英閃長巖和中細粒閃長巖,該異常也很好的反映了兩種巖體的界限。中細粒閃長巖磁化率和剩磁都較高,因此該磁異常與閃長巖有關。在該異常區附近多種金屬元素組合較好,因此在該地區應注意尋找多金屬元素。
C4異常:位于好來公幅好來公高勒南1公里左右,異常呈橢圓形,近東西走向,幅值在大于300nT,南側梯度略陡大。異常出露在上二迭系與上白堊系地層的接觸帶上。砷、銀、鋅等元素組合較好。
C5異常:位于好來公幅薩特奧爾布格東約2公里處,整個異常與C3、C4異常同在一個異常帶上,近似圓形,由三個小的異常組成,為弱磁異常,出露巖性主要為上白堊系泥質粉砂巖、泥巖及粉砂巖。C6、C7、C10異常位于近北西向的異常帶上,該異常帶規模較大,地質活動較為頻繁,同時也導致了該地區磁異常的復雜性。
C6異常:位于阿拉格烏拉幅東北部,經過化極延拓后異常形態較為規則,東西走向,近似長方形,東西長約1.7公里,南北寬約1公里,異常幅值在200nT以上,出露巖性主要為中粒花崗閃長巖,并且有輝綠玢巖脈和閃長巖脈侵入。該異常應為巖體引起的異常。
C7異常:該異常位于阿拉格烏拉幅與雅干幅的交界處,異常呈圓形,直徑約2公里,異常幅值在800nT以上,北側被負異常包圍,南側被正異常包圍,南側比北側的梯度變化較大。該磁性體為球體,埋深較淺。出露巖性為中粒花崗閃長巖。但是中粒花崗閃長巖不會產生這么大的磁性,因此該磁性體性質有待查明。
該處鉛、銀、鎳、金的組合較好。
C8異常:位于雅干幅,伊和洪古爾吉烏拉南約3公里,異常呈條帶狀,東西延伸約5公里,南北最寬處約1公里,最窄處約0.5公里,異常出露于上泥盆系火上巖與下白堊系沉積巖的接觸帶上,該異常由凝灰巖引起的可能性較大。鋅、銅、砷等元素組合較好。
C9異常:該異常主要位于雅干幅東北部,沿北西向呈條帶狀展布,由于該異常又由4個不同幅值的異常組成,因此又將該異常4個小的異常,異常最大值在900nT以上,為同一性質的異常。該異常南北兩側梯度變化都比較大,推測該異常附近存在斷層,成礦部位較好。銅、鎳異常組合較好。
C10異常:該異常是本次礦調中異常規模最大、形態最復雜的一處異常,分為5個小的異常,都位于近東西向的異常帶上。
C10-1異常規模較小,近似橢圓形,該處出露巖性主要為橄欖輝長巖,多種成礦元素在該處組合都較好。C10-2異常有兩個異常中心,近似南北走向,異常區出露中粒斜長花崗巖和橄欖輝長巖。其中橄欖輝長巖的磁化率和剩磁都比較高。C10-3和C10-4異常為同一性質的異常,都出露在斜長花崗巖中,異常幅值在500nT以上,但是斜長花崗巖為弱磁,在該異常南部有銅鐵礦化點,因此,異常性質需近一步查明。C10-5異常在近東西向異常帶的最東部,位于巴潤海爾汗附近,磁測△T平均在300nT以上,出露巖性主要為花崗閃長巖。
C11異常:該異常位于阿拉格烏拉幅南部,異常向南延伸沒有封閉,北東走向,位于平靜的正異常背景中。西側為負異常,梯度變化較大,異常有向東傾的趨勢,該異常出露在上二迭系的火山巖中,并且該異常西部存在斷裂構造。砷、鉬元素組合較好。
C12異常:該異常與C11異常處在同一個異常帶上,異常向南延伸沒有封閉,異常延北東方向展布,近橢圓形,出露在上二迭系的火山巖中,為巖體引起的異常。在該異常中,砷異常較好。
2、推斷斷裂的概述
本次磁測初步推斷斷裂18處,其中雅干深大斷裂是本區的主要斷裂。從圈定的異常圖上可以看出,幾乎所有磁測異常都產生在斷裂帶附近,斷裂帶是本區的主要控礦構造。同時,在推斷的斷裂帶附近,化探異常都有明顯的反映,斷裂帶不僅為熱液上升提供了通道,還為化學元素的運移起到了良好的作用,在斷裂交錯部位則是良好的成礦部位。
第三篇:火龍果軟件-海量數據處理小結
火龍果?整理 uml.org.cn
海量的數據處理問題,對其進行處理是一項艱巨而復雜的任務。原因有以下幾個方面:
一、數據量過大,數據中什么情況都可能存在。如果說有10條數據,那么大不了每條去逐一檢查,人為處理,如果有上百條數據,也可以考慮,如果數據上到千萬級別,甚至過億,那不是手工能解決的了,必須通過工具或者程序進行處理,尤其海量的數據中,什么情況都可能存在,例如,數據中某處格式出了問題,尤其在程序處理時,前面還能正常處理,突然到了某個地方問題出現了,程序終止了。
二、軟硬件要求高,系統資源占用率高。對海量的數據進行處理,除了好的方法,最重要的就是合理使用工具,合理分配系統資源。一般情況,如果處理的數據過TB級,小型機是要考慮的,普通的機子如果有好的方法可以考慮,不過也必須加大CPU和內存,就象面對著千軍萬馬,光有勇氣沒有一兵一卒是很難取勝的。
三、要求很高的處理方法和技巧。這也是本文的寫作目的所在,好的處理方法是一位工程師長期工作經驗的積累,也是個人的經驗的總結。沒有通用的處理方法,但有通用的原理和規則。那么處理海量數據有哪些經驗和技巧呢,我把我所知道的羅列一下,以供大家參考:
一、選用優秀的數據庫工具現在的數據庫工具廠家比較多,對海量數據的處理對所使用的數據庫工具要求比較高,一般使用Oracle或者DB2,微軟公司最近發布的SQL Server 2005性能也不錯。另外在BI領域:數據庫,數據倉庫,多維數據庫,數據挖掘等相關工具也要進行選擇,象好的ETL工具和好的OLAP工具都十分必要,例如Informatic,Eassbase等。筆者在實際數據分析項目中,對每天6000萬條的日志數據進行處理,使用SQL Server 2000需要花費6小時,而使用SQL Server 2005則只需要花費3小時。
二、編寫優良的程序代碼處理數據離不開優秀的程序代碼,尤其在進行復雜數據處理時,必須使用程序。好的程序代碼對數據的處理至關重要,這不僅僅是數據處理準確度的問題,更是數據處理效率的問題。良好的程序代碼應該包含好的算法,包含好的處理流程,包含好的效率,包含好的異常處理機制等。
三、對海量數據進行分區操作對海量數據進行分區操作十分必要,例如針對按年份存取的數據,我們可以按年進行分區,不同的數據庫有不同的分區方式,不過處理機制大體相同。例如SQL Server的數據庫分區是將不同的數據存于不同的文件組下,而不同的文件組存于不同的磁盤分區下,這樣將數據分散開,減小磁盤I/O,減小了系統負荷,而且還可以將日志,索引等放于不同的分區下。
四、建立廣泛的索引對海量的數據處理,對大表建立索引是必行的,建立索引要考慮到具體情況,例如針對大表的分組、排序等字段,都要建立相應索引,一般還可以建立復合索引,對經常插入的表則建立索引時要小心,筆者在處理數據時,曾經在一個ETL流程中,當插入表時,首先刪除索引,然后插入完畢,建立索引,并實施聚合操作,聚合完成后,再次插入前還是刪除索引,所以索引要用到好的時機,索引的填充因子和聚集、非聚集索引都要考慮。
五、建立緩存機制當數據量增加時,一般的處理工具都要考慮到緩存問題。緩存大小設置的好差也關系到數據處理的成敗,例如,筆者在處理2億條數據聚合操作時,緩存設置為100000條/Buffer,這對于這個級別的數據量是可行的。
六、加大虛擬內存如果系統資源有限,內存提示不足,則可以靠增加虛擬內存來解決。筆者在實際項目中曾經遇到針對18億條的數據進行處理,內存為1GB,1個P4 2.4G的CPU,對這么大的數據量進行聚合操作是有問題的,提示內存不足,那么采用了加大虛擬內存的方法來解決,在6塊磁盤分區上分別建立了6個4096M的磁盤分區,用于虛擬內存,這樣虛擬的內存則增加為 4096*6 + 1024 = 25600 M,解決了數據處理中的內存不足問題。
七、分批處理 海量數據處理難因為數據量大,那么解決海量數據處理難的問題其中一個技巧是減少數據量。可以對海量數據分批處理,然后處理后的數據再進行合并操作,這樣逐個擊破,有利于小數據量的處理,不至于面對大數據量帶來的問題,不過這種方法也要因時因勢進行,如果不允許拆分數據,還需要另想辦法。不過一般的數據按天、按月、按年等存儲的,都可以采用先分后合的方法,對數據進行分開處理。
八、使用臨時表和中間表數據量增加時,處理中要考慮提前匯總。這樣做的目的是化整為零,大表變小表,分塊處理完成后,再利用一定的規則進行合并,處理過程中的臨時表的使用和中間結果的保存都非常重要,如果對于超海量的數據,大表處理不了,只能拆分為多個小表。如果處理過程中需要多步匯總操作,可按
火龍果?整理 uml.org.cn
匯總步驟一步步來,不要一條語句完成,一口氣吃掉一個胖子。
九、優化查詢SQL語句在對海量數據進行查詢處理過程中,查詢的SQL語句的性能對查詢效率的影響是非常大的,編寫高效優良的SQL腳本和存儲過程是數據庫工作人員的職責,也是檢驗數據庫工作人員水平的一個標準,在對SQL語句的編寫過程中,例如減少關聯,少用或不用游標,設計好高效的數據庫表結構等都十分必要。筆者在工作中試著對1億行的數據使用游標,運行3個小時沒有出結果,這是一定要改用程序處理了。
十、使用文本格式進行處理對一般的數據處理可以使用數據庫,如果對復雜的數據處理,必須借助程序,那么在程序操作數據庫和程序操作文本之間選擇,是一定要選擇程序操作文本的,原因為:程序操作文本速度快;對文本進行處理不容易出錯;文本的存儲不受限制等。例如一般的海量的網絡日志都是文本格式或者csv格式(文本格式),對它進行處理牽扯到數據清洗,是要利用程序進行處理的,而不建議導入數據庫再做清洗。
十一、定制強大的清洗規則和出錯處理機制海量數據中存在著不一致性,極有可能出現某處的瑕疵。例如,同樣的數據中的時間字段,有的可能為非標準的時間,出現的原因可能為應用程序的錯誤,系統的錯誤等,這是在進行數據處理時,必須制定強大的數據清洗規則和出錯處理機制。
十二、建立視圖或者物化視圖視圖中的數據來源于基表,對海量數據的處理,可以將數據按一定的規則分散到各個基表中,查詢或處理過程中可以基于視圖進行,這樣分散了磁盤I/O,正如10根繩子吊著一根柱子和一根吊著一根柱子的區別。
十三、避免使用32位機子(極端情況)目前的計算機很多都是32位的,那么編寫的程序對內存的需要便受限制,而很多的海量數據處理是必須大量消耗內存的,這便要求更好性能的機子,其中對位數的限制也十分重要。
十四、考慮操作系統問題海量數據處理過程中,除了對數據庫,處理程序等要求比較高以外,對操作系統的要求也放到了重要的位置,一般是必須使用服務器的,而且對系統的安全性和穩定性等要求也比較高。尤其對操作系統自身的緩存機制,臨時空間的處理等問題都需要綜合考慮。
十五、使用數據倉庫和多維數據庫存儲數據量加大是一定要考慮OLAP的,傳統的報表可能5、6個小時出來結果,而基于Cube的查詢可能只需要幾分鐘,因此處理海量數據的利器是OLAP多維分析,即建立數據倉庫,建立多維數據集,基于多維數據集進行報表展現和數據挖掘等。
十六、使用采樣數據,進行數據挖掘基于海量數據的數據挖掘正在逐步興起,面對著超海量的數據,一般的挖掘軟件或算法往往采用數據抽樣的方式進行處理,這樣的誤差不會很高,大大提高了處理效率和處理的成功率。一般采樣時要注意數據的完整性和,防止過大的偏差。筆者曾經對1億2千萬行的表數據進行采樣,抽取出400萬行,經測試軟件測試處理的誤差為千分之五,客戶可以接受。還有一些方法,需要在不同的情況和場合下運用,例如使用代理鍵等操作,這樣的好處是加快了聚合時間,因為對數值型的聚合比對字符型的聚合快得多。類似的情況需要針對不同的需求進行處理。海量數據是發展趨勢,對數據分析和挖掘也越來越重要,從海量數據中提取有用信息重要而緊迫,這便要求處理要準確,精度要高,而且處理時間要短,得到有價值信息要快,所以,對海量數據的研究很有前途,也很值得進行廣泛深入的研究。
一般來說第7種方案是最常用的,有的主要就是使用第7種方案,選擇的余地也非常的大,不只是俺月,日,年,也可以按周等等劃分,靈活性較高
而面對大量數據的處理一般都是分批次處理,之前我做一個文本分類器,面對1g多的索引(索引1g多,但是分類時需要的數據就大得多了),40-50分鐘就可以跑完所有分類:
一是分批操作。
二是給jvm回收內存的時間,比如每次20w的數據進行分類,完成之后睡眠一段時間,每睡眠一端時間就手動gc一次。
火龍果?整理 uml.org.cn
通過這些方式取得了很明顯得見效。
海量數據處理專題
(一)大數據量的問題是很多面試筆試中經常出現的問題,比如baidu google 騰訊 這樣的一些涉及到海量數據的公司經常會問到。
下面的方法是我對海量數據的處理方法進行了一個一般性的總結,當然這些方法可能并不能完全覆蓋所有的問題,但是這樣的一些方法也基本可以處理絕大多數遇到的問題。下面的一些問題基本直接來源于公司的面試筆試題目,方法不一定最優,如果你有更好的處理方法,歡迎與我討論。
本貼從解決這類問題的方法入手,開辟一系列專題來解決海量數據問題。擬包含 以下幾個方面。
1.Bloom Filter 2.Hash 3.Bit-Map 4.堆(Heap)5.雙層桶劃分 6.數據庫索引
7.倒排索引(Inverted Index)8.外排序 9.Trie樹 10.MapReduce
在這些解決方案之上,再借助一定的例子來剖析海量數據處理問題的解決方案。歡迎大家關注。
海量數據處理專題
(二)【什么是Bloom Filter】
Bloom Filter是一種空間效率很高的隨機數據結構,它利用位數組很簡潔地表示一個集合,并能判斷一個元素是否屬于這個集合。Bloom Filter的這種高效是有一定代價的:在判斷一個元素是否屬于某個集合時,有可能會把不屬于這個集合的元素誤認為屬于這個集合(false positive)。因此,Bloom Filter不適合那些“零錯誤”的應用場合。而在能容忍低錯誤率的應用場合下,Bloom Filter通過極少的錯誤換取了存儲空間的極大節省。這里有一篇關于Bloom Filter的詳細介紹,不太懂的博友可以看看。
【適用范圍】
可以用來實現數據字典,進行數據的判重,或者集合求交集
【基本原理及要點】
火龍果?整理 uml.org.cn
對于原理來說很簡單,位數組+k個獨立hash函數。將hash函數對應的值的位數組置1,查找時如果發現所有hash函數對應位都是1說明存在,很明顯這 個過程并不保證查找的結果是100%正確的。同時也不支持刪除一個已經插入的關鍵字,因為該關鍵字對應的位會牽動到其他的關鍵字。所以一個簡單的改進就是 counting Bloom filter,用一個counter數組代替位數組,就可以支持刪除了。
還有一個比較重要的問題,如 何根據輸入元素個數n,確定位數組m的大小及hash函數個數。當hash函數個數k=(ln2)*(m/n)時錯誤率最小。在錯誤率不大于E的情況 下,m至少要等于n*lg(1/E)才能表示任意n個元素的集合。但m還應該更大些,因為還要保證bit數組里至少一半為0,則m應 該>=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2為底的對數)。
舉個例子我們假設錯誤率為0.01,則此時m應大概是n的13倍。這樣k大概是8個。
注意這里m與n的單位不同,m是bit為單位,而n則是以元素個數為單位(準確的說是不同元素的個數)。通常單個元素的長度都是有很多bit的。所以使用bloom filter內存上通常都是節省的。
【擴展】
Bloom filter將集合中的元素映射到位數組中,用k(k為哈希函數個數)個映射位是否全1表示元素在不在這個集合中。Counting bloom filter(CBF)將位數組中的每一位擴展為一個counter,從而支持了元素的刪除操作。Spectral Bloom Filter(SBF)將其與集合元素的出現次數關聯。SBF采用counter中的最小值來近似表示元素的出現頻率。
【問題實例】
給你A,B兩個文件,各存放50億條URL,每條URL占用64字節,內存限制是4G,讓你找出A,B文件共同的URL。如果是三個乃至n個文件呢?
根據這個問題我們來計算下內存的占用,4G=2^32大概是40億*8大概是340億,n=50億,如果按出錯率0.01算需要的大概是650億個 bit。現在可用的是340億,相差并不多,這樣可能會使出錯率上升些。另外如果這些urlip是一一對應的,就可以轉換成ip,則大大簡單了。
海量數據處理專題
(三)什么是Hash
Hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長度的輸入(又叫做預映射,pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小于輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
火龍果?整理 uml.org.cn
HASH主要用于信息安全領域中加密算法,它把一些不同長度的信息轉化成雜亂的128位的編碼,這些編碼值叫做HASH值.也可以說,hash就是找到一種數據內容和數據存放地址之間的映射關系。數組的特點是:尋址容易,插入和刪除困難;而鏈表的特點是:尋址困難,插入和刪除容易。那么我們能不能綜合兩者的特性,做出一種尋址容易,插入刪除也容易的數據結構?答案是肯定的,這就是我們要提起的哈希表,哈希表有多種不同的實現方法,我接下來解釋的是最常用的一種方法——拉鏈法,我們可以理解為“鏈表的數組”,如圖:
左邊很明顯是個數組,數組的每個成員包括一個指針,指向一個鏈表的頭,當然這個鏈表可能為空,也可能元素很多。我們根據元素的一些特征把元素分配到不同的鏈表中去,也是根據這些特征,找到正確的鏈表,再從鏈表中找出這個元素。
元素特征轉變為數組下標的方法就是散列法。散列法當然不止一種,下面列出三種比較常用的。1,除法散列法
最直觀的一種,上圖使用的就是這種散列法,公式:
index = value % 16
學過匯編的都知道,求模數其實是通過一個除法運算得到的,所以叫“除法散列法”。
2,平方散列法
求index是非常頻繁的操作,而乘法的運算要比除法來得省時(對現在的CPU來說,估計我們感覺不出
火龍果?整理 uml.org.cn
來),所以我們考慮把除法換成乘法和一個位移操作。公式:
index =(value * value)>> 28
如果數值分配比較均勻的話這種方法能得到不錯的結果,但我上面畫的那個圖的各個元素的值算出來的index都是0——非常失敗。也許你還有個問題,value如果很大,value * value不會溢出嗎?答案是會的,但我們這個乘法不關心溢出,因為我們根本不是為了獲取相乘結果,而是為了獲取index。
3,斐波那契(Fibonacci)散列法
平方散列法的缺點是顯而易見的,所以我們能不能找出一個理想的乘數,而不是拿value本身當作乘數呢?答案是肯定的。
1,對于16位整數而言,這個乘數是40503 2,對于32位整數而言,這個乘數是2654435769
3,對于64位整數而言,這個乘數是***98485
這幾個“理想乘數”是如何得出來的呢?這跟一個法則有關,叫黃金分割法則,而描述黃金分割法則的最經典表達式無疑就是著名的斐波那契數列,如果你還有興趣,就到網上查找一下“斐波那契數列”等關鍵字,我數學水平有限,不知道怎么描述清楚為什么,另外斐波那契數列的值居然和太陽系八大行星的軌道半徑的比例出奇吻合,很神奇,對么?
對我們常見的32位整數而言,公式:
i ndex =(value * 2654435769)>> 28
如果用這種斐波那契散列法的話,那我上面的圖就變成這樣了:
很明顯,用斐波那契散列法調整之后要比原來的取摸散列法好很多。
火龍果?整理 uml.org.cn
【適用范圍】
快速查找,刪除的基本數據結構,通常需要總數據量可以放入內存。【基本原理及要點】
hash函數選擇,針對字符串,整數,排列,具體相應的hash方法。
碰撞處理,一種是open hashing,也稱為拉鏈法;另一種就是closed hashing,也稱開地址法,opened addressing。
【擴展】
d-left hashing中的d是多個的意思,我們先簡化這個問題,看一看2-left hashing。2-left hashing指的是將一個哈希表分成長度相等的兩半,分別叫做T1和T2,給T1和T2分別配備一個哈希函數,h1和h2。在存儲一個新的key時,同 時用兩個哈希函數進行計算,得出兩個地址h1[key]和h2[key]。這時需要檢查T1中的h1[key]位置和T2中的h2[key]位置,哪一個 位置已經存儲的(有碰撞的)key比較多,然后將新key存儲在負載少的位置。如果兩邊一樣多,比如兩個位置都為空或者都存儲了一個key,就把新key 存儲在左邊的T1子表中,2-left也由此而來。在查找一個key時,必須進行兩次hash,同時查找兩個位置。
【問題實例】
1).海量日志數據,提取出某日訪問百度次數最多的那個IP。
IP的數目還是有限的,最多2^32個,所以可以考慮使用hash將ip直接存入內存,然后進行統計。
海量數據處理專題
(四)【什么是Bit-map】
所謂的Bit-map就是用一個bit位來標記某個元素對應的Value,而Key即是該元素。由于采用了Bit為單位來存儲數據,因此在存儲空間方面,可以大大節省。
如果說了這么多還沒明白什么是Bit-map,那么我們來看一個具體的例子,假設我們要對0-7內的5個元素(4,7,2,5,3)排序(這里假設這些元素沒有重復)。那么我們就可以采用Bit-map的方法來達到排序的目的。要表示8個數,我們就只需要8個Bit(1Bytes),首先我們開辟1Byte 的空間,將這些空間的所有Bit位都置為0(如下圖:)
火龍果?整理 uml.org.cn
然后遍歷這5個元素,首先第一個元素是4,那么就把4對應的位置為1(可以這樣操作 p+(i/8)|(0x01<<(i%8))當然了這里的操作涉及到Big-ending和Little-ending的情況,這里默認為Big-ending),因為是從零開始的,所以要把第五位置為一(如下圖):
然后再處理第二個元素7,將第八位置為1,,接著再處理第三個元素,一直到最后處理完所有的元素,將相應的位置為1,這時候的內存的Bit位的狀態如下:
然后我們現在遍歷一遍Bit區域,將該位是一的位的編號輸出(2,3,4,5,7),這樣就達到了排序的目的。下面的代碼給出了一個BitMap的用法:排序。//定義每個Byte中有8個Bit位 #include <memory.h> #define BYTESIZE 8 void SetBit(char *p, int posi){
}
void BitMapSortDemo(){
//BufferLen這個值是根據待排序的數據中最大值確定的 //待排序中的最大值是14,因此只需要2個Bytes(16個Bit)//為了簡單起見,我們不考慮負數 int num[] = {3,5,2,10,6,12,8,14,9};*p = *p|(0x01<<(posi%BYTESIZE));//將該Bit位賦值1 return;for(int i=0;i <(posi/BYTESIZE);i++){ } p++;
火龍果?整理 uml.org.cn
} //就可以了。
const int BufferLen = 2;char *pBuffer = new char[BufferLen];//要將所有的Bit位置為0,否則結果不可預知。memset(pBuffer,0,BufferLen);for(int i=0;i<9;i++){
} //首先將相應Bit位上置為1 SetBit(pBuffer,num[i]);//輸出排序結果
for(int i=0;i<BufferLen;i++)//每次處理一個字節(Byte){
} for(int j=0;j<BYTESIZE;j++)//處理該字節中的每個Bit位 {
} pBuffer++;
//判斷該位上是否是1,進行輸出,這里的判斷比較笨。//首先得到該第j位的掩碼(0x01<<j),將內存區中的 //位和此掩碼作與操作。最后判斷掩碼是否和處理后的 //結果相同
if((*pBuffer&(0x01<<j))==(0x01<<j)){ }
printf(“%d ”,i*BYTESIZE + j);int _tmain(int argc, _TCHAR* argv[]){
} 【適用范圍】 BitMapSortDemo();return 0;
火龍果?整理 uml.org.cn
可進行數據的快速查找,判重,刪除,一般來說數據范圍是int的10倍以下 【基本原理及要點】
使用bit數組來表示某些元素是否存在,比如8位電話號碼 【擴展】
Bloom filter可以看做是對bit-map的擴展 【問題實例】
1)已知某個文件內包含一些電話號碼,每個號碼為8位數字,統計不同號碼的個數。
8位最多99 999 999,大概需要99m個bit,大概10幾m字節的內存即可。(可以理解為從0-99 999 999的數字,每個數字對應一個Bit位,所以只需要99M個Bit==1.2MBytes,這樣,就用了小小的1.2M左右的內存表示了所有的8位數的電話)
2)2.5億個整數中找出不重復的整數的個數,內存空間不足以容納這2.5億個整數。
將bit-map擴展一下,用2bit表示一個數即可,0表示未出現,1表示出現一次,2表示出現2次及以上,在遍歷這些數的時候,如果對應位置的值是0,則將其置為1;如果是1,將其置為2;如果是2,則保持不變。或者我們不用2bit來進行表示,我們用兩個bit-map即可模擬實現這個 2bit-map,都是一樣的道理。
海量數據處理專題
(五)【什么是堆】
概念:堆是一種特殊的二叉樹,具備以下兩種性質
1)每個節點的值都大于(或者都小于,稱為最小堆)其子節點的值
2)樹是完全平衡的,并且最后一層的樹葉都在最左邊
這樣就定義了一個最大堆。如下圖用一個數組來表示堆:
火龍果?整理 uml.org.cn
那么下面介紹二叉堆:二叉堆是一種完全二叉樹,其任意子樹的左右節點(如果有的話)的鍵值一定比根節點大,上圖其實就是一個二叉堆。
你一定發覺了,最小的一個元素就是數組第一個元素,那么二叉堆這種有序隊列如何入隊呢?看圖:
火龍果?整理 uml.org.cn
假設要在這個二叉堆里入隊一個單元,鍵值為2,那只需在數組末尾加入這個元素,然后盡可能把這個元素往上挪,直到挪不動,經過了這種復雜度為Ο(logn)的操作,二叉堆還是二叉堆。
那如何出隊呢?也不難,看圖:
火龍果?整理 uml.org.cn
出隊一定是出數組的第一個元素,這么來第一個元素以前的位置就成了空位,我們需要把這個空位挪至葉子節點,然后把數組最后一個元素插入這個空位,把這個“空位”盡量往上挪。這種操作的復雜度也是Ο(logn)。
【適用范圍】
海量數據前n大,并且n比較小,堆可以放入內存
【基本原理及要點】
最大堆求前n小,最小堆求前n大。方法,比如求前n小,我們比較當前元素與最大堆里的最大元素,如果它小于最大元素,則應該替換那個最大元 素。這樣最后得到的n個元素就是最小的n個。適合大數據量,求前n小,n的大小比較小的情況,這樣可以掃描一遍即可得到所有的前n元素,效率很高。
【擴展】
雙堆,一個最大堆與一個最小堆結合,可以用來維護中位數。
【問題實例】
1)100w個數中找最大的前100個數。
用一個100個元素大小的最小堆即可。
海量數據處理專題
(六)火龍果?整理 uml.org.cn
【什么是雙層桶】
事實上,與其說雙層桶劃分是一種數據結構,不如說它是一種算法設計思想。面對一堆大量的數據我們無法處理的時候,我們可以將其分成一個個小的單元,然后根據一定的策略來處理這些小單元,從而達到目的。
【適用范圍】
第k大,中位數,不重復或重復的數字
【基本原理及要點】
因為元素范圍很大,不能利用直接尋址表,所以通過多次劃分,逐步確定范圍,然后最后在一個可以接受的范圍內進行。可以通過多次縮小,雙層只是一個例子,分治才是其根本(只是“只分不治”)。
【擴展】
當有時候需要用一個小范圍的數據來構造一個大數據,也是可以利用這種思想,相比之下不同的,只是其中的逆過程。
【問題實例】
1).2.5億個整數中找出不重復的整數的個數,內存空間不足以容納這2.5億個整數。
有點像鴿巢原理,整數個數為2^32,也就是,我們可以將這2^32個數,劃分為2^8個區域(比如用單個文件代表一個區域),然后將數據分離到不同的區域,然后不同的區域在利用bitmap就可以直接解決了。也就是說只要有足夠的磁盤空間,就可以很方便的解決。當然這個題也可以用我們前面講過的BitMap方法解決,正所謂條條大道通羅馬~~~ 2).5億個int找它們的中位數。
這個例子比上面那個更明顯。首先我們將int劃分為2^16個區域,然后讀取數據統計落到各個區域里的數的個數,之后我們根據統計結果就可以判斷中位數落到那個區域,同時知道這個區域中的第幾大數剛好是中位數。然后第二次掃描我們只統計落在這個區域中的那些數就可以了。
實際上,如果不是int是int64,我們可以經過3次這樣的劃分即可降低到可以接受的程度。即可以先將int64分成2^24個區域,然后確定區域的第幾 大數,在將該區域分成2^20個子區域,然后確定是子區域的第幾大數,然后子區域里的數的個數只有2^20,就可以直接利用direct addr table進行統計了。
3).現在有一個0-30000的隨機數生成器。請根據這個隨機數生成器,設計一個抽獎范圍是0-350000彩票中獎號碼列表,其中要包含20000個中獎號碼。
這個題剛好和上面兩個思想相反,一個0到3萬的隨機數生成器要生成一個0到35萬的隨機數。那么我們完全可以將0-35萬的區間分成35/3=12個區間,然后每個區間的長度都小于等于3萬,這樣我們就可以用題目給的隨機數生成器來生成了,然后再加上該區間的基數。那么要每個區間生成多少個隨機數呢?計算公式就是:區間長度*隨機數密度,在本題目中就是30000*(20000/350000)。最后要注意一點,該題目是有隱含條件的:彩票,這意味著你生成的隨機數里面不能有重復,這也是我為什么用雙層桶劃分思想的另外一個原因。
第四篇:磁粉探傷小結
工件磁粉探傷:
原理,當工件被磁化后,如果
表面或近表面存在裂紋、冷隔等缺陷,表面或近表面存在裂紋、冷隔等缺陷,便會在 該處形成一漏磁場。施加磁粉后,該處形成一漏磁場。施加磁粉后,漏磁場將吸 引磁粉,而形成缺陷顯示。引磁粉,而形成缺陷顯示。
磁粉檢測首先是對工件加外磁場進行磁化,外加磁場的獲得一般有兩種方法,外加磁場的獲得一般有兩種方法,一種是直接 給被檢工件通電流產生磁場,另一種是把工件放在螺旋管線圈磁場中,或是放在電磁鐵產生 的磁場中使工件磁化。工件被磁化后,在工件表面上均勻噴灑微顆粒的磁粉(磁粉平均粒度為 磁粉平均粒度為5~ 粒的磁粉 磁粉平均粒度為 ~10μm),一般用,四氧化三鐵或三氧化二鐵作為磁粉。四氧化三鐵或三氧化二鐵作為磁粉。
若工件沒有缺陷則磁粉在表面均勻分布。如果 存在缺陷,由于缺陷(如裂紋、氣孔、非金屬夾 雜物等)內含有空氣或非金屬 內含有空氣或非金屬,雜物等 內含有空氣或非金屬,其磁導率遠小于 工件,導致磁阻變化,工件表面或近表面缺陷 處產生漏磁場,形成小磁極,處產生漏磁場,形成小磁極。磁粉將被小磁極所吸引,磁粉將被小磁極所吸引,缺陷處由于堆積較 多的磁粉而被顯示出來,多的磁粉而被顯示出來,形成肉眼可以看到的缺陷圖象。磁粉檢測中能否發現缺陷,首先決定于工件 缺陷處漏磁場強度是否足夠大。要提高磁粉檢 測靈敏度,就必須提高漏磁場的強度。缺陷處漏磁場強度主要與被檢工件中的磁感 應強度B有關 工件中磁感應強度越大,工件中磁感應強度越大,則缺陷 處的漏磁場強度越大。
第五篇:磁測成果報告首扉頁格式、字體
地球物理勘查成果報告,是全部內、外業工作及地質成果的集中反映,做好每項工作,才能保證總體工作的質量。下面是磁測報告首頁扉頁的格式及選用字體,提供給大家參考。
××省地質礦產勘查項目成果報告——楷體加粗四號
××省××縣××礦區(礦)地面高精度磁測成果報告——黑體加粗小一號
∟仿宋加粗三號
承擔單位:×××地質勘查公司
二0一一年九月——仿宋常規小三號
××省××縣××礦區(礦)地面高
精度磁測成果報告——宋體加粗二號
項目負責人: 編寫人: 單位負責人: 總工程師:提交單位:提交時間:實施單位:
××××××××× ××××××地質勘查公司 二0一一年九月 ××地質勘查公司
∟仿宋常規四號