自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

姚光超的专栏

专注于语音识别和语音唤醒~

  • 博客(118)
  • 资源 (28)
  • 收藏
  • 关注

原创 大模型推理--PagedAttention

在上一篇博客《》中详细介绍了大模型推理的decoding阶段可以采用KV Cache来优化重复计算的原理。虽然KV Cache大幅提升了大模型token生成的速度,但是也引入了新的问题,主要有两个:1. KV Cache在长上下文的情况下占用量非常大,导致batch很小,进而影响吞吐量,甚至根本无法支持长上下文;2. 大模型推理的时候无法预知会产生多少token,所以无法给KV Cache预分配空间,现在的通用做法是按照生成token的上限来分配空间,这产生了非常大的空间浪费。

2024-09-11 09:24:17 947

原创 大模型推理--KV Cache

KV Cache是大模型推理中常用到的一个技巧,可以减少重复计算,加快推理速度。不少人只是从概念上知道它可以减少重复计算,详细的原理则知之甚少,此外为啥只有KV Cache而没有Q Cache呢,我们在本博客中给出详尽的解释。

2024-09-08 22:15:43 1190

原创 大模型推理--FlashAttention

Attention机制可以算是Transformer的灵魂。正因为有了attention,模型的效果才能大幅提升。但同样是因为attention,导致transformer很难处理超长上下文,因为attention占用显存的大小与上下文长度的平方成正比,会导致上下文很长时显存爆炸。FlashAttention正是为了解决显存爆炸而设计的,它不光解决了显存爆炸的问题,同时也加速了attention的计算,并从数学上保证了结果的一致性。

2024-09-04 18:33:33 1329

原创 常见的GPU性能对比

写这篇博客的目的就是想搞清楚英伟达不同显卡之间的性能差异以及移动端GPU的性能达到了英伟达显卡的哪一代,让自己也让大家明白不同显卡的算力差异。所有的数据均从网络搜索,有不正确的地方欢迎批评指正。同一显卡会有一个首次发布,此外还有一系列的迭代升级版本,我们只考虑首次发布版本的性能。鉴于现在的模型推理大多使用int8来进行推理,所以大家可以着重看一下int8算力那一列。

2024-08-14 17:53:59 1354

原创 借助树状数组的思想实现cuda版前缀和

昨天面试快手,面试官出了一个cuda编程题–实现前缀和。当时没有做出来,一直在思考是否有类似于规约树这样的解法,感觉好难……面试结束后搜了一下cuda前缀和的介绍,发现该问题是一个经典的cuda编程问题,NVIDIA很早之前就给出了一个快速的实现。看别人的博客研究了很久也没太明白,索性自己写一个好了。前缀和每一个位置的计算都依赖于前一个位置,这就导致无法利用规约树求和算法逐层递减问题规模。但是前缀和的每一个位置都是从0开始到当前位置的和,总感觉和规约树求和脱不了关系。

2024-08-08 17:37:04 950

原创 如何在3s内对10亿(1G)正整数进行排序

很早之前我曾经写过一篇博客《》,详细介绍了如何对基数排序进行优化,使其速度能达到快排的5倍左右。在博客的最后也提到,可以通过修改基数实现对任意int型正整数的排序。在此,我们继续尝试通过并行手段优化基数排序,速度最快可达系统排序的20倍左右,最终可以在3s左右完成10亿(也即1B)int型正整数的排序。

2024-08-05 19:31:05 872

原创 利用二级指针进行链表操作

Linus曾经在网上吐槽很多程序员不会写真正的底层核心代码,并用简单的单链表删除举例。常规的链表删除除了当前的遍历指针还需要维护一个prev指针,用来连接被删除节点的下一个节点,但实际上利用二级指针就可以避免多维护一个指针,使代码更加简洁。Linus的吐槽没错,到目前为止,我几乎没有在实际工作中看到过用二级指针进行链表删除的相关代码,除了各种网页中对Linus描述的解释。二级指针不光能够简化链表的...

2018-10-19 10:27:38 6563 6

原创 区间调度问题详解

