摘要:
一,概述 1)代码调优的目的是什么? 减少CPU运行时间;减少分页或增加高速缓存命中率;减少程序所需空间 2)代码调优为什么不能“滥用”? 1>效率的角色:不成熟的优化是大量编程灾害的根源,可能危及程序正确性、功能及可维护性。 2>度量工具:利用性能检测工具,找到“热点”代码,即程序关键区域,然后优化。 3>设计层面:效率问题可以从多个方面进行解决(算法和数据结构、数据结构重组、硬件升级),只有没有更好的解决方案才进行代码优化。 4>双刃剑:有些优化在特定程序中可以提速,但在另外程序中有可能急剧减速。 3)急救方... 阅读全文
摘要:
一、优先队列(堆)优先队列包括两种操作的数据结构,插入和删除最小者。二叉堆的结逻辑结构是一个完全填满的二叉树,有可能的例外是在底层,底层上的元素从左到右排列。二叉堆的物理结构是一个数组,元素存放从下标为1的位置开始。因为这样子实现的话,对于数组中的某一个位置i的元素,在下标不越界的情况下(也就是说该节点有孩子的情况下),其左孩子在位置2i上,有孩子在2i+1上。二、插入操作对于堆的插入操作实现,一般使用的策略是上滤(percolate up)策略。上滤操作是只先将要插入的元素插入到最后位置,然后与其父节点比较,如果比父节点还要小,说明该节点放在该位置不符合堆序性质(堆序性质是指一个父节点的值小 阅读全文
摘要:
一,内联函数的用法 内联函数从源码层层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。 inline Tablefunction(int I) //是没有效果的,编译器只是把函数作为普通的函数申明,我们必须定义函数体。 Inline tablefunction(int I) {return I*I}; //这样我们才算定义了一个内联函数。我们可以把它作为一般的函数一样调用。但是执行速度确比一般函数的执行速度要快。 内联函数必须是和函数体申明在... 阅读全文
摘要:
本文是敏捷开发产品管理系列的第八篇。(专栏目录)在产品开发中,常常遇到产品性能问题,这些性能问题会很大程度上影响到产品的架构。但解决这些性能问题,切莫认为只是技术人员的事情,产品经理和产品总监也要参与其中,甚至是业务人员(销售、售前)。下面以12306的售票问题为例,来做一个完整的说明。本文的目的,不是说技术性优化不必要,而是说作为开发人员不要闷头只想技术,而作为产品经理不要把所有“技术”问题推给开发人员,这一点很重要。技术方案的局限性12306为什么崩溃了?原因众说纷纭,解决方案也众说纷纭。到网上一搜“12306 性能”http://www.baidu.com/s?wd=12306+%D0% 阅读全文
摘要:
一,概述 问题:求一维数组中连续子向量的最大和。 例如:a[6]={3,4,-2,-9,10,8}; 则最大连续子向量的和 为 10+8 = 18 1)解法一:简单算法#include <stdio.h>
#define max(a, b) ((a)>(b)?(a):(b))
int main()
{ int a[6]={3,4,-2,-9,10,8}; int i,j,k; int sum=0; int maxsofar=0; for(i=0;i<6;++i) { for(j=i;j<6;++j) { sum=0;
... 阅读全文