jfo planet

Hope is the best gift that tomorrow gives.

  • 首页
  • 分类
  • 归档
  • 标签
  • 搜索
close

C++ 对象的内存布局

发表于 2009-10-07   |   分类于 c++/c++ template/gp/boost
C++ 对象的内存布局http://blog.csdn.net/haoel/archive/2008/10/15/3081385.aspx
阅读全文 »

MSVC++ compiler /d1reportSingleClassLayout /d1reportAllClassLayout

发表于 2009-10-07   |   分类于 c++/c++ template/gp/boost
Some undocumented parameter in MSVC++ compiler/d1reportSingleClassLayout<name> and /d1reportAllClassLayoutExample1// v.cppclass B{ public: int ib; char cb; public: B():ib(0),cb(‘B’) {} virtual void f() { cout << "B::f()" << endl;} virtual void Bf() { cout << "B::Bf()" << endl;}};class B1 : public B{ public: int ib1; char cb1; public: B1():ib1(11),cb1(‘1’) {} virtual void ...
阅读全文 »

正态分布数据的排序

发表于 2009-10-04   |   分类于 c/c++/algorithm
http://algorithmically.blogbus.com/logs/7597289.html已知数组中的数据大致符合正态分布,哪种排序算法的效率最高?答案是最常用的快速排序。常用的其他排序算法,如堆排序、合并排序甚至冒泡排序等都和数据的分布无关,他们的性能更多的取决于数据的具体顺序。只有快速排序涉及到对分割点的猜测,猜测的好坏对算法的效率有较大的影响。在正态分布的数据中随机取一个数字,我们有较高的概率得到比较居中的数字,这一点只要看一眼正态分布的图形便知。如果快速排序算法通过在数据中随机选择数字,会有比较高的概率得到一个比较好的分割点。这也解释了为什么快速排序理论上的复杂度比较高,而在实际中效果很好。
阅读全文 »

中间值

发表于 2009-10-04   |   分类于 Distributed Computing
http://algorithmically.blogbus.com/logs/7533559.html给你O(N)台联网的计算机,每台计算机上保存了O(N)个整数。假设由于内存的限制每台计算机最多能购处理O(N)个整数,请设计一个算法找出这O(N×N)个整数的中间值(Median)。提示:可以假设有一台或几台计算机上没有保存数据(协调人),用来协调其他计算机的工作。如果你不记得什么是中间值的话,这里有一个例子1, 2, 3, 4, 5, 16, 17, 18, 19, 20 这里5和16都是中间值1, 2, 3, 4, 5, 17, 18, 19, 20 这里5是中间值我的答案:先介绍一下总体思路,然后在讨论如何优化。  将每台计算机中保存的整数进行排序。 计算机将各自整数的值域(最大最小值)都发送给协调人。 协调人计算出所有整数的值域,以其最大值和最小值的平均数作为分割点,并通知其他计算机。 每台计算机对大于等于(≥)和小于(<)分割点的整数分别计数,并返回给协调人。 综合每台计算机返回的计数,协调人可以知道中间值大于还是小于这一分割点。 于是协调人选择中间值所 ...
阅读全文 »

分布式词频统计

发表于 2009-10-04   |   分类于 Distributed Computing
http://algorithmically.blogbus.com/logs/7604574.html一个规模庞大的多语言语料库,已经经过预处理,分成了12个文件,每个文件存放在一台服务器中。每个文件中包含800亿个单词,每个单词占一行,平 均每个单词40字节。假设服务器都已经联网,每台服务器有双CPU和4G的内存,4×400GB的硬盘,换句话说,每台服务器就是一个高配置的PC机。请 设计一个方案,找出出现频率最高的一百万个单词。这个问题基本上可能有两种思路。第一种需要先在每台服务器,完成对单词词频 的统计,进行排序,然后每两台服务器把词频统计结构进行合并,12个服务器合并到6个,然后3个,然后2个,直到所有的结果合并到一台服务器中我们就可以 找出这一百万个高频词了。由于单词在服务器之间的分布可能不均匀,即使一个单词在所有的服务器中出现频率都不高,合在一起仍有可能有较高的频率,此算法几 乎没有优化的余地。举个例子,单词A只出现在一台机器上,出现了10万次。单词B在每台机器上都出现1万次。从每台服务器看来,A是高频 词,而B不是,但总体来说则可能正相反。每次合并统计结果时,本地机器 ...
阅读全文 »

关于-fPIC选项 和 GOT表

