
编程与笔试训练
文章平均质量分 83
Lin-JM
这个作者很懒,什么都没留下…
展开
-
指纹增强程序Hong_enhancement
本算法是基于Lin Hong et al 的论文“Fingerprint ImageEnhancement: Algorithm and Performance Evaluation”编写而成。其中一个重要的假设就是:沿脊线垂直方向的灰度变化呈正弦波形。LinJM原创 2013-08-11 20:46:38 · 4445 阅读 · 5 评论 -
智能指针 shared_ptr 解析
最近正在进行《Effective C++》的第二遍阅读,书里面多个条款涉及到了shared_ptr智能指针,介绍的太分散,学习起来麻烦,写篇blog整理一下。LinJM @HQUshared_ptr是一个智能指针。在C++ 11颁布之前,它包含在TR1(Technical Report 1)当中,现在囊括在C++11的标准库中。智能指针(Smart pointers)是存储“指向动态分配(在堆上)的对象的指针”的对象。也就是说,智能指针其实是个对象。不过它的行为很像C++的内建指针,只是它们可以在适当原创 2014-05-05 17:04:15 · 3623 阅读 · 0 评论 -
基本图算法(广度优先搜索和深度优先搜索)
图算法对于计算机学科至关重要。成百上千的计算问题最后都可以归约为图论问题。本文主要是对《算法导论》图算法的学习笔记进行整理。首先,我们先对图算法中的一些表达方式进行统一:给定图G=(V,E),当对该图上的一个算法的运行时间进行表述时,我们通常以图的结点数|V|和边的条数|E|作为输入的规模。另外,我们用G.V来表示图G的结点集,用G.E表示图G的边集合,也就是说,我们将结点和边看作是图的属性。原创 2014-03-17 17:54:46 · 2506 阅读 · 0 评论 -
如何在复杂代码中寻找BUG
来自知乎问答,看了觉得很有益,就整理过来学习一下。原始提问:快毕业的通信学生,之前正式代码经验几乎零。目前在已经给Offer的公司实习安卓开发。Mentor说先从找code base中bug开始。但是我感觉我们的codebase好复杂,这几天突然没什么进展。uml之类的也画了不少。想问问前辈们有什么建议?解答:1:来自姚冬,哥写的不是代码,是梦想我曾经做了两年大型软件的维护原创 2014-03-14 15:49:45 · 1962 阅读 · 0 评论 -
关于数组指针的一道题
先看下面这段小代码:#include int main(){ int a[5] = {1,2,3,4,5}; int b[100]; int *ptr = (int *)(&a+1); printf("%d\n%d\n",*(a+1),*(ptr-1)); printf("sizeof(b)=%d\n",sizeof(b)); printf("sizeof(&b)=%d\n",原创 2014-03-12 14:16:13 · 1340 阅读 · 0 评论 -
libsvm代码阅读:关于svm_group_classes函数分析
upadate :2014-2-28 LinJM @HQU 『 libsvm专栏地址:http://blog.youkuaiyun.com/column/details/libsvm.html 』目前最新的version是3.17,主要的改变是在svm_group_classes函数中加了几行代码。官方的说明如下:svm_group_classes函数的功能是:group training data of the same classImportant:如何将一堆数据归类到一起,同类的连续存储!可参考这个函数。原创 2014-02-28 13:39:08 · 3810 阅读 · 0 评论 -
libsvm代码阅读:关于svm_train函数分析
在svm中,训练是一个十分重要的步骤,下面我们来看看svm的train部分。在libsvm中的svm_train中分别有回归和分类两部分,我只对其中分类做介绍。分类的步骤如下:统计类别总数,同时记录类别的标号,统计每个类的样本数目将属于相同类的样本分组,连续存放计算权重C训练n(n-1)/2 个模型初始化nozero数组,便于统计SV//初始化概率数组训练过程中,需要重原创 2014-02-24 22:19:30 · 10004 阅读 · 0 评论 -
libsvm代码阅读:基础准备与svm.h头文件
Update:2014-2-25 LinJM @HQU libsvm是国立台湾大学Chih-Jen Lin开发的一个SVM的函数库,是当前应用最广泛的svm函数库,从2000年到2010年,该函数库的下载量达到250000之多。它的最新版本是version 3.17,主要是对是svm_group_classes做了修改。libsvm函数包的组织结构如下:1、主文件路径:包含了核心的C/C++程序和例子数据。其中svm.cpp是svm的核心程序,它实现了svm的训练和测试算法。2、tool子文件路径原创 2014-02-19 19:07:23 · 6360 阅读 · 0 评论 -
常见的C++知识
scanf函数定义在<stdio.h>中,是格式转换函数,即按用户指定的格式从键盘上把数据输入到指定的变量中。成功输入则返回“1”。头文件必须使用保护宏C++中防止头文件被包含两次有两种方法解决:【A:保护宏】#ifndef _ABCDE_H #define _ABCDE_H //代码部分#endif在被包含过一次之后,宏_ABCDE_H已经有了,下次再碰到就会略过从#define _ABCDE_H开始到#endif之间的代码【B:还有一种特定编译器支持的指令:】b.#pragma原创 2013-12-23 18:11:52 · 2942 阅读 · 0 评论 -
内存管理内幕 - 动态分配的选择、折衷和实现
本文转载自IBM developerWorks ,英文原文链接如下:Inside memory managementJonathan Bartlett (johnnyb@eskimo.com), 技术总监, New Media Worx简介: 本文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将原创 2014-04-13 10:45:20 · 2035 阅读 · 0 评论 -
基于opencv的车牌识别解析与代码
车牌识别太出名了,我也就花几天来了解下这个系统,并结合opencv进行实现。下面是一些介绍:车辆牌照识别(License Plate Recognition,LPR)技术作为交通管理自动化的重要手段和车辆检测系统的一个重要环节,在交通监视和控制中占有很重要的地位。LPR系统可以广泛应用于高速公路电子收费站、出入控制、公路流量监控、失窃车辆查询、停车场车辆管理、公路稽查、检测黑牌机动车、监控违章车辆的电子警察等需要车牌认证的重要场合,尤其是基于车牌识别技术的高速公路收费系统中,相对于射频卡等技术,可以实现不原创 2014-01-02 17:38:13 · 53549 阅读 · 15 评论 -
Matlab高性能编程——代码优化和并行计算
最近写了一个模式识别的程序,可是发现时间复杂度有点高,等待结果的时间要挺长的,所以重新拿出书本来复习一下MATLAB代码优化。MATLAB是一种专门为数组运算而设计的语言,因此在程序设计中要注意充分利用这一优点来加快运算速度。现在比较通用的两种代码优化方法是:(1)向量化循环;(2)预分配数组(1)向量化循环:向量化即是将for循环和while循环转换为等价的向量或矩阵运算,它可以原创 2013-08-03 11:49:19 · 14426 阅读 · 0 评论 -
暑期开发过程中的一些经验记录
一、GDI+设置二、调试经验当利用VS2010定位出new出现泄漏后,应该在下方(不一定是当前块内)该new变量不使用后delete;三、free和delete如何知道需要释放的内存大小在利用malloc或new分配内存空间的时候,实际分配的空间会比程序员申请的空间大。实际分配的内存空间前面有一部分用于保存所分配内存的大小、校验等信息。四、Linux下调试入门之前对Linux真的是一点儿也不熟悉啊,现在在学校需要苦补。(1)Python在Linux下的调试工具winpdb,部分命令bp原创 2014-09-16 21:18:25 · 1767 阅读 · 0 评论 -
Matlab与C/C++混合编程(mex文件)
Matlab是一种矩阵语言,是为vector和matrix操作设计的,这两种类型的运算速度非常快,但是当涉及到大量的循环处理时,Matlab的速度就有点慢了。因此,Matlab提供了MEX脚本来使用C/C++函数以提高循环的运算速度。 现在我们来介绍一下如何编写相应的C/C++函数以生成对应的mexw32或mexw64文件。 MEX文件的编写和编译需要两个基本条件:一是必须按照Matlab应用原创 2014-06-01 10:02:27 · 3401 阅读 · 0 评论 -
CString Format的用法(转)
在MFC中会经常用到CString::Format。下面是我收集的一些资料。官方定义:CString::Formatvoid Format( LPCTSTR lpszFormat, ... );void Format( UINT nFormatID, ... );ParameterslpszFormatA format-con转载 2014-05-21 10:06:13 · 4650 阅读 · 0 评论 -
Effective C++笔记
IT男的双十一就只能去买书。买了本Effective C++,决定近期和算法导论一起看。这两天看了几个,记录下来供以后复习使用。条款01:View C++ as a federation of languages条款02:Prefer consts,enums,and inline to #defines条款03:Use const whenever possible原创 2013-11-15 12:21:27 · 1385 阅读 · 0 评论 -
libsvm代码阅读:关于Cache类的分析
下面来分析Cache类的源码,该类位于svm.cpp中。这个类的主要功能是:负责运算所涉及的内存管理,包括申请、释放等。简单来说:这个Cache类,首先通过Cache构造函数申请一块空间,这块空间的大小是:L个head_t大小的空间。然后get_data函数保证结构head_t中至少有len个float的内存,并且将可以使用的内存块的指针放在data指针中;而swap_index函数则是用于交换head[i]和head[j]。Cache类的定义如下:class Cache{public: Cac原创 2014-02-20 21:01:28 · 3290 阅读 · 0 评论 -
libsvm代码阅读:关于Kernel类分析
这一篇博文来分析下Kernel类,代码上很简单,一般都能看懂。Kernel类主要是为SVM的核函数服务的,里面实现了SVM常用的核函数,通过函数指针来使用这些核函数。其中几个常用核函数如下所示:(一般情况下,使用RBF核函数能取得很好的效果)全部代码如下://// Kernel evaluation//// the static method k_function is for doing single kernel evaluation// the constructor of Kernel原创 2014-02-21 12:16:21 · 3772 阅读 · 2 评论 -
计算机科学领域扫盲
我在燕大时是上过《大学计算机基础》、《计算机技术基础A》这两门CS领域扫盲课程的,但是那会儿大一这两门课学的真不怎么样,一个74,一个80。现如今继续读书、未来也该是在这领域里面混的,万一哪天被人咨询,却答不出个所以然,那可真就丢大脸了,所以呢,咱这只能继续把扫盲进行到底。计算机科学,即称之为科学,内容那自然是浩如烟海,包含着各个方面。在大学里面或有称为信息科学与工程学院或名为计算机科学技术学院,下面都是囊括好几个专业。燕大那会儿拢共有8个本科专业:通信工程、电子信息工程、计算机科学与技术、电子科学与技术原创 2013-12-05 22:58:05 · 2035 阅读 · 0 评论 -
OpenCV中的Ptr解析
OpenCV里面的Ptr的定义如下:Template class for smart reference-counting pointers,即智能指针模板类。The Ptr class is a template class that wraps pointers of the corresponding type. It is similar to shared_ptr that is p原创 2013-11-15 16:36:18 · 7238 阅读 · 0 评论 -
VS2012:模块计算机类型“x64”与目标计算机类型“X86”冲突
在使用Visual Studio 2012编译运行OpenCV的时候,出现错误“fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突 ”。简单的说原因就是我们加载的是64位的opencv的库,但是visual是使用X86的平台进行编译的所以有冲突。解决方法为:1、右键项目-->属性-->链接器-->高级-->目标计算机(在右边的窗口),将此处改为转载 2013-11-20 21:26:37 · 10055 阅读 · 2 评论 -
LINK : error LNK2001 无法解析的外部符号_mainCRTStartup
转自:http://hi.baidu.com/rabbit_anubis/item/9a2a95e02d2ab1abcf2d4f8b刚安装Microsoft visual C++ 2010 学习版,运行一段代码,出现了如下图错误:在网上找了半天类似的错误,有说建项目属性=》链接器=》系统,应该设置为windows,我设置了也不好使。我建项目是严格按照“Win32控制转载 2013-11-03 22:33:39 · 7638 阅读 · 0 评论 -
ACM题目中输入数据的处理(C++版)
ACM竞赛题目的输入数据常要求有多组,并且格式多种多样,这是初次登OJ平台的同学的一个障碍。实际上,这些格式可以归为固定的几种类型,本文介绍各种类型的处理方法,以帮助同学们克服这些障碍。 实际上,这些模式不仅是OJ平台上做题的需要。在平时的自由编程练习中,也可以自行使用这些模式,以提高调试程序的效率。对程序测试的意识也将在此过程中得到提升。 本文1-4部分介绍了几种类型输入的处理,第5转载 2013-11-03 22:32:01 · 1227 阅读 · 0 评论 -
捉虫记录:变量名设置出现重名
在编写一个单样本识别程序时,出现了eigs的错误,后来发现协方差里面大部分是NaN和Inf,再看xmean里面的值太大了,这时我想到的是:我是不是又忘了减去均值,结果:我其实已经减去了。那么到底是哪里出现问题了呢:核心的问题还是出现在xmean的值太大上,它比应该的值大的太多了,达到了10^252,很显然,这里出现了大问题,那么,大这么多——很有可能是指数的问题,然后再重新分析了各个变量名原创 2013-10-05 17:56:28 · 2737 阅读 · 1 评论 -
捉虫记录:实现PCA识别时出现的错误
在我编写PCA来实现程序识别时,出现了一个低智商的错误,结果导致程序结果大错。 如上图所示,识别率太低,每个图像都只被识别为第二个类。通过看程序来找bug,看了很久,还是不知道哪里出错,之后我想,相同类的训练和测试的系数应该是相等或相似的。所以,打开它们的系数比较,才发现二者之间差别太大,最后才想到原来是测试图像没有去均值。原创 2013-09-27 10:44:51 · 1284 阅读 · 0 评论 -
Matlab单元(Cell)数据的应用
MATLAB里面的cell有的翻译为单元有的翻译为细胞型数据。它是MATLAB的一种特殊数据类型,可以将它看作是一种无所不包的广义矩阵。组成cell的元素可以是任何一种数据类型的常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同。原创 2013-08-12 16:35:47 · 2186 阅读 · 0 评论 -
c/c++语言结构体中的冒号的用法
结构体中常见的冒号的用法是表示位域。 有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。原创 2013-08-11 13:48:27 · 2416 阅读 · 0 评论 -
一些简单的编程练习题
本文由 伯乐在线 - 敏敏 翻译自 Adrian Neumann。欢迎加入技术翻译小组。转载请参见文章末尾处的要求。每当成为入门CS课程(学生们学习编程语言的课程)的助教时,都困于提出好的练习题。Project Euler和类似的问题通常对初学者来说来难了,尤其是对于那些没有很强数学背景的同学。在这篇文章中,Adrian Neumann 收集了一些从初级到高级逐级困难的练习转载 2013-12-11 12:45:32 · 1196 阅读 · 0 评论 -
最牛B的编码套路
最牛B的编码套路分类: 我的书2013-12-02 08:38 9067人阅读 评论(42) 收藏 举报编码套路Code KataCode Dojo最近,我大量阅读了Steve Yegge的文章。其中有一篇叫“Practicing Programming”(练习编程),写成于2005年,读后令我惊讶不已:与你所相信的恰恰相反,单纯地每天埋头于工作并不能算转载 2013-12-03 10:20:04 · 1442 阅读 · 1 评论 -
libsvm代码阅读:svm.cpp浅谈和函数指针
svm.cpp总共有3159行代码,实现了svm算法的核心功能,里面总共有Cache、Kernel、ONE_CLASS_Q、QMatrix、Solver、Solver_NU、SVC_Q、SVR_Q 8个类(如下图1所示),而它们之间的继承和组合关系如图2、图3所示。在这些类中Cache、Kernel、Solver是核心类,对整个算法起支撑作用。在以后的博文中我们将对这3个核心类做重点注解分析,另外还将对svm.cpp中的svm_train函数做一个注解分析。函数指针是指向函数而非指向对象的指针。像其他指针原创 2014-02-20 10:43:32 · 4858 阅读 · 1 评论 -
libsvm代码阅读:关于Solver类分析(一)
现在我们涉及到的Solver类是一个SVM优化求解的实现技术:SMO,即序贯最小优化算法。libsvm中最原始的Solver的代码有六百多行,再加上各种变形就上千行了,为了下面好理解,我们先来看看理论问题。代码的开头如下:// An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918// Solves://// min 0原创 2014-02-22 21:07:00 · 5152 阅读 · 0 评论 -
指针参数传递内存问题
如果函数的参数是一个指针,不要指望用该指针去申请动态内存。一个失败的例子如下所示:void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char)*num);}void Test(void){ char *str = NULL; GetMemory(str,100);//str 仍然为NULL strcpy原创 2014-02-10 17:06:01 · 1413 阅读 · 0 评论 -
关于operator=的自我赋值问题
今天看了一段C++Primer的代码:p506//use-counted assignment operator;use is a pointer to a shared use countSales_item&Saler_item::operator=(const Sales_item &rhs){ ++*rhs.use; decr_use(); p = rhs.p; use原创 2014-02-23 20:54:26 · 1879 阅读 · 0 评论 -
基本数据结构(栈和队列)
栈、队列、优先级队列和双端队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则教线性表有更多的限制,故又称为运算受限的线性表。栈栈是一种最常用和最重要的数据结构,它的用途非常广泛。例如,汇编处理程序中的句法识别和表达式计算就是基于栈实现的。栈还经常用于函数调用时的参数传递和函数值返回。栈(stack)可定义为只允许在表的末端进行插入和删除的线性表。允许插入和删除的一端叫做栈顶,而不允许插入和删除的另一端叫做栈底。栈又叫做后进先出(LIFO)的线性表。栈的类定义如下:原创 2013-12-26 17:15:45 · 2276 阅读 · 0 评论 -
基本数据结构(数组、串、广义表)
数组多维数组的概念与存储二维数组也可叫做矩阵,它可以看作是由n个行向量和m个列向量所组成的向量,a[n][m],总共n*m个数组元素。对于二维数组a[n][m],为能根据它的数组元素的下标得出在相应一维数组中对应的下标,需要区分2种存储方式,即行优先顺序和列优先顺序。特殊矩阵压缩存储对称矩阵三角矩阵对角矩阵稀疏矩阵稀疏矩阵(sparse matrix)是矩阵中的一种特殊情况,其非零元素的个数远远小于零元素的个数。只存储矩阵中极少数的非零元素<row,column, value>稀疏矩阵原创 2013-12-26 17:16:50 · 3087 阅读 · 0 评论 -
基本数据结构(树和堆)
前面文章中介绍了线性结构和表结构,但是这些数据结构一般不适合于描述具有分支结构的数据。在这种数据之间可能有祖先—后代,上级—下级、整体—部分等分支的关系。下文介绍的树形结构则是以分支关系定义的层次结构,是一类重要的非线性数据结构,在计算机领域有着广泛应用。例如,在文件系统和数据库系统中,树是组织信息的重要形式之一;在编译系统中,树用来表示源程序的语法结构;在算法设计与分析中,树还是刻画程序动态性质的工具。树的基本概念为了完整的建立有关树的基本概念,以下给出两种树的定义,即自由树和有根树原创 2013-12-26 17:17:10 · 4866 阅读 · 1 评论 -
五大基础算法(枚举、递归、分治、贪心、模拟)
一、枚举法枚举法,本质上就是搜索算法。基本思想:枚举也称作穷举,指的是从问题所有可能的解的集合中一一枚举各元素。用题目中给定的检验条件判定哪些是无用的,哪些是有用的。能使命题成立。即为其解。原创 2013-12-18 13:09:02 · 32284 阅读 · 0 评论 -
基本数据结构(线性表)
数据结构由某一数据元素的集合和该集合中数据元素之间的关系组成。记为 Data-Sturcture = {D,R}数据结构的存储结构有:顺序存储方法、链接存储方法、索引存储方法、散列表存储方法下面开始谈谈线性表的相关内容。线性表是由n(n≥0)个数据元素(结点)a[0],a[1],a[2]…,a[n-1]组成的有限序列。其中:数据元素的个数n定义为表的长度 = "list".length() ("list".length() = 0(表里没有一个元素)时称为空表)将非空的线性表(n>=0)记作:原创 2013-12-25 11:22:31 · 1671 阅读 · 0 评论 -
零基础GitHub入门教程
最近Github很火,几个月前也注册了一个账号,可是其实一直没用。主要呢,是不知道那到底干什么用。现在要照着自己的学习记录一个像我这种完全零基础的人的入门教程。首先,让我们先知道GitHub到底是啥?GitHub 是一个用于使用Git版本控制系统项目的共享虚拟主机服务。它由GitHub公司(曾称Logical Awesome)的开发者Chris Wanstrath、PJ Hyett和T原创 2013-12-16 21:08:27 · 2745 阅读 · 1 评论 -
OpenCV入门方法
——————————————————————————————————————————————————来自OpenCV中文论坛:bebekifis最近一直在写文章,好不容易赶完了,发现论坛很久都没来,感到十分的抱歉。在这里把最近这几个月来使用Opencv的感想和一些Opencv文档之外的东西分享给大家,希望有用。首先还是说说如何学Opencv吧,记得最开始进实验室的时候师转载 2013-08-09 13:11:46 · 1673 阅读 · 0 评论