某天,舟兄考了我一道题:一群人排队,每个人都朝一个方向,而且仰视,这意味着只能看到比自己高的人,而且一个高个子会挡着矮个子。现在给一堆整数,问队里,谁能看到的“高个子”最多。
如:0 4 7 2 5 3 2 6 7 8,能“看得最多”的序列是2 5 6 7 8。
一眼望去,真像“最长递增子序列”,按O(NlogN)的算法,结果应该是0 2 3 6 7 8。但 0 是看不到 2 的,因为被挡了。
此题用动态规划很容易解决,D[i]表示从队列最开始到第i个人,能看到第i个人的最长序列的长度。
初始 D[0] = 1;
递推 D[i+1] = max { D[j] +1 }, s
最后是 O(n^2) 的样子。比最长递增子序列的最优算法要差。暂不知能否提高。阅读全文>
发表于 @ 2009年09月09日 16:08:00 | 评论( loading... ) | 举报| 收藏
断断续续地看了《C++Templates》很长时间,在叹服于模板的神奇之余,也不得不承认这是一块充满陷阱的湿地。每次想要动手神奇一把,都会被某编译错误给无情地挡回;看英文似的,水平不够,只能“读得懂,写不出”;成了饥饿的小白鼠,远处放着奶酪,近处却是一鼠夹。此次总结,希望把最近的模板实践都剖析出要点,避免再犯相同的错误。阅读全文>
发表于 @ 2009年04月04日 20:07:00 | 评论( loading... ) | 举报| 收藏
内存池的主要作用,简单地说来,便是提高内存的使用效率。堆内存的申请与释放(new/delete及malloc/free),涉及复杂的内存分配算法,相比由简单CPU指令支持的栈内存的申请与释放,则是慢上了数量级。另一方面,栈的大小是有限制的,在需要大量内存的操作时,堆的使用是必要的。当然,频繁地申请与释放堆内存,效率是很低的,这也就是内存池出现的原因。阅读全文>
发表于 @ 2009年03月15日 12:41:00 | 评论( loading... ) | 举报| 收藏
关于Tail Calls Optimization,中文资料不是很多。所谓Tail Call,就是指一个函数返回的值,为另一个函数的返回值。阅读全文>
发表于 @ 2009年02月16日 20:45:00 | 评论( loading... ) | 举报| 收藏
一个古老的数学游戏,很早就知道了,但一直编程没编正确。今天终于正确了。有1、2、3、4、5、6这6种牌,每种牌有3张。开始总点和记为24,然后两个人轮流选一张牌,然后从总点和里减去牌面值,直到总点和非正。谁取完牌后,总点和为0,则胜;若为负,则败。胜问先取是否有必胜策略,或后取是否有?阅读全文>
发表于 @ 2009年02月08日 12:53:00 | 评论( loading... ) | 举报| 收藏
求凸多边形的最远点对(就是距离最远的两个顶点),要求o(n),n为顶点数阅读全文>
发表于 @ 2009年02月04日 15:13:00 | 评论( loading... ) | 举报| 收藏
O(N^2)的代码很容易写。
但O(N logN)的代码就要想好办天了。关键是其实一些数学的东西,没有提示,难想明白。
#include
const int inf= 1000;
int main() {
const int N = 12;
const int A[N] = { 2, 3, 1, 9, 0, 2, 3, 5, 4, 8, 2,3 };
int MLA[N+1];
for (int i=0;i阅读全文>
发表于 @ 2009年02月02日 00:36:00 | 评论( loading... ) | 举报| 收藏
现在市面上,主流的C/C++编译器包括M$的CL、gcc、Intel的icl、PGI的pgcc及Codegear的bcc(原来属于Borland公司)。虽然从占有率来说,cl与gcc是主流,但它们的优化性能并不是最好。本文从数值计算方面,对各编译器进行了测试,说明了目前各编译器的性能状况。阅读全文>
发表于 @ 2008年11月18日 18:50:00 | 评论( loading... ) | 举报| 收藏
cl.exe 要生成 .lib 文件时,先要用 /c 编译成 .obj 文件。再用lib.exe编译成.lib文件,如cl /c alib.cpplib alib.obj /out:alib.libicl 生成.lib 文件,也是通过/c命令,不过,对应的链接器为xilink。用法相似。cl生成.dll文件与icl不一样。cl用/dll,而icl用/LD选项。还有导出函数问题,icl /LD mydll.cpp /link /export:mexFunction另外,对于c与c++混合的代码,一定要用预编译头及extern C等包好。阅读全文>
发表于 @ 2008年11月18日 12:23:00 | 评论( loading... ) | 举报| 收藏
NokiaLogo 2008-10-18阅读全文>
发表于 @ 2008年10月18日 17:33:00 | 评论( loading... ) | 举报| 收藏