精华内容
下载资源
问答
  • 点间互信息(PMI)主要用于计算词语间的语义相似度,基本思想是统计两个词语在文本中同时出现的概率,如果概率越大,其相关性就越紧密,关联度越高。两个词语word1与word2的PMI值计算公式如下式所示为: P...
           点间互信息(PMI)主要用于计算词语间的语义相似度,基本思想是统计两个词语在文本中同时出现的概率,如果概率越大,其相关性就越紧密,关联度越高。两个词语word1与word2的PMI值计算公式如下式所示为:

    P(word1&word2)表示两个词语word1与word2共同出现的概率,即word1与word2共同出现的文档数, P(word1)与P(word2)分别表示两个词语单独出现的概率,即word出现的文档数。若两个词语在数据集的某个小范围内共现概率越大,表明其关联度越大;反之,关联度越小。P(word1&word2)与P(word1)P(word2)的比值是word1与word2两个词语的统计独立性度量。其值可以转化为3 种状态:
    P(word1&word2) > 0;两个词语是相关的;值越大,相关性越强。 
    P(word1&word2) = 0;两个词语是统计独立的,不相关也不互斥。
    P(word1&word2) < 0;两个词语是不相关的,互斥的。
           情感倾向点互信息算法(Semantic Orientation Pointwise Mutual Information, SO-PMI)是将PMI方法引入计算词语的情感倾向(Semantic Orientation,简称SO)中,从而达到捕获情感词的目地。基于点间互信息SO-PMI 算法的基本思想是:首先分别选用一组褒义词跟一组贬义词作为基准词,假设分别用Pwords与Nwords来表示这两组词语。这些情感词必须是倾向性非常明显,而且极具领域代表性的词语。若把一个词语word1跟Pwords的点间互信息减去word1跟Nwords的点间互信息会得到一个差值,就可以根据该差
    值判断词语word1的情感倾向。其计算公式如下式所示:

    通常情况下,将0作为SO-PMI 算法的阀值。由此可以将得到三种状态:
    SO-PMI(word1)  > 0;为正面倾向,即褒义词 
    SO-PMI(word1) = 0;为中性倾向,即中性词
    SO-PMI(word1) < 0;为负面倾向,即贬义词

    下面是用Java简单实现情感倾向点互信息算法的一个例子:
    public class SemanticOrientationPointMutualInformation {
    	
    	//褒义词
    	private static Set<String> commendatories = null;
    	//贬义词
    	private static Set<String> derogratories = null;
    	
    	static {
    		commendatories = new HashSet<String>();
    		String commendatoryStr = "英俊 美丽 优雅 活泼 时尚 聪明 能干 健康 勤劳 阳光 好学 俏丽 忠心 善良 坚强 独立 团结 优美 义气 智慧 大度 豁达 开朗 富有 专心 勤劳 乐观 可爱 热心 孝顺 妩媚 丽人 矜持 佳丽 柔美 婉丽 娉婷 婉顺 娇柔 可爱 温柔 体贴 贤惠 贤慧 才干 人才  袅娜 赞美 赞赏";
    		StringTokenizer tokenizer = new StringTokenizer(commendatoryStr);
    		while (tokenizer.hasMoreTokens()) {
    			commendatories.add(tokenizer.nextToken());
    		}
    		derogratories = new HashSet<String>();
    		String derogratoryStr = "矮小 猥琐 萎靡 奸诈 歹毒 毒辣 丑陋 弱智 愚笨 愚蠢 阴暗 贬斥 否定 憎恨 轻蔑 责骂 叛逆 汉奸 低能 恶心 阴险 白痴 变态 三八 腐败 呆板 呆滞 土气 无能 懒惰 慵懒 庸才 废物 风骚 下贱 病夫 脆弱 俗气 小气 贫穷 贫贱 花心 悲观 市井 小人 幼稚";
    		tokenizer = new StringTokenizer(derogratoryStr);
    		while (tokenizer.hasMoreTokens()) {
    			derogratories.add(tokenizer.nextToken());
    		}
    	}
    	
    	//初始化文本
    	private DocumentSet initData() {
    		DocumentSet documentSet = null;
    		try {
    			String path = SemanticOrientationPointMutualInformation.class.getClassLoader().getResource("微测").toURI().getPath();
    			documentSet = DocumentLoader.loadDocumentSetByThread(path);
    			reduceDimensionsByCHI(documentSet);
    		} catch (URISyntaxException e) {
    			e.printStackTrace();
    		}
    		return documentSet;
    	}
    	
    	//开方检验特征选择降维
    	public void reduceDimensionsByCHI(DocumentSet documentSet) {
    		IFeatureSelect featureSelect = new FSChiSquare();
    		featureSelect.handle(documentSet);
    		List<Document> documents = documentSet.getDocuments();
    		for (Document document : documents) {
    			Map<String, Double> chiWords = document.getChiWords();
    			List<Map.Entry<String, Double>> list = sortMap(chiWords);
    			int len = list.size() < 100 ? list.size() : 100;
    			String[] words = new String[len];
    			for (int i = 0; i < len; i++) {
    				words[i] = list.get(i).getKey();
    			}
    			document.setWords(words);
    		}
    	}
    	
    	public List<Map.Entry<String, Double>> sortMap(Map<String, Double> map) {
    		List<Map.Entry<String, Double>> list = 
    				new ArrayList<Map.Entry<String, Double>>(map.entrySet());
    		Collections.sort(list, new Comparator<Map.Entry<String, Double>>() {
    			@Override
    			public int compare(Entry<String, Double> o1,
    					Entry<String, Double> o2) {
    				if (o1.getValue().isNaN()) {
    					o1.setValue(0.0);
    				}
    				if (o2.getValue().isNaN()) {
    					o2.setValue(0.0);
    				}
    				return -o1.getValue().compareTo(o2.getValue());
    			}
    		});
    		return list;
    	}
    	
    	/**
    	 * 计算点间互信息
    	 * @param word1
    	 * @param word2
    	 * @param documents
    	 * @return
    	 */
    	private double calculatePMI(String word1, String word2, List<Document> documents) {
    		double w1w2Num = statisticsWordsInDocs(documents, word1, word2);
    		if (w1w2Num == 0) return 0;
    		double w1Num = statisticsWordsInDocs(documents, word1);
    		double w2Num = statisticsWordsInDocs(documents, word2);
    		return Math.log(documents.size() * w1w2Num / (w1Num * w2Num)) / Math.log(2);
    	}
    	
    	/**
    	 * 统计词出现文档数
    	 * @param documents
    	 * @param words
    	 * @return
    	 */
    	private double statisticsWordsInDocs(List<Document> documents, String... words) {
    		double sum = 0;
    		for (Document document : documents) {
    			Set<String> wordSet = document.getWordSet();
    			int num = 0;
    			for (String word : words) {
    				if (wordSet.contains(word)) num++;
    			}
    			if (num == words.length) sum++; 
    		}
    		return sum;
    	}
    	
    	public int judgeEmotion(double value) {
    		return value == 0 ? Emotion.NEUTRAL : (value > 0 ? Emotion.COMMENDATORY : Emotion.DEROGRATORY); 
    	}
    	
    	public void build() {
    		DocumentSet documentSet = initData();
    		Set<String> cs = new HashSet<String>();
    		Set<String> ds = new HashSet<String>();
    		List<Document> documents = documentSet.getDocuments();
    		for (Document document : documents) {
    			String[] words = document.getWords();
    			for (String word : words) {
    				double c = 0.0;
    				for (String commendatory : commendatories) {
    					c += calculatePMI(word, commendatory, documents);
    				}
    				if (c != 0) System.out.println("c: " + c);
    				double d = 0.0;
    				for (String derogratory : derogratories) {
    					d += calculatePMI(word, derogratory, documents);
    				}
    				double value = c - d;
    				if (value != 0) System.out.println("value: " + value);
    				if (value > 0) {
    					cs.add(word);
    				} else if (value < 0) {
    					ds.add(word);
    				}
    			}
    		}
    		System.out.println(cs);
    		System.out.println(ds);
    	}
    	
    	public static void main(String[] args) {
    		new SemanticOrientationPointMutualInformation().build();
    		System.exit(0);
    	}
    	
    }

    代码托管:https://github.com/fighting-one-piece/repository-datamining.git




    展开全文
  • 信息摘要算法-RipeMD以及HmacRipeMD算法

    千次阅读 2011-03-27 19:36:00
    一、简述  除了MD、SHA和MAC三大主流信息摘要算法之外,还有一些不常见的消息摘要算法。包括RipeMD系列、Tiger、Whirlpool和Gost3411算法。同时,RipeMD算法和MAC算法系列相结合,有产生了HmacRipeMD128...

    一、简述

      除了MD、SHA和MAC三大主流信息摘要算法之外,还有一些不常见的消息摘要算法。包括RipeMD系列、Tiger、Whirlpool和Gost3411算法。同时,RipeMD算法和MAC算法系列相结合,有产生了HmacRipeMD128和HmacRipeMD160两种算法。

      针对这些算法进行简单介绍

      1、RipeMD算法:针对MD4和MD5算法缺陷分析提出的算法。这些算法主要是针对摘要值得长度进行了区分

      2、Tiger算法:号称最快的Hash算法,专门针对64为机器做优化了。其消息长度为192位

      3、Whirlpool:被列入iso标准。与AES加密标准使用了相同的转化技术,极大提高了安全性,被称为最安全的摘要算法,长度为512位

      4、Gost3411:信息摘要长度为256位

      这些算法的实现java6都没提供。这里BouncyCastle进行了支持。其实这些算法的调用都一个样,就是换一个调用的名字而已。

     

    二、RipeMD算法和HmacRipeMD算法系列

     

    算法 摘要长度 备注
    RipeMD128 128 BouncyCastle实现
    RipeMD160 160 BouncyCastle实现
    RipeMD256 256 BouncyCastle实现
    RipeMD320 320 BouncyCastle实现
    HmacRipeMD128 128 BouncyCastle实现
    HmacRipeMD160 160 BouncyCastle实现
         

    三、RipeMD系列算法举例(注意他们生成的摘要信息的长度)

    四、总结

    1、HmacRipeMD消息摘要的长度与相应的摘要算法的摘要长度相同:HmacRipeMD128与RipeMD128相对应,消息摘要长度都是32个字符的16进制串。HmacRipeMD160与RipeMD160相对应,消息摘要长度都是40个字符的16进制串。

    2、BouncyCastle不仅仅提供了HmacRipeMD算法的实现,还提供了HmacTiger算法的实现。实现方式与上边的代码清单相似

     

     

    展开全文
  • 生物信息算法笔记

    千次阅读 2018-05-19 22:14:17
    入门生物信息学,选了一条比较难的路,直接从底层算法开始,这种做法其实不太明智。读了"Algorithms on Strings, Trees and Sequences",一本厚厚的算法书,后半部分其实读得有些粗糙。今天读完了第一遍,...

    入门生物信息学,选了一条比较难的路,直接从底层算法开始,这种做法其实不太明智。读了"Algorithms on Strings, Trees and Sequences",一本厚厚的算法书,后半部分其实读得有些粗糙。今天读完了第一遍,总的来说还是有些收获,将笔记记录于此。

    全书总共分为四部分:基本字符串算法、后缀树算法、非精确匹配算法、映射与测序。基本字符串算法以KMP为代表,这个是基本功,而且很久之前的博客竟然正好记录了这个算法;后缀树算法在前几篇博客专门进行了描述;非精确匹配以动态规划为基础,这个也算是老朋友,近期的博客也专门讨论了这个主题,本文也将继续延伸这个话题;映射与测序,也将在此进行讨论。因此本文分为两大部分:非精确匹配的进一步讨论、映射与测序。

    整理得有点乱,甚至有些部分直接用的截图,以后有机会再进一步整理。本文的主要目的是记录一些核心思路,方便今后回顾。

     

    非精确匹配的进一步讨论

    Refining Core String Edits and Alignments

    空间优化:Computing alignments in only linear space

    那么转移方程可以写成如下形式:

    由转移方程可知,空间可压缩一维。

     

    时间优化:Faster algorithms when the number of differences is bounded 

    之前在后缀树的应用里讨论过 k-mismatch的问题,这里讲讨论 k-difference 的问题,区别在于:前者只允许替换,而后者还允许增删。

    两类特殊的 k-difference问题:

    k-difference global alignment 

    下图为动态规划转移表,(0, 0)开始的对角线为主对角线,其左下方的为负对角线,其右上方的为正对角线。若最多允许k 个不同,则最终结果必然从 -k对角线 至 k对角线 之间的条带中的状态推导而来,因为这个条带以外的状态,其匹配已经出现了超过k个不同的字符。

     

    Exclusion methods: fast expected running time 

    先排除一些不可能匹配成功的片段,进而优化计算速度。总的思路如下:

    具体的算法很多,这里描述两个典型的:BYP算法、CL算法。

    BYP算法:

     

    CL算法:

     

    Yet more suffix trees and more hybrid dynamic programming 

    有两个典型的问题。

    The P-against-all problem Given strings P and T, compute the edit distance between P and every substring T' of T. 

    The threshold all-against-all problem Given strings P and T and a threshold d, find every pair of substrings P' of P and T' of T such that the edit distance between P' and T' is less than d. 

    思路:

    对于P-against-all 问题,可以先构建出T的后缀树,在这个后缀树上计算与P的编辑距离,即在后缀树上进行深度优先的动态规划。优点在于可以省去很多重复计算。对于all-against-all 问题,请参考书上相关章节(12.4.2)。

     

    LCS 的快速算法

    其实就是将LCS 问题转化为LIS 问题,而LIS 可以在O(N*logN) 内实现,因此LCS 也变成了O(N*logN)。

    LIS的O(N*logN)算法

    D为数字序列,D的一个cover定义为D的下降序列的集合,且这个集合涵盖了S的序列全部。cover的大小为这个集合中下降序列的个数。

    如:S= 5, 3, 4, 9, 6, 2, 1, 8, 7, 10。则 {5, 3, 2, 1}; {4}; {9, 6}; {8, 7}; {10} 是S 的一个cover,这个cover的大小为5。

    根据定理12.5.4可知,构建最小cover的过程可以采用二分搜索法,因此最终的时间复杂度为O(N*logN)。

     

    如何将LCS 问题转归为LIS 问题

    定义:r(i)表示S1[i]这个字符 在S2中出现过多少次,r=∑r(i)。

    定义:t(x)表示x 这个字符在S2 中出现的位置的列表,并且顺序为从大到小排列。

    举例:S1=abacx, S2=baabca,则 r=3+2+3+1+0=9,t(a)=(6,3,2),t(b)=(4,1)。

    基于S1构建列表SS:对于S1中每个位置i,用t(S1[i])列表进行替换,最终可以得到长度为r的新列表SS。

    举例:对于以上S1和S2,构建的SS为:(6,3,2,4,1,6,3,2,5)。

    定理:SS的LIS 与S1和S2的LCS对应。

     

    拓展:多个字符串的LCS问题,可以用类似的方法转换成LIS问题。

     

    Extending the Core Problem

    主要讨论了3个问题:Parametric sequence alignment 、Computing suboptimal alignments  和 Chaining diverse local alignments。此处主要看下 Parametric sequence alignment。

    实际工作中,会遇到不少带参数的字符串匹配问题。

     

    Multiple String Comparison

    将字符串对齐问题(非精确匹配)从2个字符串拓展到多个字符串,即为多字符串比较问题。实际上从生物学角度来看,多个字符串的问题与两个字符串的问题是相反的。

    两个生物学事实。

    The first fact of biological sequence analysis: In biomolecular sequences (DNA, RNA, or amino acid sequences), high sequence similarity usually implies significant functional or structural similarity. 

    The second fact of biological sequence comparison: Evolutionarily and functionally related molecular strings can differ significantly throughout much of the string and yet preserve the same three-dimensional structure(s), or the same two-dimensional substructure(s) (motifs, domains), or the same active sites, or the same or related dispersed residues (DNA or amino acid). 

    第一个事实是两个字符串问题的生物学基础,第二个事实是间隔问题及多个字符串问题的生物学基础。

    Multiple String Comparison的3大应用:蛋白家族(及超级家族)的呈现、DNA或蛋白质中与结构(或功能)相关的保守片段的识别和呈现、DNA或蛋白质的进化史的推导(进化树的形式呈现)(进化树的内容本文略去)。

     

    Family and superfamily representation

    常用的呈现方式有3种:profile representations, consensus sequence representations, and signature representations. 

     

    profile representations

    定义:Given a multiple alignment of a set of strings, a profile for that multiple alignment specifies for each column the frequency that each character appears in the column. A profile is sometimes also called a weight matrix in the biological literature. 

    举例:下图是对齐后的结果。

    对每列的各个字符计算出现频率,得到下表,即为profile representations。

    对于新字符串aabbc,其相对于profile的最佳对齐方式应当如下图所示。

    解决思路:

    For a character y and column j, let p(y, j) be the frequency that character y appears in column j of the profile, and let S(x, j) denote ∑y[s(x, y) x p(y, j)], the score for aligning x with column j. 

    Let V(i, j) denote the value of the optimal alignment of substring S[l..i] with the first j columns of C. 

    初始条件:

     

    转移方程:

     

    signature representations

    一些保守序列可以用类似于正则表达式的形式表示,这种表示即为signature representations。如某个motif 可表示如下:

    [&H][&A]D[DE]xn[TSN]x4[QK]Gx7[&A]

    "&" stands for any amino acid from the group (/, L,V, M, F, Y, W), "x" stands for any amino acid, and alternative amino acids are bracketed together. The subscript on x gives the length of a permitted substring; "n" indicates that any length substring is possible. 

     

    consensus sequence representations

    找一个公认的有代表性序列,作为该蛋白家族的呈现,即为consensus sequence representations。

    Steiner consensus strings 

    D(Si, Sj) denotes the weighted edit distance of strings Si, and Sj. 

    Given a set of strings S, and given another string S', the consensus error of a string S' relative to S is E(S') = ∑si∈s D(S' Si). Note that S' need not be from S. 

    Given a set of strings S, an optimal Steiner string S* for <S is a string that minimizes the consensus error E(S*) over all possible strings. 

     

    Multiple string alignments 的计算

    给定一种对齐方式,对于其中任意两个字符串计算分值,最后将所有分值求和,得到总分值SP(sum of pairs),目标是使得SP最小化。

    这个问题虽然可以使用动态规划准确求解,但是时间复杂度是指数级的,这是个NP 完全问题。书上给出了三个字符串的SP求解示例程序(pascal语言)。

    此外,书中还给出了bounded-error approximation 的方法(界定误差的近似求法)——center star法。感兴趣的请直接参考章节14.6.2。

     

    Sequence Databases and Their Uses

    这个部分介绍了常见的几个数据库 及其背后的部分算法,如:FASTA、BLAST、PAM、BLOCKS和BLOSUM 等。

    本文此处不进行记录,直接看书吧,或者在实际操作中去领会。

     

    映射与测序

    Mapping

    概念

    以下概念摘自网络资源(具体来源不详)。

    遗传图谱(genetic maps):某一物种的染色体图谱(也就是我们所知的连锁图谱),显示所知的基因和/或遗传标记的相对位置,而不是在每条染色体上特殊的物理位置。采用遗传学分析方法将基因或其它DNA标记按一定的顺序排列在染色体上,这一方法包括杂交实验,家系分析。标记间的距离(遗传图距)用减数分裂中的交换频率来表示,单位为厘摩Centi-Morgan, cM), 每单位厘摩定义为1%交换率。遗传学图谱的解像度(分辨率)低,大约只能达到100万碱基对(1Mb)的水平。

    物理图谱(physical maps):顾名思义,是DNA中一些可识别的界标(如限制性酶切位点、基因等)在DNA上的物理位置,图距是物理长度单位,如染色体的带区、核苷酸对的数量等。

    两者异同:
      ①遗传图谱是基于重组频率,物理图谱是基于直接测量的DNA结构。
      ②减数分裂重组的频率并不统一沿大多数染色体。有一些热点和冷点在重组和/或突变。热点和冷点会导致相当大的格律失真时,遗传图谱和物理地图并排排列时。
      ③遗传图谱表示的是基因或标记间的相对距离,以重组值表示,单位CM
      ④物理图谱表示的是基因或标记间的物理距离,距离的单位为长度单位,如μm或者碱基对数(bp或kp)等。

    简而言之,前者是描述的基因相对位置,后者是具体的碱基位置。

    STS是序列标记位点(sequence-tagged site)的缩写,是指染色体上位置已定的、核苷酸序列已知的、且在基因组中只有一份拷贝的DNA短片断,一般长200bp-500bp。它可用PCR方法加以验证。将不同的STS依照它们在染色体上的位置依次排列构建的图为STS图。在基因组作图和测序研究时,当各个实验室发表其DNA测序数据或构建成的物理图时,可用STS来加以鉴定和验证,并确定这些测序的DNA片段在染色体上的位置;还有利于汇集分析各实验室发表的数据和资料,保证作图和测序的准确性。

    EST是表达序列标签(expressed sequence tag)的缩写,在人类基因组测序工作中,有一个区别于"全基因组战略"的"cDNA战略",即只测定转录的DNA序列。此时,须从cDNA文库中获取一些长为300-400各碱基序列作为表达序列标签,其作用相当于全基因组测序时的序列标记位点(STS),即可用来验证和整理不同实验室发表的cDNA测序资料。两端又重叠序列的EST可以装配成全长的cDNA序列。特定的EST序列有时可代表特定的cDNA。

    辐射性杂交制图技术(radiation-hybrid mapping)是一种体细胞杂交技术,适用于构建人类基因组长范围内的高分辨率连续物理图谱。利用高剂量的X射线将候选染色体打断成若干片段,含有这种片段的细胞可与仓鼠细胞形成杂交克隆。在这种杂交中,人类染色体片段被插入到仓鼠染色体的中间部分,因此大部分克隆片段在进行有丝分裂时处于稳定的状态。

    利用类似于遗传重组原理和最大似然性的统计学方法来计算存在于DNA片段上的多态性或非多态性标记之间的断点频率,以此估计标记之间的距离,并建立人类基因组拷贝库---体细胞杂交系统。可根据不同要求构建出断裂程度不同的多套拷贝,从而得到不同分辨率的放射杂交图。总之,辐射性杂交是建立在受到X射线照射的供体细胞与非放射线处理的受体细胞融合基础上的一种体细胞遗传学方法。

    Physical mapping:STS-content mapping and ordered clone libraries

    下图中有4个STS,其真实顺序如下图所示,但是这个顺序我们事先是不知道的,需要结合后面的计算去推断出来。下图还包含3个clone片段。

    匹配出3个片段各自包含了哪些STS之后,可得到下图的01矩阵,由于事先并不知道各个STS的排列顺序,因此此时顺序是打乱的。

    找出一种排列顺序,使得每行中的1具有连续性,成为一个独立的块。这也就实现了STS顺序的重建。

    Physical mapping: radiation-hybrid mapping 

    这个是加强版的STS顺序问题,每个细胞具有多个不相邻的片段,如下图所示。

    由于不知道真实顺序,匹配各个STS后,得到以下的01矩阵。

    重建STS顺序的方法:traveling salesman tour。

    构建无向图,边 e(u ,v)表示编号为u与v的STS 列,之间有几个01值不相同。为了方便起见,此处略去5-7这3个STS,构建的无向图如下所示。

    找一个从S出发且经历所有节点的路径,且经历的路径总长度(即所有e(u ,v)之和)最短,这条路径的顺序很可能就是STS的顺序。上图求得的最短路径为:S-3-1-4-2,长度为6,对应的连续块的数量为4。遗憾的是并不是真实的顺序1234(真实顺序的连续块的数量竟然更大…)。(期待更好的方法解决这个问题)

    Physical mapping: fingerprinting for general map construction 

    探针问题与STS问题类似,但是探针在DNA序列中可以重复出现,如下图所示。

    上图最终构造的01矩阵是5*4的规模,重建出其真实顺序的难度比较大。有不少文章提出过解决方案,书中描述了一种贪心方法,请参考章节16.8。

     

    Sequencing

    引物步移(primer walking):一种长链DNA测序的策略。根据已测出的序列结构设计测序引物,按第一轮测序得出的新序列,再设计引物进行第二轮测序,如此重复,直至获得全序列。

    嵌套缺失法(Nested deletion) : 该法基本原理是基因DNA链的一端与载体相连固定,另一端在核酸外切酶的作用下随着时间的延长,较匀速地消化变短。这样可人为获得一组长度不等(如依次相差200~250 bp)的从一端开始缺失的DNA片段。它们从缺失端开始的测序可读部分宛如拉杆天线的一段套管,最长片段(未被核酸外切酶作用的DNA)相当于拉杆天线的全长,它的可读部分相当于拉杆天线的最远端的套管。这些DNA片段从长至短虽然依次相差200~250 bp,但从缺失端可读取300~500 bp序列,重叠部分便可准确无误地将相邻段重合拼接。测序中,它们的引物相同因而可以很方便地首先读出引物序列,找出该DNA片段的起始,起始段DNA序列也正是前一较长DNA片段可读的后一部分序列,它们如此重叠嵌套,便可准确测出整个基因(或长DNA链)的序列。

    书中还提到了 "Top-down, bottom-up sequencing( the picture using YACs)" 、"Shotgun DNA sequencing" 等方法的描述。这些东西将会重新学习一遍,之后会系统地学一下WGS的知识。

     

    ----------------------------------------------------------------------------------

    2018/10/02 补充

    学习路上吃了很多亏,无法及时的将所学的东西运用起来。时间不够用啊,我的专业不是这个方向,有很多事情等着我去做呢,这个时候最高效的方式是先了解如何使用,然后练习即可。学有余力再去专研其理论知识(人生苦短)。以今天的经验教训来看,本文的这些东西(包括之前字符串的非精确匹配、3篇后缀树系列博客),以后不要再纠结了,尽量不要把时间花在这方面。

     

    展开全文
  • 地理信息系统算法基础

    千次下载 热门讨论 2009-06-20 10:57:53
    第1章算法设计和分析 1.1概述 1.2算法设计原则 1.3算法复杂性的度量 1.3.1时间复杂性 1.3.2空间复杂性 1.4最优算法 1.5算法的评价 1.5.1如何估计算法运行时间 1.5.2最坏情况和平均情况的分析 1.5.3...
  • 音频信息隐藏算法

    千次阅读 2018-12-28 17:12:20
    主要特点是:嵌入及提取水印速度快,算法简单,容易实现,音频信号中可编码的数据量大;其缺陷是稳健性差。       2、相位隐藏法。 在相位编码中,隐藏的信息是用相位谱中特定的相位或相对相位来表示的,可...

    1、最不重要位法(LSB)

    对音频信号进行采样,将采样值最不重要的位(通常为最低位)用代表水印的二进制位代替,以达到在音频信号中嵌入水印数据的目的。

    主要特点是:嵌入及提取水印速度快,算法简单,容易实现,音频信号中可编码的数据量大;其缺陷是稳健性差。

     

     

     

    2、相位隐藏法。

    在相位编码中,隐藏的信息是用相位谱中特定的相位或相对相位来表示的,可将音频信号分段,每段做离散傅里叶变换,信息只隐藏在第1段中,用代表秘密信息的参考相位替换第1段的绝对相位,保证信号间的相对相位不变,所有随后信号的绝对相位也同时改变。

    相位水印算法的特点是:当代表水印数据的参考相位急剧变化时,会出现明显的相位离差,会影响水印的隐蔽性以及增加水印解码的难度。当音频信号是较安静的环境时,嵌入数据量较少。

     

    离散傅立叶变换(DFT)算法

    主要方法是:先对音频信号进行DFT,然后选择其中频率范围为 2.4-6.4KHz的DFT系数嵌入水印,然后用表示水印序列的频谱分量来并替换相应的DFT系数。其主要特点是:具有定的稳健性,但嵌入量较小。

     

     

    3、直接扩频隐写原理

    直接扩频隐写是将秘密信息经过伪随机序列调制后, 选择合适的嵌入强度迭加到载体音频的整个频谱系数上的技术.传统的变换域包括了 FFT ,DCT , DWT ,随着 MDCT 在 MP3 , AAC 等音频编码中的应用,近年来也提出了基于MDCT 和 MCLT 变换域的直接扩频隐写方法[ 4] .

     

    离散余弦变换(DCT)算法

    主要方法是:首先根据伪随机序列重新排列音频采样信号,对序列进行修正离散余弦变换(MDCT,Modified Discrete Cosine Transform),通过对MDCT的系数进行改变以便嵌入水印,然后进行逆变换得到嵌入水印后的音频序列。

    DCT 算法的主要特点是:选择变换系数(低频、中频或高频),局部修改某些变换系数,以实现水印的嵌入。其透明性较好,能平滑功率谱密度,稳健性随所选频域嵌入系数而有所不同。

    基于DCT谱的频域变换方法,将信息嵌人到音频信号的频谱中去。首先将音频序列分段成一定长度的帧,并用DCT变换计算出该帧的频谱。同时将隐藏信息置乱或交织后串行化为bit流,一个bit的隐藏信息通过改写一个音频帧的频谱,使其符合相应的特征而被嵌入其中,然后对改写了的频谱作IDCT反变换得到复合音频序列。信息提取过程是计算出音频帧的DCT频谱,然后根据其频谱特征决定该帧的隐藏bit是0还是1

     

     

     离散小波变换(DWT)算法

    算法的主要方法是:用Daubechies-4 小波基对原始语音信号进行L级小波分解,对L级的粗糙分量保留不予处理,对L级的精细分量进行处理,以嵌入水印

    陈琦[36]等于 2002 年提出了利用小波变换将一枚签章的数字图像作为水印,嵌入到小波变换的第三层的精细分量中,并在信号嵌入时使用了检测同步信号,但检测时需要通过原始音频信号进行比较才能获得水印。其主要特点是:有较好的透明性、较强的鲁棒性

     

     

     

    4、基于振幅值修改的 wav 音频隐写算法

    算法将秘密音频通过随机数生成器置乱,通过比较原始音频每个采样点分组中振幅值之间的关系,结合待嵌入的秘密信息位进行嵌入修改,嵌入强度依据密钥进行调节。实验结果表明,该算法具有较大的嵌入容量,不可感知性良好,具有一定的抗隐写分析能力,并可实现盲提取。

    该算法根据每 3个采样点振幅值之间的关系,动态调整中间采样点的振幅值用于隐藏秘密信息。在增大嵌入容量的同时,能有效控制嵌入信息对音频质量产生的影响,取得了较好的实验效果

     

     

     

    5、基于回声的水印算法

    回声(Echo Hiding)算法是种经典算法,最初由Gruhl[23]等人于 1996 年提出。其主要方法是通过引入回声来将秘密数据嵌入到载体数据中,利用HAS的滞后掩蔽特性,即弱信号在强信号消失之后变得无法听见,它可以在强信号消失 50-200ms作用而不被人耳觉察。

    在回声隐藏的算法中,编码器将载体数据延迟一定的时间并叠加到原始的载体数据上以产生回声。编码器可以用两个不同的延迟时间来嵌入“0”和“1”。在实际的操作中,用代表“0”或“1”的回声内核与载体信号进行卷积来达到添加回声的效果。要想使嵌入后隐秘数据不被怀疑,并且能使接收方以较高的正确率提取数据,关键在于回声内核的选取。每个回声内核具有四个可调整的参数:原始幅值、衰减率、“1”偏移量和“0”偏移量。

    回声算法的特点是:透明性好,可盲水印检测;但提取水印的正确率不能令人满意。后来,赵朝[30]、Hyen[31]等学者对其进行改进。

    展开全文
  • SHA算法,即安全散列算法...SHA算法能计算出一个数位信息所对应到的,长度固定的字串,又称信息摘要。而且如果输入信息有任何的不同,输出的对应摘要不同的机率非常高。因此SHA算法也是FIPS所认证的五种安全杂...
  • 信息化时代的飞速发展,给人们的...信息加密体系也从早先的对称加密算法,升级到后来的共享秘钥加密体系,再到非对称加密体系。我们大多数人得益于加密算法,却不知其所以然,甚至不知其然。  下面谈一下我对加密的理
  • 多传感器信息融合算法总结

    万次阅读 多人点赞 2018-11-17 14:49:46
    多传感器信息融合算法总结    
  • 张新鹏教授的算法是加密域可逆信息隐藏经典算法以下简称Zhang算法,本篇文章首先介绍Zhang算法流程,然后介绍Zhang算法的严重BUG,即安全性问题。 一、Zhang算法简介: 1、图像加密:采用异或加密原始图像。 2、...
  • OpenSSL 信息摘要算法

    千次阅读 2014-04-24 14:41:54
    OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用.
  • 信息摘要技术及算法介绍

    千次阅读 2017-03-22 11:46:15
    数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。 数据摘要算法也被称为哈希(Hash)算法、...
  • 笔者在前面几篇文章中,一口气分别介绍了【对称加密算法、非对称加密算法信息摘要算法】,从中读者能大致了解到各种算法的应用场景是怎么样的。这一次,我们将进一步介绍【非对称加密算法】和【消息摘要算法】的...
  • 最优化算法之粒子群算法(PSO)

    万次阅读 多人点赞 2018-08-03 10:26:45
    粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.   PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制...
  • 对称算法非对称算法哈希算法区别

    千次阅读 2019-04-12 20:56:34
    假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。对称加密算法的安全性...
  • ACM信息学竞赛算法总结

    千次阅读 2020-02-02 16:10:11
    字符串处理: KMP算法,-- Rabin-Karp 算法 — 最小表示法 Tire(字典树) AC自动机 二叉堆 并查集 树状数组 线段树 分块 拓扑排序 点分治 离线分治算法 二叉查找树与二叉平衡树 可持久化数据结...
  • (1)了解信息隐藏算法的分类方式和分类依据 (2)理解空域信息隐藏算法的基本思想 (3)掌握最低有效位算法原理 (4)完成基于LSB的图像信息隐藏 二、实验内容 载体图像为24位真彩色bmp图像Lena.bmp,嵌入的秘密...
  • 初识LSB信息隐藏算法

    千次阅读 2013-05-18 21:47:05
    初识LSB信息隐藏算法 关于BMP图像的结构网上资料很多,这里不再骜述。 算法是将一个文件以二进制打开,将每一位存放到图片数据区的像素的每个字节的最低位。 以达到信息隐藏的目的。  1//---------------...
  • 信息摘要算法——MessageDigest类

    千次阅读 2016-09-17 17:38:06
    MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。 MessageDigest 对象开始被初始化。该对象通过使用 update...
  • C#调用GDAL算法进度信息传递

    千次阅读 2014-05-01 15:37:37
    GDAL库中提供了很多的算法,同时也提供了进度条的相关接口,本篇博文主要讲述如何在C#中调用GDAL库的算法并将进度信息进行传递出来。
  • 史密斯-沃特曼算法(Smith...尼德曼-翁施算法(Needleman-Wunsch Algorithm)是基于生物信息学的知识来匹配蛋白序列或者DNA序列的算法。这是将动态算法应用于生物序列的比较的最早期的几个实例之一。该算法是由 Saul...
  • 关联规则挖掘算法就是从事务数据库,关系数据库或其他信息存储中的大量数据的项集之间发现频繁出现的模式、关联和相关性。关联算法在科学数据分析、雷达信号分选、分类设计、捆绑销售、生物信息学、医疗诊断及网页...
  • MD5信息摘要算法解析

    千次阅读 2018-04-01 21:48:08
    小明:老师,最近老板让我研究微信支付的接口文档,可是有个地方我总是弄不明白。 老师:什么地方不明白,说来听听...这是为了网络传输安全所做的【信息摘要】签名,签名通常使用【MD5算法】来生成的。 小明:MD5...
  • 人们通过数字形式的多媒体信息来进行数据通信和信息交换,意味着信息交换允许第三方访问所有类型的多媒体信息,将导致很多安全问题。因此,我们急需有效的技术来增强互联网信息的安全性。对于上述问题,传统上通过加密...
  • 特征算法之Moravec算法

    千次阅读 2018-04-24 14:46:11
    特征算法之Moravec算法 前言 Moravec算法原理 Moravec算法实现 参考 ...特征算法之Moravec算法 ...最近一直在学习图像特征提取方面的算法,...我理解特征就是图像内容的一个关键信息,在图像检索、检测、匹配等后续操...
  • 路由算法之距离矢量算法和链路状态算法

    万次阅读 多人点赞 2018-01-11 11:37:05
    路由算法就是通过自己到相邻节点之间的信息来计算出自己到目的地址的最佳出境线路是哪一条,进而进行转发的一类算法。具有代表性的就是距离矢量算法和链路状态算法。  距离矢量算法的特点是:  1.分布的 每个...
  • 网易云音乐登录信息加密算法详解

    万次阅读 2016-10-11 16:28:29
    原文地址:网易云音乐新登录API分析网易云音乐登录加密算法核心过程如下: text = { 'username': username, 'password': password, 'rememberLogin': 'true' } text = json.dumps(text) secKey = ...
  • 在线算法和离线算法

    千次阅读 2018-08-27 19:41:09
    也就是说,对于一个离线算法,在开始时就需要知道问题的所有输入数据,而且在解决一个问题后就要立即输出结果,通常将这类具有问题完全信息前提下设计出的算法成为离线算法( off line algorithms)   例题可供参考...
  • ID3算法信息熵计算公式中为什么以2为log的底呢,求大神给出具体解释最好有 数学推导。
  • 大数据算法 十大经典算法

    万次阅读 2017-12-27 14:39:08
    一、C4.5 C4.5,是机器学习算法中的一个分类决策树算法, 它是决策树(决策树也就是做决策的节点间的组织方式像一棵树,其实是一个倒树)核心算法 ...ID3的改进算法,所以基本上了解了...1、用信息增益率来选择属性。
  • 机器智能-高频问题-无信息搜索算法

    千次阅读 2020-03-08 21:31:47
    首先,解释一下名词,什么是“树搜索算法”? 树搜索算法并不是特指一个算法,而是指一类基于...除了问题定义中提供的状态信息外没有任何附加信息算法只能区分状态是不是目标状态,而无法比较非目标状态的好坏(即...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 70,708
精华内容 28,283
关键字:

信息算法