Loading

上一页 1 ··· 4 5 6 7 8 9 下一页
摘要: 利用等概率函数Rand5产生等概率函数Rand3问题描述:现在有一个叫做Rand5的函数,可以生成等概率的[0, 5)范围内的随机整数,要求利用此函数写一个Rand3函数(除此之外,不能再使用任何能产生随机数的函数或数据源),生成等概率的[0, 3)范围内的随机整数。//使用Rand5()实现Rand3() int Rand3() { int x; do { x = Rand5(); } while (x >= 3); return x; } //利用Rand3编写Rand5怎么办? int Rand5() ... 阅读全文
posted @ 2012-09-10 10:02 阿凡卢 阅读(4048) 评论(4) 推荐(1) 编辑
摘要: 1、问题定义可以简化如下:在不知道文件总行数的情况下,如何从文件中随机的抽取一行,并且每行被抽中的概率相等? 首先想到的是我们做过类似的题目吗?当然,在知道文件行数的情况下,我们可以很容易的用C运行库的rand()函数随机的获得一个行数,从而随机的取出一行,但是,当前的情况是不知道行数,这样如何求呢 阅读全文
posted @ 2012-09-09 10:03 阿凡卢 阅读(4464) 评论(0) 推荐(1) 编辑
摘要: 题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:首先考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。这个题目的突破口在哪里?题目为什么要强调有一个数字出现一次,其他的出现两次?想到了异或运算的性质:任何一个数字异或它自己都等于0。也就是说,如果从头到尾依次异或数组中的每一个数字,那么最终的结果刚好是那个只出现一次的数字,因为那些出现两次的数字全部在异或中抵消掉了。有了上面简单问题的解决方案之后,回到原始的问题。如果能够把原数组 阅读全文
posted @ 2012-09-08 13:59 阿凡卢 阅读(7707) 评论(1) 推荐(2) 编辑
摘要: 一、构造和析构函数C++在幕后为你写的的函数:一个拷贝构造函数,一个赋值运算符,一个析构函数,一对取址运算符。另外,如果你没有声明任何构造函数,它也将为你声明一个缺省构造函数。所有这些函数都是公有的。换句话说,如果你这么写:class Empty{};和你这么写是一样的:class Empty {public: Empty(); // 缺省构造函数 Empty(const Empty& rhs); // 拷贝构造函数 ~Empty(); // 析构函数 Empty &... 阅读全文
posted @ 2012-09-07 20:25 阿凡卢 阅读(2137) 评论(0) 推荐(0) 编辑
摘要: 1、构造函数和析构函数为什么没有返回值?构造函数和析构函数是两个非常特殊的函数:它们没有返回值。这与返回值为void的函数显然不同,后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析构函数则不允许。在程序中创建和消除一个对象的行为非常特殊,就像出生和死亡,而且总是由编译器来调用这些函数以确保它们被执行。如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由客户程序员自己来显式的调用构造函数与析构函数,这样一来,安全性就被人破坏了。另外,析构函数不带任何参数,因为析构不需任何选项。如果允许构造函数有返回值,在某此情况下,会引起歧义。如下两个例子class C{public 阅读全文
posted @ 2012-09-06 12:51 阿凡卢 阅读(63656) 评论(0) 推荐(4) 编辑
摘要: 一、大端和小端的问题对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而 Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放据的低位字节到高位字节)。例如,假设从内存地址 0x0000 开始有以下数据: 0x0000 0x00010x00020x0003 0x12 0x34 0xab 0xcd 如果我们去读取一个地址为 0x0000 的四个字节变量,若字节序为big-endian,则读出结果为0x1234abcd;若字节序为little-endian,则读出结果为 阅读全文
posted @ 2012-09-05 12:27 阿凡卢 阅读(71748) 评论(1) 推荐(10) 编辑
摘要: C语言字符串库函数的实现也是笔试题常考的题目,以下代码没有严格测试,只是简单的实现://字符串长度int strlen(const char *str) { assert(str != NULL); int len = 0; while (*str ++ != '\0') ++ len; return len; }//字符串拷贝char *strcpy(char *to, const char *from){ assert((to != NULL) && (from != NULL)); char * re... 阅读全文
posted @ 2012-09-04 12:19 阿凡卢 阅读(8592) 评论(1) 推荐(2) 编辑
摘要: Trie—单词查找树Trie,又称单词查找树、前缀树,是一种哈希树的变种。应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。性质:1.根节点不包含字符,除根节点外的每一个节点都只包含一个字符。2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3.每个节点的所有子节点包含的字符都不相同。优点:1.查询快。对于长度为m的键值,最坏情况下只需花费O(m)的时间;而BST需要O(m log n)的时间。2.当存储大量字符串时,Trie耗费的空间较少。因为键值并非显式存储的,而是与其他键值共享子串。操作:1.初始化或清空:遍历Trie,删除所有节点,只保留根节点。2.插 阅读全文
posted @ 2012-09-03 13:00 阿凡卢 阅读(5342) 评论(0) 推荐(0) 编辑
摘要: hashmap的C++实现按照hashmap的基本原理用C++实现了简单的基本功能,复杂的实现参考C++库的源码,C++最新的标准库里已经有以下四种基于hashtable的容器:unordered_set (C++11) unordered_multiset (C++11) unordered_map (C++11) unordered_multimap (C++11)。具体参考:http://en.cppreference.com/w//* * HashMap.h * Author: luxiaoxun */#ifndef HASHMAP_H_#define HASHMAP_H_#inclu 阅读全文
posted @ 2012-09-02 18:50 阿凡卢 阅读(24543) 评论(7) 推荐(0) 编辑
摘要: hashtable的C++实现,使用两种常用的解决冲突的方式,使用时需要自己提供针对HashedObj的hash函数。1、分离连接法(separate chaining)#include <vector>#include <list>using namespace std;template <typename HashedObj>class HashTable{ public: explicit HashTable(int size = 101); void makeEmpty() { for(int i = 0; i < theLists.size( 阅读全文
posted @ 2012-09-02 11:57 阿凡卢 阅读(10027) 评论(3) 推荐(0) 编辑
摘要: 1.冒泡排序(Bubble Sort)冒泡排序方法是最简单的排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。... 阅读全文
posted @ 2012-09-01 14:45 阿凡卢 阅读(3409) 评论(7) 推荐(4) 编辑
摘要: 一个空类class A{};的大小为什么是1,因为如果不是1,当定义这个类的对象数组时候A objects[5]; objects[0]和objects[1]就在同一个地址处,就无法区分。单继承#include<iostream>using namespace std;class A{public: virtual void aa(){}private: char k[3];};class B: public A{public: virtual void bb(){}};int main(){ cout<<"A's size is "< 阅读全文
posted @ 2012-09-01 10:35 阿凡卢 阅读(10798) 评论(0) 推荐(3) 编辑
摘要: 虚拟构造函数当你有一个指针或引用,但是不知道其指向对象的真实类型是什么时,你可以调用虚拟函数来完成特定类型(type-specific)对象的行为。仅当你还没拥有一个对象但是你确切地知道想要对象的类型时,你才会调用构造函数。那么虚拟构造函数又从何谈起呢?例如假设你编写一个程序,用来进行新闻报道的工作,一条新闻报道由文字或图片组成。你可以这样管理它们:class NLComponent { //用于 newsletter components 的抽象基类public: ... //包含至少一个纯虚函数}; class TextBlock: public NLComponent {publi... 阅读全文
posted @ 2012-08-12 19:30 阿凡卢 阅读(2892) 评论(0) 推荐(0) 编辑
摘要: 为什么有必要写自己的operator new和operator delete?答案通常是:为了效率。缺省版本的operator new是一种通用型的内存分配器,它必须可以分配任意大小的内存块。同样,operator delete也要可以释放任意大小的内存块。operator delete想弄清它要释放的内存有多大,就必须知道当初operator new分配的内存有多大。有一种常用的方法可以让operator new来告诉operator delete当初分配的内存大小是多少,就是在它所返回的内存里预先附带一些额外信息,用来指明被分配的内存块的大小。缺省的operator new和operato 阅读全文
posted @ 2012-08-11 10:40 阿凡卢 阅读(5413) 评论(10) 推荐(3) 编辑
摘要: C++中的new/delete与operator new/operator deletenew operator/delete operator就是new和delete操作符,而operator new/operator delete是函数。new operator(1)调用operator new分配足够的空间,并调用相关对象的构造函数(2)不可以被重载operator new(1)只分配所要求的空间,不调用相关对象的构造函数。当无法满足所要求分配的空间时,则 ->如果有new_handler,则调用new_handler,否则 ->如果没要求不抛出异常(以nothrow参数表达 阅读全文
posted @ 2012-08-10 14:26 阿凡卢 阅读(40424) 评论(4) 推荐(22) 编辑
摘要: C++的重载(overload)与重写(override)成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。重写是指派生类函数重写基类函数,是C++的多态的表现,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual关键字。示例中,函数Base::f(int)与Base::f(float)相互重载,而Base::g(void)被Derived::g(void)重写。#include using namespace std;class Base{publ 阅读全文
posted @ 2012-08-09 18:26 阿凡卢 阅读(19790) 评论(2) 推荐(2) 编辑
摘要: The Ethernet header structure is shown in the illustration below: 以太网头部14 bytes Ethernet header structure The IP header structure is as follows: IP头部2 阅读全文
posted @ 2012-08-08 17:04 阿凡卢 阅读(9015) 评论(0) 推荐(1) 编辑
摘要: 排列:从n个不同元素中,任取m(m<=n)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m<=n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号A(n,m)表示。 A(n,m)=n(n-1)(n-2)……(n-m+1)= n!/(n-m)! 此外规定0!=1 组合:从n个不同元素中,任取m(m<=n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m<=n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号C(n,m) 表示。 C(n, 阅读全文
posted @ 2012-08-08 13:59 阿凡卢 阅读(10256) 评论(0) 推荐(2) 编辑
摘要: 24点游戏:输入:n1,n2,n3,n4输出:若能通过+ - * / 和括号混合运算,得到运算结果为24,则输出一个对应的运算表达式穷举法:对4个数字全排列有4!=24种排列。4个数字共需要3个运算符,同一个运算符可以重复出现,则有4x4x4=64种情况。对于4个数字而言,共有以下5中加括号的方式:(A(B(CD))),(A((BC)D)),((AB)(CD)),((A(BC))D),(((AB)C)D)。所以遍历的表达式最多有24*64*5=7680种。即使采用逆波兰表达式,总数不变。/*24点游戏算法,穷举法: f(Array){ if(Array.Length<2) { if(得到 阅读全文
posted @ 2012-08-07 12:06 阿凡卢 阅读(2647) 评论(0) 推荐(0) 编辑
摘要: General Hash Function Source Code: 阅读全文
posted @ 2012-08-06 20:01 阿凡卢 阅读(2555) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 下一页