自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 一道简单面试题引出的优化方法讨论 (Ⅱ)

从上一篇一道简单面试题引出的优化方法讨论 (Ⅰ)中,我们已经了解到了这个问题使用SIMD和SMT进行优化的实现方法,我会在第二篇中继续探讨使用SIMT优化的实现方法。我们再来回顾下问题 在一个内存文件中找出所有以 Windows换行符(\r\n)结尾的行首指针,并保存在数组中,结果不要求有序对于SIMT的概念通常对应于GPU上的开发,我们选用目前最为流行的异构计算的库CUDA,T...

2018-02-12 15:36:10 306

原创 一道简单面试题引出的优化方法讨论 (Ⅰ)

笔者曾多年在百度基础架构部负责面试培训工作,喜欢使用简单而有内涵的题目来考查面试者,现在分享一道曾经在内部很流行的面试题与其的多种解决方法。问题 在一个内存文件中找出所有以 Windows换行符(\r\n)结尾的行首指针,并保存在数组中,结果不要求有序这个面试题在很多面试者刚听到的时候,不免会发出惊讶,这么简单? 大部分人能很快写出下面的朴素算法。朴素算法v...

2018-02-08 14:51:19 416

原创 高效Permutation算法

本文介绍了一个基本C++ 0x语法的产生Permutation的高效算法。

2013-11-22 15:34:29 2184

原创 高效计算(a^0+a^1+a^2+...+a^n) % m

