数组
摘要:在C和C++语言中,声明数组时[]是放在标识符的后面的,比如下面的方式: int a[10]; char b[3]={‘a’,’b’,’c’}; 下面是不合法的: float c[n]; 因为C中不支持动态数组,而C++支持,动态数组的声明方式如下: float *d = new float[m]; 但下面的方式是不合法的: float d[] = new float[m]; 在C#中声明数组...
阅读全文
Memory Barrier in Compiler and CPU
摘要:Memory barrier, is a type of barrier and a class of instruction which causes a CPU or compiler to enforce an ordering constraint on memory operations issued before and after the barrier instruction. ...
阅读全文
字符串处理之Trie树, 后缀树和后缀数组
摘要:Trie树Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie有3个基本性质:根节点不包含字符,除根节点外每一个节...
阅读全文
排序算法总结
摘要:堆排序 基于比较的排序,由于不管之前的输入是否有序,都需要建堆、维护堆,所以复杂度总是O(nlgn),不具有稳定性。 冒泡排序 基于比较的排序,时间复杂度为O(n2)。优点是具有稳定性,原来在前面的还在前面。 插入排序 最好情况是输入就是按照升序排列,需要n-1次比较;最坏情况就是输入按照降序排列,需要进行n(n-1)/2次比较。平均时间复杂度是O(n2)。因此非常不适合大数据量的排序。 ...
阅读全文
经典计算机基础数据结构:二叉树
摘要:binary tree & BST 二叉树是比较常见的树,可用于实现BST,二叉堆或二叉排序树。下面是两个基本概念: (1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层有叶子节点,并且叶子节点都是从左到右依次排布,这就是完全二叉树。 (2)满二叉树——除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树。 二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于
阅读全文
(zz)Perl里的特殊变量
摘要:$_这个特殊变量是许多Perl函数的默认参数,也是许多Perl控制结构的默认控制变量. $_特殊变量也可当作一个函数调用缺失的参数来使用.foreach 结构的控制变量是可选的,默认为$_的值. Perl把最近发生的系统错误消息保存在特殊变量$!中. #! /usr/local/bin/perl -W#fig05_03.plforeach $name('Amanda','Jeff','Sarah'...
阅读全文
经典计算机基础数据结构:红黑树(插入和删除操作的fixup理解)
摘要:插入操作: RB-INSERT(T, z) 1 y ← nil[T] // y 始终指向 x 的父结点。2 x ← root[T] // x 指向当前树的根结点,3 while x ≠ nil[T]4 do y ← x5 if key[z] < key[x] //向左,向右..6 then x ← left[x]7 else x ← right[x] // 为了找到合适的插入点,x 探路跟踪路径,直到x成为NIL 为止。8 p[z] ← y // y置为 插入结点z 的父结点。9 if y = nil[T]10 then root[T] ← z11 else if key[z] <
阅读全文
字符串搜索算法
摘要:单模式字符串匹配 1. 朴素算法 朴素算法的问题在于不够智能,有些位置明显没有必要进行比较操作,但这个算法无法区分出来,还是继续比较,浪费了资源。 2. KMP算法 在KMP算法中,引入了前缀函数的概念,从而可以更加精确的知道:当不匹配发生时,应该跳过多少个字符。下面介绍前缀函数。 字符串A = "abcde" B = "ab"。 那么就称字符串B为A的前缀,记为B ⊏ A。同理可知 C = "e","de" 等都是 A 的后缀,以为C ⊐ A。 这里模式串 P = “ababaca”,在匹配了 q=5 个字符后失
阅读全文