今天给大家介绍一下区间调度问题。区间调度是一类难度比较大,但同时应用比较广的问题,经常会在面试中以各种形式出现。本文将会介绍区间调度的各种变形,希望能使大家在面临区间调度问题时得心应手,并可以在实际工作中巧妙应用。1. 相关定义在数学里,区间通常是指这样的一类实数集合:如果x和y是两个在集合里的数,那么,任何x和y之间的数也属于该集合。区间有开闭之分,例如(1,2)和[1,2]的表示范围不同,后者包

2017-12-25 22:25:59 10197 2

原创 快速浮点开方运算

代码下载:开根号的几种算法实现 在之前的博客中我们介绍了数据类型的地址转换,利用它我们可以将一个float型的值直接看成一个int类型。这种地址转换到底有什么意义,或者说有什么用途呢?今天,给大家展示一个实例—快速浮点开方运算,让大家更加明白地址转换的含义和它们之间的对应关系。1 二分法浮点开方也就是给定一个浮点数x,求x√\sqrt x。这个简单的问题有很多解,我们从最简单最容易想到的二分开始讲

2017-12-19 10:35:16 18211 8

原创 大模型推理--MLA

本来想写一篇KV Cache压缩的综述性博客,结果写到MLA部分的时候发现越写越多,完全值得单独拿出来写篇博客,遂从KV Cache压缩博客中单独揪出MLA进行介绍。MLA(Multi-query Latent Attention)是国内创业公司deepseek在24年5月份发布的大模型中用到的KV Cache压缩技术,正是在该技术的加持下DeepSeek-V2可以大幅压缩KV Cache的大小,进而大幅提升吞吐量,也正是从该模型开始,大模型推理的价格一下降低到一个很低的水平。

2024-09-19 23:20:29 527

原创 如何在3s之内解决17皇后问题

随着LeetCode逐渐被大家熟知,也变得越来越容易了(题号只有51,大部分刷题的人都会刷到),但是LeetCode中的题目规模只到9,所以处理起来不是特别麻烦。18年的时候,楼教主在小马智行的招聘面试中出了一个17皇后的问题,很多人吐槽“出的题好简单,楼教主不刷力扣吗”。不要小看数字17,随着N的增大,N皇后的复杂度会越来越高,时间会以量级的规模上升,我们需要经过很多优化才能使得17皇后的求解速度达到3s以内。

2024-08-02 17:48:24 683

原创 蓄水池抽样算法

最近面试字节,被面试官问到一个这样的问题:给定一个超大的文件,从该文件中随机选取k行文本出来,使得每一行被选择的概率相等。当时一脸懵,后来了解到这个问题需要通过蓄水池抽样算法来解决,经过两天的学习大概搞明白了算法原理,简单记录一下。...............

2022-07-07 11:34:05 416 1

原创 Leetcode 之 Count Complete Tree Nodes

问题来源:Count Complete Tree Nodes问题描述:给定一棵完全二叉树,求树的节点个数。完全二叉树就是把满二叉树右侧的叶子节点删掉几个构成的二叉树。该问题一看就不能用传统的递归遍历或者层次遍历来统计节点个数,因为这没有利用到完全二叉树的性质,估计提交会超时。所以我们需要另辟蹊径,想想如何利用完全二叉树的性质来统计节点个数。解法一面对树的问题,我们首先想到的思路就是采用递归。针对该问题也可以采用递归实现(当然不是遍历所有节点的递归),不过在递归的时候需要我们发现完全二叉树的一个性质:

2021-01-28 23:13:25 502

原创 leetcode之Long Pressed Name

问题来源:Long Pressed Name问题描述:判断字符串name是否是由长按字符串typed得来。长按含义是name的每个字符可能会重复1到多次。看到该题目第一眼还以为是Is Subsequence,判断短串是否是长串的子序列,随即用该思路实现了一版,结果发现不对。原因在于在本题中要求的长按模式比子序列更为严格:首先name的开头和结尾字符要和typed的开头和结尾字符相同,此外typed的字符顺序要和name相同,中间不得插入其他字符。后来又想到另一种思路:把typed中前后相同的字符进行压缩

2021-01-16 22:16:17 421 1

原创 利用callgrind+gprof2dot+dot进行性能分析