看到群里有人出了一道ACM题,要求计算(a^0 + a^1 + a^2 + ... + a^n) % m的值其中三个数的取值范围为  0 看到这样一道题,首先联想到计算(a^b)%m,后者可以通过分解幂来计算那前者能不能通过同样的方法来计算呢看下面这个分解过程:    a^0 + a^1 + a^2 + ... + a^n=  (a^0 + a^1 + a^2 + ... + a^(2^h - 1) + a^(2^h) + ... + a^n= 

2011-04-24 21:42:00 6621 2

原创 循环滚动字符串的几种方法

题目例有字符串“abcdefg”,令其向右循环滚动3个字符,则会得到“efgabcd”现给定字符串和滚动字符数,设计一个算法方法一:转变为子问题例如刚才的题目,我们用(a,b)表示a个字符中滚动b次abcdefg  可以用(7,3)表示,令左边3个字符和右边3个字符交换位置,得到efg(dabc) 其中前3个字符位置已经正确,题目变为(4,3),同理得到efg(cab)d 题目变为(3,2),同理得到efg(ba)cd 题目变为(2,1),同理得到efgabcd,即所求实现代码void RightShift

2011-04-17 23:45:00 1647 1

原创 最长递增子序列

方法一:#include #include #include using namespace std;templatesize_t LCS( InIt _First1, InIt _Last1, InIt _First2, InIt _Last2 ){ if( _First1 == _Last1 || _First2 == _Last2 ) { return 0; } if( *_First1 == *_First2 ) {

2011-04-13 21:24:00 783 2

原创 最近公共祖先LCA的几种解决方案

2011-04-12 16:17:00 794

原创 一些面试题

1、已知元素a,b,c,d依次有成功检索概率P(1:4)=(0.1,0.15,0.05,0.15),不成功检索概率Q(0:4)=(0.1,0.05,0.15,0.05,0.2),请使用动态规划法建立其最优二分检索树并画出最优二分检索树的形态。http://topic.csdn.net/u/20081006/16/75461d49-6a8f-4684-84b6-aceee56c832f.html?25208http://topic.csdn.net/u/20091024/12/989417aa-60e9-45

2011-04-10 22:11:00 566

原创 把一堆数字分成两堆,使两堆的和尽可能接近

把一堆数字分成两堆比较好的方法是使用DP,把所有集合内元素能达到的部分和标记出来例如有数字{ 1, 3, 4, 5 }则可以达到的部分和从小到大为:1=13=34=45=56=1+57=3+48=3+59=4+510=1+4+5...然后只要从总和的一半开始,往少的方向寻找第一个存在的部分和就可以了,也就是最大的部分和设总和为sum,最大部分和为partsum,则两堆数最小的差值为 ( sum - partsum ) - partsum参考代码如下:#include #include #includ

2011-04-09 21:37:00 6537

原创 随机取样和洗牌算法

有一个长度为n的数组,想对其中的元素进行洗牌,使他们能够随机的分布,随机的意思是使每个元素在每个位置上出现的概率都是1/n。如何去做呢,有一个方法如下:依次遍历所有的元素,在遍历到第i个元素的时候,有1/i 的概率和前i个元素(包括第i个)其中之一进行交换,则遍历完所有的元素之后,得到的新的数组就满足上面提到的随机分布的条件

2011-04-09 13:33:00 1314

原创 无返回值单参数函数反转单链表

<br />void reverse(Link* head){ if( !head || !head->next || !head->next->next ) return; Link* t = head->next; head->next = t->next; reverse( head ); t->next->next = t; t->next = NULL;} <br />主要方法就是:<br />1、先把头结点的指向移动到链表的末尾<br />2、再把每个结点指向的下

2011-03-29 10:50:00 1010

转载 工作这些年 - 百度 杨镇锋

<br /><br />刚开始去的部门是负责在网页上贴牛皮癣,这个比较惹人讨论的。不过自然会有人发明出一些理论证明牛皮癣的意义,比如长尾理论。还会发展出相应的学科,比如计算广告学。<br />说远了,其实这些都跟我没关系。偶是个码农,就负责没日没夜的写代码。公司说要向硅谷学习,实行弹性工作制,可这是中国特色的弹性工作制,只可延长,不可缩短。九点下班那算早的,十点下班才算正常。事实上就没有下班的时候,经常会凌晨的时候一个电话打过来,然后回公司去处理线上事故。为什么老在凌晨的时候出事故呢?这跟线上服务有关系,晚

2010-12-22 00:02:00 5598

转载 软件开发中的11个系统思维定律

1. 今日的问题源于昨日的解决方案(Today’s problems come from yesterday’s solutions)  当解决问题时,我们会感到很高兴。我们经常不考虑后果。令人感到意外的是,我们提出的解决方案可能会产生反作用,并带来新问题。作为对取得巨大成功的团队的奖励,公司决定为团队中的少数骨干成员发放奖金并晋升职位。团队中的其他成员会感到不公平,并且会丧失积极性。最终使团队成员之间的关系更加紧张,后续项目也就很难再取得成功。项目经理频繁要求开发者修复一个新的软件Bug,或者处理客户的紧

2010-12-21 08:41:00 401

转载 【转】如何面试程序员?

<br />有人在Hacker News的讨论区里,请求指点,怎么才能在面试中发现合格的人。众人纷纷出主意,有很多高质量的回帖,我觉得挺有启发,就整理出了下面这篇文章。<br /><br /> <br /><br /><br />===================================<br /><br />如何面试程序员?<br /><br />阮一峰 整理<br /><br /><br />一、提问之前的准备<br /><br />首先,最重要的是,你自己一开始就应该想清楚:<br /><

2010-12-20 19:28:00 493

原创 一些面试题

最近在网上看到了一些面试题,整理如下大部分鄙人都不会,求指教1、求二叉树上两个节点的最近公共父节点。2、指针P指向一个单向非循环链表的任意非首尾节点,从链表上把 P指向的节点删除。3、求两个链表第一个相交的节点,要求O(N)的时间复杂度。

2010-08-13 23:54:00 593

转载 一道计算期望值的题目

<br /><br />有一个边长为1的立方体。一只蚂蚁从A点出发,沿棱无目的的爬,每到一个顶点都任选三个方向之一继续前进。问这只蚂蚁到达C点的期望爬行距离是多少?<br /> <br />还有一道类似的题,是我自己出的<br /><br />有一个田字型的网格,每个格子都是边长为1的正方形。有一只蚂蚁从A点出发,沿边无目的的爬,每到一个结点都任选一个方向继续前进(包括回头)。问这只蚂蚁到达B点的期望爬行距离是多少?<br /> <br />先不说答案,有兴趣的同学可以自己先想想。欢迎交流。

2010-07-07 13:06:00 1140

原创 小心std::vector的一个错误用法!

本来想用std::vector来实现bfs,代码写得像下面这样struct T{ 数据成员};std::vector statuses;statuses.push_back( 初始状态 );...size_t p = 0;while( p 结果发现for循环还没有出来,old_status里的成员的值已经全乱了开始百思不得其解后来debug了一下,设数据断点,发现原来在push_back的时候,vector里可能会出现一个realloc的过程把所有旧的元素全部delete掉了

2010-07-07 11:09:00 1590

转载 八皇后问题的一个绝妙算法

算法不难理解,主要是巧妙得利用位运算来消除无效运算,值得学习#include using namespace std;int sum;int upperlim;void dfs(int row, int ld, int rd){ if (row == upperlim) { sum++; return; } int pos = upperlim & ~(row | ld | rd); while (pos) { int p = pos & -p

2010-07-07 04:39:00 601

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除