发表于 2009-10-01   |   分类于 gcc/binutils/make/共享库
加上-fPIC参数后,编译后的文件和没有加这个参数的文件,有什么区别呢?没有加这个参数的编译后的共享库,也可以使用,它和加了参数后的使用起来又有什么区别呢? position independent(位置无关)relocate(可重定位) 位置无关代码主要是在访问全局变量和全局函数的时候采用了位置无关的重定位方法,即依赖GOT和PLT来重定位。普通的重定位方法需要修改代码段,比如偏移地址0x100处需要重定位,loader就修改代码段的0x100处的内容,通过查找重定位信息得到具体的值。这种方法需要修改代码段的内容,对于动态连接库来说,其初衷是让多个进程共享代码段,若对其进行写操作,就回引起COW,从而失去共享。-fPIC选项告诉编绎器使用GOT和PLT的方法重定位,GOT是数据段,因此避免了COW,真正实现了共享。如果不用-fPIC,动态连接库依然可以使用,但其重定位方法为一般方法,必然会引起COW,但也无所谓,除了性能在COW时稍微受些影响,其他也没啥。 GOT 是 data section,是一个 table,除专用的几个 entry,每个 entry 的内容可以再执行的时候修改 ...
阅读全文 »

浮点数的表示

发表于 2009-09-24   |   分类于 c/c++/algorithm
http://zh.wikipedia.org/zh-cn/IEEE_75432位单精度单精度二进制小数,使用32个位元存储。   1 8 23 位長   +-+——+——+   |S| Exp | Fraction |   +-+——+——+   31 30 23 22 0 位編號(從右邊開始為0) 偏正值 +127S为符号位,Exp为指数位,Fraction为有效数位。 指数部分即使用所谓的偏正值形式表示,实际值为表示值与一个固定值 (32位的情况是127)的和。采用这种方式表示的目的是简化比较。因为,指数的值可能为正也可能为负,如果采用补码表示的话,全体符号位S和Exp自身 的符号位将导致不能简单的进行大小比较。正因为如此,指数部分通常采用一个无符号的正数值存储。单精度的指数部分是−126~+127加上127 ,指数值的大小从1~254(0和255是特殊值)。浮点小数计算时,指数值减去偏正值将是实际的指数大小 ...
阅读全文 »

智力题

发表于 2009-09-19   |   分类于 c/c++/algorithm
菲波那契数列 1,1,2,3,5,8,13……的第40位除以第39位得多少?即,N40/N39=?a. 1.666666b. 1.618xxx(后面几位记不清了)c. 1.600000d. 以上都不对答案:bN40/N39 = (N39 + N38) / N39 = 1 + N38 / N39 = 1 + 1 / (N39 / N38)===> Dn = 1 + 1 / Dn-1f(x) = 1 + 1/x, f(f(x)) = 1 + 1 / f(x), …如果收敛,则趋近于y = 1 + 1 / y ===> y^2 -y - 1 = 0 ===> y = (sqrt(5) + 1) / 2 = 1.6180339887…实验室里有1000个一模一样的瓶子,但是其中的一瓶有毒。可以用实验室的小白鼠来测试哪一瓶是毒药。如果小白鼠喝掉毒药的话,会在一个星期的时候死去,其他瓶子里的药水没有任何副作用。请问最少用多少只小白鼠可以在一个星期以内查出哪瓶是毒药:a. 9b. 10c. 32d. 999e. 以上都不对参考答案:b二进制编码有一家人,老公、老婆、儿子还有老公的 ...
阅读全文 »

【★】Censored!(Forbidden Words)

发表于 2009-09-15   |   分类于 c/c++/algorithm
POJ 1625Censored! Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 1859 Accepted: 489 DescriptionThe alphabet of Freeland consists of exactly N letters. Each sentence of Freeland language (also known as Freish) consists of exactly M letters without word breaks. So, there exist exactly N^M different Freish sentences. But after recent election of Mr. Grass Jr. as Freeland preside ...
阅读全文 »

AC自动机算法详解

发表于 2009-09-13   |   分类于 c/c++/algorithm
AC自动机是用来处理多串匹配问题的,即给你很多串,再给你一篇文章,让你在文章中找这些串是否出现过,在哪出现。对于两个字符串匹配问题可用KMP算法,多字符串则用AC自动机。 看下面这个例子:给定5个单词:say she shr he her,然后给定一个字符串yasherhs。问一共有多少单词在这个字符串中出现过。 构造Trie树首先构造一棵树,如下所示,我们称之为Trie树。构造失败指针然后构造失败指针,应当使用BFS算法。失败指针满足下面的性质:假设有一个节点k,他的失败指针指向j。那么k,j满足:设root到j的距离为n,则从k之上的第n个节点到k所组成的长度为n的单词,与从root到j所组成的单词相同。即图中红框部分是完全一样的,she中的’e’的失败指针就应该指向her中的’e’。构造好失败指针如图所示:(为方便递归判断,root的失败指针可指向NULL) 标记终止节点应当对每个节点都遍历一次所有单词,如果读完某个单词依然可以停留在某个子节点上,则应该将该子节点标记为终止节点。例如,除了say she shr he her 这5个单词,如果再加入一个单词h,终止节点还应多两个: ...
阅读全文 »
1…252627…61
jfo

jfo

605 日志
38 分类
4 标签
RSS
GitHub 微博
友情链接
  • 收藏夹
  • 网络剪贴板
  • 爱逛吧
© 2007 - 2018 jfo
由 Hexo 强力驱动
主题 - NexT.Pisces