自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

joker0910的专栏

Light Up the sky!

  • 博客(19)
  • 资源 (2)
  • 收藏
  • 关注

原创 注意细节和习惯(四)

好吧,尽管说,一直认为变量初始化非常重要,但是在不经意之间,像数组,结构体一类的变量就容易忽视初始化。尤其是在粘贴来自别处的代码时,首先粘贴就是一种容易隐含有重大错误的行为,其次,这次直接告诉我,还容易把初始化过程遗漏……今天使用openMP的时候,就因为一个数组没有初始化,结果,导致一个八竿子打不到的地方一直踩内存……凶悍地浪费生命。而这段代码,是从同一个作用域别的地方拷过来的,结果由于在原来的地方,提前初始化了,导致初始化的代码没有拷贝过来……在跑openMP的时候,发现cpu的时间是按照核数来算的。怎

2011-04-27 16:37:00 569

原创 不做机器人,就来自动化!

对于重复的工作,如果已经被遇见,或者是被发现,立刻,找个自动化工具,或者抓紧时间造一个!磨刀不误砍柴工,大量重复的工作一旦出现,只会成指数级别地增加,这个时候,最明智的方法就是偷懒!!马上写个机器人!代替你完成这些枯燥没用的重复工作!比如进行单元测试的数据收集和用例输入、记录工作!!不要太勤快,写个脚本什么的!读写性能的考察,一定要和用到的磁盘挂钩,不要认为只是软件的问题,一旦和硬件相关了,就必须考察硬件!所以,了解硬件知识,尤其是它们的缓存机制,是十分有必要的!精确度问题,比如函数耗时,如果统计的粒度太小

2011-04-25 19:19:00 743

转载 ODBC 连接EXCEL

接口测试的数据需要输出到excel中生成报表……然后归档……哎,连接吧想要通过ODBC直接读、写Excel表格文件,首先,应确保ODBC中已安装有Excel表格文件的驱动"MICROSOFT EXCEL DRIVER (*.XLS)"。然后,可根据下面步骤进行: 1. 在StdAfx.h文件中加入:#include #include  2. 通过ODBC直接创建Excel文件并在表中插入数据(暂定文件名:Demo.xls)//创建并写入Excel文件void CRWExcel::WriteToExcel()

2011-04-22 19:45:00 12986 2

原创 并行排序,基于数组的桶算法

<br />#ifndef _BUCKETSORT_H#define _BUCKETSORT_H#include "def.h"#include <omp.h>template <class T> struct DATA_ARRAY_TEMP { T *pData; UINT uCount; }; int GetDoubleByteKey( int uData, UINT uKeyIndex ) ;//typedef int (*GetKey)

2011-04-22 18:38:00 2042 1

转载 OpenMP 的小教程

http://blog.csdn.net/drzhouweiming/archive/2009/04/20/4093624.aspx

2011-04-21 10:43:00 4008

原创 openMP 设置 (并行计算)