在确保代码运行正确无误之后,我们往往都需要进行性能优化,不过受限于阿姆达尔定律,性能优化需要针对热点代码进行。热点代码可以通过分析算法复杂度获得,也可以通过运行性能分析工具获得。在此我们给大家介绍一组工具callgrind+gprof2dot+dot,可以非常方便地分析代码瓶颈。1.CallgrindValgrind是一款常用的代码分析工具,在大多数情况下我们都会用它来帮我们查找内存泄露和内存读写错误,但实际上,它的功能远不止如此。利用它的callgrind工具我们还可以对代码各部分的运行时间进行分析。

2020-11-16 22:13:27 2356 3

原创 leetcode 之 move zeros

问题来源:move zeros问题描述:给定一个数组,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。看到该问题第一个感觉很easy啊,抬手就来:void moveZeroes(vector<int>& nums) { int start=0,end=nums.size()-1; while(start<end) { while(start<end&&nums[start]!=0) start

2020-10-23 22:12:55 313

原创 leetcode之Isomorphic strings

问题来源:Isomorphic strings问题描述:给定两个字符串,判断它俩是否满足同构关系。同构关系表示两个字符串的字符能一一对应,例如title和paper构成同构关系,而foo和bar不构成同构关系。该问题属于一个比较简单的题目,利用两个map分别对每个字符串的字符建立映射关系即可判断两个字符串是否满足同构关系(注意:必须要用两个map,可以利用ab和aa来理解)。该问题的有趣之处在于它有多种解决思路,而且相比原始思路会使代码更加简洁。解法一如果给定字符串的每个字符都是ASCII码(事实也

2020-10-21 23:20:36 179

原创 Matlab类与链表

最初知道matlab可以创建链表是通过阅读博客:在matlab中实现链表知道的。然后通过仔细阅读matlab帮助文档,终于自己搞明白如何利用matlab创建链表。首先介绍matlab中的类。1 matlab中的class 起初认为matlab是面向过程式的语言,通过编写一系列函数或者脚本完成任务,但其实matlab中也可以通过创建类的方式实现面向对象编程。其实自己早就应该发现,在

2020-02-27 10:02:31 20244 1

原创 CMake入门

在之前的工作中经常用Makefile来编译项目,但是最近需要阅读别人的项目需要用到CMake,在此记录一下CMake的入门级知识。添加项目中所有的代码文件aux_source_directory命令会查找指定目录下的所有源文件,然后将结果存进指定变量名。#查找当前目录下的所有源文件#并将名称保存到 DIR_SRCS 变量aux_source_directory(. DIR_SRCS)#...

2020-02-16 19:07:15 1115

原创 最小化曼哈顿距离

曼哈顿距离曼哈顿距离和欧式距离一样是一种距离度量标准,不同的是它定义在L1范数下,也即用绝对值来衡量两点之间的距离。在一维空间下,曼哈顿距离定义如下:d(x,y)=∣x−y∣d(x,y)=|x-y|d(x,y)=∣x−y∣在二维空间下,曼哈顿距离定义如下:d(x,y)=∣x1−y1∣+∣x2−y2∣d(x,y)=|x_1-y_1|+|x_2-y_2|d(x,y)=∣x1​−y1​∣+∣x2...

2019-07-07 18:10:30 12946 3

原创 k均值图像分割的GPU加速

图像分割是指把图像分成各具特性的区域并提取出感兴趣目标的技术和过程,是从图像处理到图像分析的关键步骤。K均值聚类算法是目前最受欢迎和应用最为广泛的聚类分析方法之一。K均值聚类算法用于图像分割具有直观、快速、易于实现的特点。不过当图像很大或者k很大时,采用k均值算法进行图像分割会异常缓慢,所以我们需要对其进行加速。幸运的是,k均值算法最核心的步骤具有很高的并行性,这给我们加速带来了很大遍历。我们既可...

2019-06-04 17:08:45 2346 2

原创 cuda half编程的各种坑

自cuda7.5开始我们可以直接用half(fp16)编程,理论上速度会比float快一倍左右。理想虽好,现实却比较骨感,在实际中会遇到各种坑,最终的结果却是不一定有收益,下面把自己在用half编程中踩过的坑记录一下。1. half编程和计算能力密切相关half编程要求GPU的计算能力要大于等于5.3,这就意味着大家很多GPU不支持此功能。例如,GTX 1050之前的GPU全不支持half计算...

2019-05-24 18:24:24 9395 1

原创 cblas_sgemm和cublasSgemm参数详解

机器学习最核心的底层运算肯定是矩阵乘法无疑了,为了让矩阵乘法执行更快,大家也是绞尽脑汁。从算法层面,stranssen算法将矩阵乘法复杂度由O(n3)O(n^3)O(n3)降到O(n2.81)O(n^{2.81})O(n2.81),最新的算法好像已经降到O(n2.37)O(n^{2.37})O(n2.37)左右了(Coppersmith–Winograd algorithm),但这只是理论复杂度,...

2019-05-21 17:42:30 10467 1

原创 leetcode 之 Merge k Sorted Lists

问题来源:Merge k Sorted Lists该问题是一个很经典的问题,给定k个有序链表将其合并成1个有序链表。很多人应该在实际的面试中遇到过该问题(至少我会经常问面试者该问题,因为接着可以问堆相关的算法~)。为啥要针对该经典问题写篇博客呢,是因为该问题确实会在日常工作中出现,但是却很少有人想到用优化的算法来解决该问题。我们先看一下该问题的两种优化解法。解法一最常用的方法是利用最小堆(链...

2019-03-16 15:27:17 1828

原创 利用ARM NEON intrinsic优化常用数学运算

ARM NEON是arm平台下的SIMD指令集,利用好这些指令可以使程序获得很大的速度提升。不过对很多人来说,直接利用汇编指令优化代码难度较大,这时就可以利用ARM NEON intrinsic指令,它是底层汇编指令的封装,不需要用户考虑底层寄存器的分配,但同时又可以达到原始汇编指令的性能。 所有的intrinsic指令可以参考博客《ARM Neon Intrinsics各函数介绍》,本...

2018-04-14 21:13:41 14315 5

原创 arpa2fst 原理详解

在基于 wfst 的语音识别中,需要将 HCLG 四个不同层次的模型复合(composition)在一起构成一个超大的解码网络,其中的 G 即是语言模型的 WFST表示。但是我们常见的语言模型并不是以 WFST 形式存在的,而是基于 ngram 实现的,通常以 arpa 文件形式存在。所以复合的第一步就是将 arpa 文件转为 wfst,在 kaldi 中以 arpa2fst 脚本形式存在,我们在此

2017-12-08 22:15:26 8866 9

原创 语音识别中的lattice与confusion network

如果大家使用搜狗输入法的语音识别可能会发现在我们说我一句话之后,语音识别会返给你多个结果,这些结果之间只有微小差异(很多时候是发音相同的替代词)。绝大多数时候,输入法给出的结果就是我们需要的,但是偶尔也会出现候选结果中的才是我们需要的。你可能会好奇这些候选结果是如何产生的,在本文中我就给大家简单介绍一下。one best最初的语音识别结果只有一个,也被称为one best,即一个最优结果。语音识别解

2017-08-27 17:05:52 12297 7

原创 流式数据中的数学统计量计算

在科技飞速发展的今天,每天都会产生大量新数据,例如银行交易记录,卫星飞行记录,网页点击信息,用户日志等。为了充分利用这些数据,我们需要对数据进行分析。在数据分析领域,很重要的一块内容是流式数据分析。流式数据,也即数据是实时到达的,无法一次性获得所有数据。通常情况下我们需要对其进行分批处理或者以滑动窗口的形式进行处理。分批处理也即每次处理的数据之间没有交集,此时需要考虑的问题是吞吐量和批处理的大小。滑

2017-07-03 22:38:04 6653

原创 Linux下统计文档中每个字符出现的次数

给定一个中文文档,我们想统计其中每个字出现的次数该怎么做呢?如果是英文文档,这个问题有比较固定的思路:用tr命令或者awk命令按照每行的空格将单词切分到多行,然后sort命令排序所有的行,最后uniq命令统计重复行的次数即可获得每个单词出现的次数。但是换成中文文档之后,tr或者awk命令就无法再根据空格将一行汉字切分到多行,需要我们更换其他命令。 一种可行的方法是借用cut命令。cut命令

2017-03-24 10:42:02 9353 1

原创 利用FFmpeg将pcm文件转成wav文件

现在需要利用cool edit对一批pcm音频文件进行分析。由于没有相关信息指定音频的采样率,信道数和精度,所以cool edit在打开一个pcm的时候需要让我们指定相关参数。当需要分析的pcm非常多时,每次都需要指定相关参数就显得非常麻烦。我们可以给pcm文件添加一个wav文件头来指定相关参数,从而无需每次打开进行设置。 给原始的pcm数据添加wav头不是什么麻烦事,我们完全可以写一个c

2017-03-12 14:24:44 13589

翻译 《Machine Learning is Fun Part 6: How to do Speech Recognition with Deep Learning》译文

最近看到一篇介绍语音识别的《博客》,感觉写得不错,正好自己也在搞语音识别,就把它翻译成中文,希望对语音识别感兴趣的同学有所帮助。(囧:原来网上早就有翻译了,白浪费两天时间翻译,大家选择性围观)语音识别正在占领我们生活的各个方面,手机、游戏手柄和智能手表中都会发现它的身影。同时它也在使我们的家庭更加智能,只需要花费50美元我们就可以买到亚马逊的Echo Dot—一个可以帮我们订披萨,获得天气预报,甚至

2017-03-02 22:48:45 2363 1

原创 NDK编程的一个坑—Arm平台下的类型转换

最近在做DNN定点化相关的工作,DNN定点化就是把float表示的模型压缩成char表示,虽然会损失精度,但是由于DNN训练的模型值比较接近且范围较小,实际上带来的性能损失非常小。DNN定点化的好处是可以以4倍的效率压缩模型,这个在移动端会具有比较大的优势。 做完定点化之后,在x86服务器上验证没有问题,但是利用NDK移植到arm移动端却一直得不到正确结果,真是一时头大。通过仔细调试,最终

2017-01-15 15:14:02 2343 1

原创 leetcode之Find All Numbers Disappeared in an Array

问题来源:Find All Numbers Disappeared in an Array 很久没有刷题了,感觉大脑开始迟钝,所以决定重拾刷题的乐趣。一开始不要太难,选一些通过率高的题目做,然后就看到了这个题目。我有些吃惊,这个题我虽然知道两种解法,但本身还是有难度的,居然通过率这么高。然后就搜索相关网页,看到一个和它很接近的题目《Find All Duplicates in an Array》,

2016-12-24 18:21:10 10659

原创 Linux下的有用命令

在之前的博客《Linux下常用命令与使用技巧》中,介绍了Linux的常用命令,在今天的博客中,给大家介绍其他的有用命令。1.文本转换命令在Linux下工作,我们不可避免地要和文件格式做斗争,相信大家也深刻地体会过格式的复杂性。今天给大家介绍几个在实际中经常用到的和格式相关的命令。export命令在linux命令行中输入汉字的时候有时候会显示乱码,这时我们就需要设置一下系统的编码方式。可以先用loca

2016-12-10 18:21:57 2631

原创 链表的替代品—内存池

链表是大家非常熟悉的数据结构,使用频率也非常高,但是链表有几个缺点。首先,我们每创建一个节点,都要进行一下系统调用分配一块空间,这会浪费一点时间;其次,由于创建节点的时间不固定,会导致节点分配的空间不连续,容易形成离散的内存碎片;最后,由于内存不连续,所以链表的局部访问性较差,容易出现cache缺失。 针对链表的上述问题,在实际工作中,我们很少直接用链表,而是采用链表的替代品—内存池。上过

2016-11-27 19:06:16 2675

原创 基于递归分割的迷宫生成算法与自动寻路

代码下载:基于递归分割的迷宫生成算法与自动寻路 今天给大家介绍一个图形学里的东西—迷宫的生成算法。迷宫的生成算法有很多种,比如基于深度优先和广度优先的生成算法,在此介绍另外一种方法,基于递归分割的迷宫生成算法。网上大部分迷宫生成算法生成的迷宫墙壁都是线条,本文生成的迷宫墙壁是正方形,先给大家看个示例: 下面就开始正式介绍基于递归分割的迷宫生成算法。1. 生成迷宫在生成迷宫之前,我们需要先确定

2016-07-31 14:06:43 20322 12

原创 leetcode之Largest Rectangle in Histogram

问题来源:Largest Rectangle in Histogram 问题描述:给定一个长度为n的直方图,我们可以在直方图高低不同的长方形之间画一个更大的长方形,求该长方形的最大面积。例如,给定下述直方图,我们 可以以高度5宽度2画一个更大的长方形,如下图,该长方形即是面积最大的长方形。 该问题是难度比较大的问题,但是很出名,经常作为面试题出现。最近陈利人老师给出该问题的一个O(n)

2016-07-30 13:47:33 9102

翻译 《An Introduction to Signal Smoothing》译文

最近在做数据平滑相关的工作,正好读到该篇博客,感觉不错,就翻译了一下。原链接:An Introduction to Signal Smoothing信号平滑简介噪声无处不在,不管是在采集手机游戏的加速度数据还是在测量房间的温度,都会引入误差。即使我们有能力消除所有的误差,测量的结果依旧包含一定程度的不确定性。假如玩家随意点击了一下手机屏幕,他们到底想点击哪里是不确定的。所有这些问题都强迫我们重新思考

2016-06-28 22:22:41 1946

原创 无锁队列的实现

无锁队列的实现耗子叔曾经写过一篇同名的博客,主要参考了John D. Valois 1994年10月在拉斯维加斯的并行和分布式系统国际大会上的一篇论文——《Implementing Lock-Free Queues》。但是从目前现状来看,这篇论文中提到的算法是有问题的,并没有在实际中被采用。现在被广泛采用的无锁队列实现都是基于Maged M. Michael和Michael L. Scott 95年

2016-06-12 22:42:05 9562 5

原创 最左侧1问题

今天给大家介绍一个有趣的位运算题目,叫最左侧1问题,英文名叫count leading zeros或most significant bits problem。问题比较好理解,就是给定一个整数,然后看最左侧的1出现在什么位置,等价于寻找整数的最高有效位或者前置零的个数。比如,0x128只有一个1,从右侧遍历1出现在第7位(从0开始计数)。我们给出几种不同的解法。以下解法返回的均是从右侧遍历的位置。

2016-03-05 12:45:02 5533 4

基于递归分割的迷宫生成算法与自动寻路

本项目实现了一个基于递归分割迷宫和自动寻路的java可视化,相应博客地址为:http://blog.csdn.net/yutianzuijin/article/details/52078340

2016-08-01

java记事本

本代码用java实现了一个简单的记事本程序,特别的包括用kmp算法实现的查找替换和双向链表实现的查找位置保存。

2015-07-26

WAP 2013年笔试题(区间相关)

本资源是WAP公司2013年的笔试题,涉及的题目是关于区间调度的。

2015-04-18

开根号的几种算法实现

本代码实现了多种开根号算法,方便大家对比。

2014-10-19

基于Access数据库的matlab学生成绩管理系统

本项目是中国地质大学matlab课程的大作业,利用matlab实现一个学生成绩管理系统,本人利用access数据库存储学生成绩,然后实现了matlab和access的交互。

2014-06-29

基于隐马尔可夫模型的有监督词性标注

本项目采用java实现了一个基于隐马尔可夫模型的中文句子词性标注系统,并附有详细的说明文档,对于想了解HMM和词性标注的人都会有很大帮助。

2014-06-22

哼唱检索的并行化方法研究与实现

本论文是自己的硕士毕业论文,方向是哼唱检索的并行化。主要包括:多声部音乐的基频序列提取及其GPU加速,特征匹配算法DTW的GPU加速和MPI分布式计算。对从事哼唱检索和GPU加速的人有较大帮助。

2014-03-18

基于XMPP协议的Qt聊天程序

本资源是自己写的利用XMPP协议进行聊天的软件,界面实现采用Qt,功能和QQ很类似,对学习XMPP协议和Qt很有帮助。

2013-08-27

vim高亮插件

执行下述命令安装vim插件: # cp hidden.vimrc ~/.vimrc # cp -r hidden.vim ~/.vim # sudo apt-get install cscope # sudo apt-get install exuberant-ctags # sudo cp find_tagstuff /usr/bin/ # sudo chmod 777 /usr/bin/find_tagstuff

2013-06-20

Pro Git教程

本文档是学习Git的首选教程,详细介绍了Git的使用。

2013-06-11

storm资源分享

本压缩包包括两个资源:getting started with storm和自己整理的storm介绍。

2013-03-24

matlab下链表的实现方法

该程序实现了在matlab下,用实现类的方式实现了一个简单的单向链表,可以方便大家参考扩展。

2012-09-03

marsyas工作过程

本文档是自己阅读marsyas之后写的一个关于marsyas示例程序HelloWorld的运行过程分析,对想使用开源项目marsyas的人会有比较大的帮助。

2012-07-09

基于PCA(主成分分析)的人脸识别

本matlab程序实现了基于PCA的人脸识别,并提供了相应的论文和测试数据集,并给出了测试结果。

2012-06-03

k均值图像分割

本程序用matlab实现了基于k均值算法的图像分割,效果很好。

2012-03-12

c语言快速排序

用c语言实现的一个快速排序。数组用随机数生成,方便大家学习。

2012-03-12

TCP实现windows和linux之间文件传输

本项目利用tcp协议在windows和linux之间传递文件,windows下实现服务器端,linux下实现客户端。此程序可以方便用户在windows和linux之间快速的传递文件,在局域网下传输速度可以达到8MB/s。

2012-03-02

高效的霍夫曼文本压缩

程序实现了c语言下霍夫曼文本压缩,测试的结果是:118M的文本压缩需要7s,解压需要4s。程序采用wchar读取字符,所以可以识别汉字。字符的存储采用散列,既考虑了速度,又兼顾了空间。压缩用最大堆来构造霍夫曼树。解压用最小堆重构霍夫曼树。较之以前自己用java实现的版本速度有很大提高。

2011-10-31

c语言动态数组的实现方法

该项目利用c语言的malloc函数实现了一维和二维动态数组的创建,并且二维数组采用了两种方式。该项目对了解程序的内存分配具有很好的益处。

2011-03-01

基于最短路的GPS地图导航

本程序用java实现了一个简单的地图导航程序。通过导入部分济南市地图,然后采用dijsktra算法计算用户任意指定两点的最短路,并用图形界面显示出来。

2011-02-28

OpenGl实现太阳系

利用opengl实现了太阳系中球体的运行,并且利用贴图技术和光照技术使场景更加逼真。此外还可以利用键盘控制视角,修改转速等。

2010-12-20

PL0 集成开发环境

该程序是完全按照Eclipse开发环境为PL0语言设计的,实现了基本的文本操作:复制、粘贴、剪切和查找替换,还可以在新建文件和删除文件,还可以打印。 除了这些基本功能外,当然实现了词法、语法和运行PL0程序。 10分值不值下下来看看,这是山东大学的编译原理实验。

2010-07-12

OpenGL凸包程序

此程序用C编写,利用OpenGL实现图形界面,实现了二维坐标系下的凸包算法,可以动态添加顶点,还可以自动生成。

2010-03-27

PL0递归下降编译程序

此程序是山东大学编译原理实验,完成了对Pl0程序的词法分析、语法分析与解释执行。程序采用了递归下降分析法,实现了对注释的添加,而且扩展了else语句,具有良好的程序结构。

2010-03-12

用霍夫曼树实现的文本压缩*(升级版)

此程序是自己原来程序的升级版本,压缩文件的大小从原来的几十K提高到可以压缩上M的文本文件。同时添加了进度条,使界面更加友好。可解压文件的大小也有所提高,可以解压近百K的文件。

2010-03-05

用Java写的学生管理系统

自己写的感觉很完善的学生管理系统,实现了教师、学生基本信息录入、选课、成绩管理等功能。

2009-09-23

用霍夫曼树实现的文本压缩

通过统计文本文档中的字符信息,构造霍夫曼树,之后进行压缩。对于几十K的文档效果不错。

2009-07-07

GUI的Java课表排序

用拓扑排序实现的一个简单课表排序界面。用户输入课程数目和课程以及它们之间的优先级,则可显示一个最优的排序结果。

2009-07-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除