随笔分类 - 【编程珠玑】
摘要:一,概述 问题描述:如何生成0~n-1内的m个随机整数(不重复) 需求:按序输出,并且保证每个子集被选中的可能性相等。 1)给出下面代码#include "stdio.h"
#include "stdlib.h"
#include "time.h" void getRandNumber(int m,int n)//在0 -- n-1 中挑选m个 随机数 { srand(time(NULL));//这个很关键 int i,j; for(i=0;i<n;++i) { if( rand()%(n-i) < m) { printf
阅读全文
摘要:一,概述 1)插入排序 要找到合适的位置,需要判断前一个元素比t小而后一个元素比t大。然后将t插入正确位置。 比较a[j-1] 跟 a[j] 的关系很关键 isort1: 没有到达最终位置,就交换该元素和它前面的元素#include <algorithm> for(int i=1;i<5;i++) for(int j=i;j>0&&a[j-1]>a[j];j--) swap(a[j-1],a[j]); isort2:将库函数替换 int temp; for(int i=1;i<5;i++) ...
阅读全文
摘要:一,概述 1)节省空间带来的好处 程序变小使得加载更快;更容易读入高速缓存;需要操作的数据减少从而减少操作时间。 2)节省空间的方法 数学函数式替代要存储的数据。简单例子为:a[i]=i 。如果你要读取数组第i个元素只需要通过函数f(i) = i得到元素值,而不需要将所有数据存储在数组中。 改变数据结构。如果一个数字范围为0-200,则完全没有必要采用32位的int型存储,只需要采用8位的无符号char型存储即可。 链表替代稀疏二维数组。虽然指针也需要空间存储,如果二维数组存储很少的数据,则可以考虑权衡一下是否要用链表代替稀疏二维数组...
阅读全文
摘要:一,概述 1)代码调优的目的是什么? 减少CPU运行时间;减少分页或增加高速缓存命中率;减少程序所需空间 2)代码调优为什么不能“滥用”? 1>效率的角色:不成熟的优化是大量编程灾害的根源,可能危及程序正确性、功能及可维护性。 2>度量工具:利用性能检测工具,找到“热点”代码,即程序关键区域,然后优化。 3>设计层面:效率问题可以从多个方面进行解决(算法和数据结构、数据结构重组、硬件升级),只有没有更好的解决方案才进行代码优化。 4>双刃剑:有些优化在特定程序中可以提速,但在另外程序中有可能急剧减速。 3)急救方...
阅读全文
摘要:一,内联函数的用法 内联函数从源码层层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。 inline Tablefunction(int I) //是没有效果的,编译器只是把函数作为普通的函数申明,我们必须定义函数体。 Inline tablefunction(int I) {return I*I}; //这样我们才算定义了一个内联函数。我们可以把它作为一般的函数一样调用。但是执行速度确比一般函数的执行速度要快。 内联函数必须是和函数体申明在...
阅读全文
摘要:一,概述 问题:求一维数组中连续子向量的最大和。 例如: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;
...
阅读全文
摘要:一,概述 1)72法则 :单位时间增长率 * 时间 =72 则该时间完成初始值翻番 题目:假设最初投资金额为100元,复息年利率9%,实现资金翻番需要多久? 利用“72法则”,将72除以9(增长率),得8,即需约8年时间,投资金额滚存至200元(翻番),而准确需时为8.0432年。 题目:盘子中的菌每小时增长3%,那么其数量多久会翻番? 24小时(3 * 24 =72) 2)pi(π)秒 就是一个纳世纪 10E-7 年; 3)little定律:系统中物体的平均数量等于物体离开系统的平均数率和每个物体在系统中停留的平均时间的乘积...
阅读全文
摘要:一,概述 如果要提高软件的性能,需要从下面几个方面入手: 1、算法与数据结构 2、算法调优 3、数据结构重组 4、与系统无关的代码的调优(float取代double)。 5、与系统相关的调优,把经常使用的函数进行加速,比如关键代码使用汇编代替高级语言 6、硬件上使用浮点加速器。二,习题 2)因子分解 例题:大于1的正整数n可以分解为:n = x1*x2*...*xm。 例如:当n = 12时,共有8中不同的分解式:12 = 12;12 = 6 * 2;12 = 4 * 3;12 = 3 * 4;12 = 3 * 2 * 2;1...
阅读全文
摘要:一,概述 主要讲解如何保证编程的正确性。在程序中加入断言(assert(断言内容) //如果错误,则终止程序。否则正常执行)。 typdef //声明自定义类型 typedef int size; //声明int 型整数的别名 size array[4]; typedef struct tagNode
{ char *pItem; pNode *pNext;
} *pNode;测试结构题大小的程序#include "stdio.h" typedef struct tagNode
{ char *pItem; //32位 ...
阅读全文
摘要:1、对下标限定界限:加条件 0<=l u<=n-12、这个函数可以写成如下形式:#include <iostream>
using namespace std; int bs(int *a, int begin, int end, int v) { int *b = a + begin; //开始 int *e = a + end; //结束 int *mid = NULL; //中间 while (b < e) //直到等于第一个出现的值 { mid = b + ((e - b)>>1); //...
阅读全文
浙公网安备 33010602011771号