前言
对算法进行改进以求获得最佳的性能通常有两种策略:优化现有的算法,或者开发新的算法。
优化算法的标准技术:
1、使I/O减到最少,减少函数调用的次数,限制计算密集型操作(浮点数运算和除法运算);
2、确定执行得最频繁的算法元素,比如冒泡排序的比较和交换;
3、检查可能由于疏忽导致而导致特别缓慢的的实现。这往往与查找最坏情况相似。
I/O通常是发生在毫秒(ms)级的时间范围内,而CPU的活动一般发生在亚微秒级的范围内。因此对于算法而言,任何I/O的代价都非常高昂。
如果不能消除I/O本身,那么可以使用缓冲区来减小它的影响。
代码
下面的一个算法,就是用来测试从输入文件流infile向输出文件流outfile传输时,多少大小的缓冲区buf最合适(既可以速度达到最快,也不浪费存储空间)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <Windows.h>
#undef CopyFile//取消以前定义的CopyFile(下面有重写的CopyFile())
#pragma comment(lib, "kernel32.lib")//yyw
#define DEF_BUF 512
long GetCPUTime()
{
static LARGE_INTEGER li = {
0}; //静态变量~~初始化一次
LARGE_INTEGER linow = {
0};
if ( 0 == li.QuadPart)
{
QueryPerformanceFrequency(&li);
}
QueryPerformanceCounter(&linow);
return linow.QuadPart*1000/li.QuadPart;
}
#define get_clock_ticks(x) \
x = GetCPUTime()