第一篇:磁测资料数据处理解释小结
磁测资料处理方法:
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一一年九月 ××地质勘查公司
∟仿宋常规四号