判断输入的一个非负的正整数,其是否是2的幂



判断输入的一个非负的正整数,其是否是2的幂,

/**
判断输入的一个非负的正整数,其是否是2的幂
*/

#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;

#define max -1

/**
方法1 、 对2的幂进行判断,如 1、10、100、1000….(二进制数)这些只用高位为 1 , 如何确定高位
为 1 是解题的关键。
对一数 M = 1000 (二进制数) -M 在计算机中的存储是 补码 : 111[......]

Read more

C++中const用法总结



C++中const用法总结,

const修饰普通变量和指针

const修饰变量,一般有两种写法:

const TYPE value;

TYPE const value;

这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。

对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变。

例如:

const int nValue;         //nValue是const

int const nValue;    // nValue是const

但是对于指针类型的TYPE[......]

Read more

C++多态 虚(纯虚)函数 绑定详解及实例分析

C++多态 虚(纯虚)函数 绑定详解及实例分析,

  1. 多态的概念
  2. 虚函数纯虚函数
  3. binding

多态的概念

C++多态即为:多态即为多种形式或形态,在编程语言中描述为同一种操作,可以有多种实现形式!

C++中多态产生的必要条件:

1、继承

2、要求有虚函数

3、要求有父类指针或引用指向派生类的对象

虚函数、纯虚函数

C++为实现多态引入虚函数、纯虚函数的概念!

虚函数:在类的函数前边加上 virtual 即可,这样这个函数就变为你想要override的函数!当你引用基类的指针或引用指向一个继承类的对象的时候,你调用一个虚函[......]

Read more

动态规划算法理论阐述及一个小实例

动态规划算法理论阐述及一个小实例,

动态规划问题:用来解决最优化问题

基本概念:将一个问题,分解成多个阶段来解决,每一个阶段的决策都依赖于当前的状态,决策过后状态又发生了转移,这种多阶段来解决最优化问题的过程就是动态规划。

基本思想与策略:基本思想与分治法类似,也是将带求解的问题分解为若干子问题(动态规划称之为阶段),按顺序求解子问题(子阶段),前一个子问题解,为后一个子问题的求解提供了信息。在求解任一个子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解(保留的这些局部解一般通过数组进行存储),丢弃其他局部解。依次解决各个子问题,最后一个子问题就是初始问题[......]

Read more

c++楼层扔鸡蛋问题

楼层扔鸡蛋问题,

有限层数和蛋数,求即使最坏情况下需要的最少判断次数

两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。(参见两个鸡蛋–一道Google面试题)

这是典型的动态规划问题。假设f[n]表示从n层楼找到摔鸡蛋不碎安全位置的最少判断次数。假设第一个鸡蛋第一次从第i层扔下,如果碎了,就剩一个鸡蛋,为确定下面楼层中的安全位置,必须从第一层挨着试,还需要i-1次;如果不碎的话,上面还有n-i层,剩下两个鸡蛋,还需要f[n-i]次(子问题,实体n[......]

Read more

字符串朴素匹配算法

字符串朴素匹配算法,

#include <iostream>
#include <string.h>

//朴素匹配算法
using namespace std;
char str[] =”abcacbbc”;
char pattern[] =”cbbc”;

int index()
{
int slen = strlen(str);
int plen = strlen(pattern);
//cout<<
int i,j,k;

i=0;j=0;k=0;
while( (i <= (slen – plen)) &[......]

Read more

动态内存分区分配方式模拟

动态内存分区分配方式模拟,

百度面试题:

给定一块内存,大小为1M,现有一些内存请求序列1K、2K、4K、10K……..

要求模拟实现new/delete内存分配过程。

 

对应题目如下:

假设初始态下,可用内存空间为640K,并有下列请求序列,请分别用首次适应算法和最佳适应算法

为作业分配和回收内存块,并显示出每次分配和回收后的空闲分区链的情况来以及内存占用情况图。

作业1申请130K

作业2申请60K
作业3申请100k
作业2释放60K
……

一、算法的基本思想

 

根据题目要求[......]

Read more

如何处理散列冲突

如何处理散列冲突,散列表中散列冲突是一种必然,既然不能回避他,我们应该怎么处理散列冲突呢?

1、开放寻址法

根据探查序列的不同分为:线性探查、二次探查、以及双重探查

2、再次Hash法

当出现hash冲突时,使用第二个、第三个等等hash函数来计算下一个位置,但是这样的计算时间扩大

3、链地址法

4、设置公共溢出区

Window中虚拟地址与物理地址之间的转化

Window中虚拟地址与物理地址之间的转化,

如上所述,在确保访问的数据已在物理内存中后,还需要先将虚拟地址转换为物理地址,即”地址映射”,才能够真正访问此数据。本节讲述Win32中虚拟内存管理器如何将虚拟地址映射为物理地址。

Win32通过一个两层表结构来实现地址映射,因为4 GB虚拟地址空间为每个进程私有,相应地,每个进程都维护一套自己的层次表结构用来实现其地址映射。第一层表称为”页目录”(page directory),实际上就是一个内存页(4 KB = 4 096 byte)。这一页以四个字节为单元分为1 024项,每一项称为一个”页目录项”(Page Directory[......]

Read more