Not Only Algorithm,不仅仅是算法,关注数学、算法、数据结构、程序员笔试面试以及一切涉及计算机编程之美的内容 。。
你的位置:NoAlGo博客 »  2014年05月归档

若干面试概率题

概率论是计算机科学非常重要的基础学科之一,概率题也是在程序员求职过程中经常遇到的问题。
以下总结若干经典的概率题,作为练习。

哈夫曼编码

哈夫曼编码(Huffman Coding)是一种非常经典的编码方式,属于可变字长编码(VLC)的一种,通过构造带权路径长度最小的最优二叉树以达到数据压缩的目的。
哈弗曼编码实现起来也非常简单,在实际的笔试面试过程中有可能会遇到,本文主要介绍具体的编码原理,以及使用STL的优先队列进行实现。

继续阅读»

面试中的大数据处理

海量数据处理是面试过程及实际工作经常遇到的一大类,特别是在如今大数据风起云涌的互联网时代。因为数据量太大,对CPU和内存等系统资源要求太高,时间花费太长,需要有特殊的算法和数据结构进行处理。
这里总结下学习过程中的笔记,主要参考自July博客

继续阅读»

面试中经典函数的实现

很多经典的库函数如strcpy,memcpy等虽然思想并不复杂,但要写出一个比较完善甚至是完全正确的程序非常考验一个程序员思维的严谨性和编程的风格,因而非常受面试官的青睐。
本文主要使用C/C++语言实现strcpy、strncpy、memcpy、memmove、memset、strlen等函数,仅供参考。

继续阅读»

杨氏矩阵的操作与计数

杨氏矩阵(Young tableau)是一种简单却很神奇的数据结构,具有类似于堆的操作和性质。在实际中可能不是很常用,但在面试中却经常遇到,比较考察程序员的算法思维能力。
本文主要讲解下杨氏矩阵的定义及一般的操作和计数问题。

继续阅读»

C++单链表面试问题(2)

链表是程序设计的基本数据结构,也是程序员笔试面试中经常出现的问题。虽然链表在实际中应用不是太广泛,但是它在一些细节的处理上能够很好地体现出一个程序员的编程技巧和思维能力。
这里总结了一些面试中常见的单链表内容,具体分为两个部分,本文主要介绍单链表的综合使用问题。

继续阅读»

C++单链表面试问题(1)

链表是程序设计的基本数据结构,也是程序员笔试面试中经常出现的问题。虽然链表在实际中应用不是太广泛,但是它在一些细节的处理上能够很好地体现出一个程序员的编程技巧和思维能力。
这里总结了一些面试中常见的单链表内容,具体分为两个部分,本文主要介绍单链表的基本使用方法。

继续阅读»

C++中String类的实现

String是C++中的重要类型,程序员在C++面试中经常会遇到关于String的细节问题,甚至要求当场实现这个类。只是由于时间关系,可能只要求实现构造函数、析构函数、拷贝构造函数等关键部分。
String的实现涉及很多C++的基础知识、内存控制及异常处理等问题,仔细研究起来非常复杂,本文主要做一个简单的总结和归纳。

继续阅读»

C++ sizeof的内存计算(2)

内存控制是程序设计过程中非常关键的一环,C/C++中使用sizeof计算数据占用的内存大小是一个常见的手段,但是这个问题涉及到很多基础的编程细节,能够很好地反映一个程序员的基本功,成为了笔试面试常见的问题之一。
这里总结了一些常见的问题,鉴于篇幅问题,分成两部分进行,这里主要介绍稍微进阶的第二部分。

继续阅读»

C++ sizeof的内存计算(1)

内存控制是程序设计过程中非常关键的一环,C/C++中使用sizeof计算数据占用的内存大小是一个常见的手段,但是这个问题涉及到很多基础的编程细节,能够很好地反映一个程序员的基本功,成为了笔试面试常见的问题之一。
这里总结了一些常见的问题,鉴于篇幅问题,分成两部分进行,这里主要介绍比较基础的第一部分。

继续阅读»

LIBSVM在Matlab下的使用

支持向量机(SVM,Support Vector Machine)是一种基于统计学习理论的模式识别方法,在解决小样本、高维度及非线性的分类问题中应用非常广泛。
LIBSVM是一个由台湾大学林智仁(Lin Chih-Jen)教授等开发的SVM模式识别与回归的软件包,使用简单,功能强大,本文主要介绍其在Matlab中的使用。

继续阅读»

位运算应用技巧(2)

位运算可以直接操作计算机内存中整数的二进制位,运行效率很高,而且在代码中巧妙地使用位运算能使程序变得迷人,彰显编程的魅力。
这里介绍一些比较常用的位运算技巧,分为两个部分,本文主要介绍一些综合运用的方法。

继续阅读»

位运算应用技巧(1)

位运算可以直接操作计算机内存中整数的二进制位,运行效率很高,而且在代码中巧妙地使用位运算能使程序变得迷人,彰显编程的魅力。
这里介绍一些比较常用的位运算技巧,分为两个部分,本文主要介绍一些基本概念及简单应用。

继续阅读»

扩展KMP算法

前面介绍过经典的KMP算法,本文继续介绍KMP算法的扩展,即扩展KMP算法:给定一个较长的主字符串S和一个较短的模式串T,用m、n分别表示S和T的长度(即m=|S|,n=|T|),定义extend[i]=S[i..n]与T的最长公共前缀的长度,求extend[i]。
为什么说这是KMP算法的扩展呢?显然,如果在S的某个位置x有extend[x]==n,则可知在S中可以找到T,并且首位置是x,这正是KMP算法要解决的问题。而且,扩展KMP算法能找到S中所有T的匹配,更一般地,可以知道S中以每个字符开始的后缀与T的最大的匹配长度(最长公共前缀长度)。

继续阅读»

KMP算法

字符串匹配是计算机中经典的问题:在一个很长的主字符串S中查找一个较短的模式串T,如果T在S中有出现,输出首次出现的下标,否则输出-1。
字符串匹配算法很多,本文主要讲解其中的KMP算法。KMP算法是一个高效的线性时间算法,其代码量不大,但理解稍有困难,需要细细体会。
以下所有例子及代码实现中,字符串下标均从0开始!

继续阅读»

12 下一页 » 最后一页

我的博客

NoAlGo头像编程这件小事牵扯到太多的知识,很容易知其然而不知其所以然,但真正了不起的程序员对自己程序的每一个字节都了如指掌,要立足基础理论,努力提升自我的专业修养。

站内搜索

最新评论