<br />windows:<br /><br /><br /><br />如何建立Openmp编程环境<br />    <br />       OpenMP在Windows环境下比较容易实现,只要打开VS2008中的编译选项/openmp,设置一下环境变量OMP_NUM_THREADS就可以了。<br />        一般是新建一个c++项目,以次选择Project -> (alt+f7)属性 -> 配置属性(configuration property) -> c/c++ -> 语言(Langu

2011-04-20 17:13:00 12959

原创 combSort 复杂度O(n*log(n)) 虽然是两层循环

<br />思路很清晰,有一个控制因子shrink,限定每次开始的位置,并用swapped记录每次对局部交换后局部是否有序。虽然进行了两层循环,但是其复杂度却是 O(n*log(n))。 梳子排序。应该是那个shrink因子,让复杂度呈现log(n)的效果。<br /> <br />void combsort(int *arr, int size){ float shrink = 1.247330950103979; int gap = size, swapped = 1, swap, i;

2011-04-19 18:03:00 1146

原创 SPOT原则

<br />Don't Repeat Yourself !!!,意思是说:任何一个知识点在系统内都应当有一个唯一、明确、权威的表述。这个原则也叫“真理的单点性(Single Point of Truth)”或者SPOT原则。<br /> <br />重复会导致前后矛盾、产生隐患问题的代码,原因是当你修改重复点时,往往只改变了一部分而并非全部。通常,这也意味着你对代码的组织没有想清楚。<br /> <br />常量、表和元数据之应该声明和初始化一次,并导入其他地方。无论何时,重复代码都是危险信号。复杂度是要花

2011-04-19 14:09:00 2823 1

转载 Vc++实用功能(性能分析,内存泄漏)

<br />1.CRT中内存泄漏检测的宏<br />有几个初学者写有大量动态内存分配不泄露的?又有几个老鸟敢嚣张的自称写那种多次分配多个函数出口的程序从来都是一次就完美的?<br />头文件处包含<br />#ifdef _DEBUG<br />#define _CRTDBG_MAP_ALLOC<br />#include <stdlib.h>  <br />#include <crtdbg.h>  <br />#endif<br /><br />主函数头部加上<br />#ifdef _DEBUG<br

2011-04-19 10:20:00 4628

原创 GnomeSort 又是一个O(n2),不过,只用一次循环……

<br /> <br />有些像冒泡,虽然只有一层循环,但是循环因子来回摆动……晃悠晃悠,就排好序了。<br />时间复杂度是O(n2)。<br /> <br /> <br />void gnome_sort(int n, int array[]){ int i = 0; while(i < n) { if(i == 0 || array[i-1] > array[i]) i++; else

2011-04-18 19:02:00 800

原创 Top N 怎么办

<br />海量数据,取出TopN个数据,正常来说,先排一下序比较好,然后取出前N个即可。<br /> <br />可是有时候,N非常小,也就是说,从时间复杂度上来看,N*n < n*logn 了,这个时候,可以遍历一次,每次替换掉结果数组中最小的值,组成的序列就是需要的TopN。<br /> <br />算是一种特殊情况下的效率提升。<br /> <br />//DATASIZE 非常大才好//int main(int argc, char** argv){ Tuple tuple[TOP

2011-04-15 14:10:00 1270 1

原创 SQLite,加快插入数据的速度

<br /> 使用事务,可以减少数据库的打开与关闭,因为在SQLite中,每一次插入操作都被认定为一个事务,都需要进行一次数据库的打开,关闭,缓冲区的清空动作。非常耗时。<br /> <br /> <br />sqlite3_exec(db,"begin transaction",0,0,0);for(int j=0;j<100;j++){sqlite3_exec(db,"insert into student values(1,1,1)",0,0,0);}sqlite3_exec(db

2011-04-12 19:02:00 2559

原创 应用哲学

<br />1.只要可行,一切都应该做成与来源和目标无关的过滤器。<br /> <br />2.数据流应尽可能文本化(这样可以使用标准工具来查看和过滤)。<br /> <br />3.数据库部署和应用协议应尽可能文本化(让人可以阅读和编辑)。<br /> <br />4.复杂的前端(用户界面)和后端应该泾渭分明。<br /> <br />5.如果可能,用C编写前,先用解释语言搭建原型。<br /> <br />6.当且仅当只用一门语言编程会提高程序复杂度时,混用语言编程才比单一语言编程来得号。<br /> 

2011-04-08 13:03:00 569

原创 有趣的哲学

<br />原则1:你无法断定程序会在什么地方耗费运行时间。瓶颈经常出现在想不到的地方,所以别急于胡乱找个地方改代码,除非你已经证实那儿就是瓶颈所在。<br /> <br />原则2:估量。在你没对代码进行估量,特别是没找到最耗时的那部分之前,别去优化速度。<br /> <br />原则3:花哨的算法在n很小时通常很慢,而n通常很小。花哨算法的常数复杂度很大。除非你确定n总是很大,否则不要用花哨算法(即使n很大,也优先考虑原则2)。<br /> <br />原则4:花哨的算法比简单算法更容易出bug、更难实

2011-04-07 09:14:00 592

原创 注意细节和习惯(三)

<br /><br />1,void* 在c语言中的使用,类似于C++的模板类。<br />2,别的模块没有显式使用的函数、变量等,都应该放在实现文件,定义成static,避免造成命名污染。<br />3,没有必要的情况下,不可以在头文件中放其他的头文件,容易造成命名污染,难查bug,而且编译也慢。如果有很多的实现文件需要共用一些东西,可以用一个专门的头文件放,也可以放内部的inline函数。<br />4,在头文件里,一般只放inline函数,<br />5,用宏,展开时可以很灵活地生成各种代码,<br

2011-04-06 19:27:00 746

转载 Po文件 和 Mo文件

<br /><br />po文件是GNU gettext项目的一套应用规范,属于L10n方案。<br /> <br />PO 是 Portable Object (可移植对象)的缩写形式;MO 是 Machine Object (机器对象) 的缩写形式。<br /> <br />PO 文件是面向翻译人员的、提取于源代码的一种资源文件。当软件升级的时候,通过使用 gettext 软件包处理 PO 文件,可以在一定程度上使翻译成果得以继承,减轻翻译人员的负担。<br /> <br />MO 文件是面向计算机的、

2011-04-04 18:44:00 12407 1

原创 可变参数函数

<br />关于这个东西,是C语言里面灵活的体现。<br /> <br />通过这种定义方式,我们可以直接访问参数的传入堆栈,利用这样一个原理,就可以自如地写入多个参数。<br /> <br />但是危险性也是很明显的,我们必须自己控制,何时停止在堆栈上访问,很容易越界访问。<br /> <br />这里有非常详细的用法。<br /> <br />总结下来这几部分<br /> <br />头文件: #include<stdarg.h><br /> <br />几个宏定义:<br /> <br />     

2011-04-04 08:48:00 663

原创 柔性数组

<br /><br /> <br />c99中<br /> <br /> 结构中的最后一个元素允许是未知大小的数组 这就叫做柔性数组成员。<br /> <br />但结构中的柔性数组前面必须至少一个其他 成员,柔性数组成员允许结构中包含一个大小可变的数组.<br /> <br />sizeof返回的这种结构大小不包括柔性数组的内存.<br /> <br />包含柔数组成员的结构用malloc函数进行内存的动态分配,且分配的内存应该大于结构的大小 以适应柔性数组的预期大小.<br /> <br /> 柔性数组

2011-04-04 08:36:00 538

原创 读取大文件,大于2G,偏移量不给力

32位系统,就支持最大2G左右的文件偏移……50G的文件何去何从……Linux下,可以使用fseeko 函数。或者使用内存映射技术。

2011-04-01 18:58:00 2011

dot.exe

dot.exe

2013-06-03

double stack

double stack, to analys the strings and automachine.

2013-06-03

空空如也

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

TA关注的人

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