<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
 <channel>
  <title>算术</title>
  <link>http://algorithmically.blogbus.com</link>
  <description><![CDATA[Live Algorithmically]]></description>
  <generator> by blogbus.com </generator>
  <lastBuildDate>Thu, 01 Jan 1970 07:00:00 +0700</lastBuildDate>
  <image>
									<url>http://public.blogbus.com/profile/6/8/4/1517486/avatar_1517486_96.jpg</url>
									<title>算术</title>
									<link>http://algorithmically.blogbus.com</link>
								</image>  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/algorithmically" /><feedburner:info uri="algorithmically" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
   <title>C++语言的特性：常数函数表达式</title>
   <description>&lt;p&gt;C++在很多地方允许使用常数表达式，比如在常数变量进行初始化时，定义数组时，或者在对模板进行特化时。语言规范要求常数表达式中不能使调用函数，哪怕是非常简单的函数也不行。但表达式相对复杂一点的时候，这个限制使得程序的书写很不方便。比如：&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;const &lt;/strong&gt;&lt;strong&gt;int&amp;nbsp; &lt;/strong&gt;n = -17;&lt;br /&gt;&lt;strong&gt;int &lt;/strong&gt;array[ n&amp;gt;0 ? n : -n ];&lt;/font&gt;&lt;/p&gt;&lt;p&gt;其实目的是为了求n的绝对值，然后声明大小适当的数组。为了方便我们可以定义一个宏：&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;ABS(X) ((X)&amp;gt;0 ? n: -n)&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;strong&gt;&lt;br /&gt;const &lt;/strong&gt;&lt;strong&gt;int&amp;nbsp; &lt;/strong&gt;n = -17;&lt;br /&gt;
&lt;strong&gt;int &lt;/strong&gt;array[ ABS(X)];&lt;/font&gt;&lt;/p&gt;&lt;p&gt;我们都知道宏的缺点是没有类型检查，如果表达式比较复杂难以调试。一个新的C++建议允许将特定的一类函数在常数表达式中使用，形式如下&lt;/p&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&lt;em&gt;return_type&lt;/em&gt; &lt;em&gt;functionname&lt;/em&gt;(&lt;em&gt;parameters&lt;/em&gt;){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;return &lt;/strong&gt;&lt;em&gt;constant_express&lt;/em&gt;;&lt;br /&gt;}&lt;/font&gt; &lt;/p&gt;&lt;p&gt;可以看出来，这个建议实际上就是将只有一个返回语句的简单函数自动扩展为对应的表达式。这一过程和内联很相似。详细内容参见&lt;a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1521.pdf" target="_blank"&gt;Generalized Constant Expressions (N1521)&lt;/a&gt; &lt;/p&gt;&lt;!--sp--&gt;&lt;div class="addfav"&gt;&lt;br /&gt;收藏到：&lt;span class= "delicious"&gt;&lt;a href="http://delicious.com/save?url=http%3A%2F%2Falgorithmically.blogbus.com%2Flogs%2F7850608.html&amp;title=C%2B%2B%E8%AF%AD%E8%A8%80%E7%9A%84%E7%89%B9%E6%80%A7%EF%BC%9A%E5%B8%B8%E6%95%B0%E5%87%BD%E6%95%B0%E8%A1%A8%E8%BE%BE%E5%BC%8F"&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sysmsg"&gt;&lt;b&gt;&lt;a href="http://www.blogbus.com" target="_blank"&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/algorithmically/~4/6F_9dKP-acI" height="1" width="1"/&gt;</description>
   <link>http://feedproxy.google.com/~r/algorithmically/~3/6F_9dKP-acI/7850608.html</link>
   <author>deanjiang</author>
   <pubDate>Wed, 22 Aug 2007 00:54:34 +0800</pubDate>
  <feedburner:origLink>http://algorithmically.blogbus.com/logs/7850608.html</feedburner:origLink></item>
  <item>
   <title>大文件随机抽样</title>
   <description>一个很古老的问题。有一个非常大的文本文件，比如说300G，你无法读入内存再进行处理。文件中每一行包含一个单词或短语，但是长度不定。请设计一个算法，可以完全随机的从中选择一个单词或短语。选择每一个单词或短语的概率必须严格相同。&lt;!--sp--&gt;&lt;div class="addfav"&gt;&lt;br /&gt;收藏到：&lt;span class= "delicious"&gt;&lt;a href="http://delicious.com/save?url=http%3A%2F%2Falgorithmically.blogbus.com%2Flogs%2F7729128.html&amp;title=%E5%A4%A7%E6%96%87%E4%BB%B6%E9%9A%8F%E6%9C%BA%E6%8A%BD%E6%A0%B7"&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sysmsg"&gt;&lt;b&gt;&lt;a href="http://www.blogbus.com" target="_blank"&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/algorithmically/~4/eCodlBwVMbY" height="1" width="1"/&gt;</description>
   <link>http://feedproxy.google.com/~r/algorithmically/~3/eCodlBwVMbY/7729128.html</link>
   <author>deanjiang</author>
   <pubDate>Thu, 16 Aug 2007 15:51:09 +0800</pubDate>
  <feedburner:origLink>http://algorithmically.blogbus.com/logs/7729128.html</feedburner:origLink></item>
  <item>
   <title>复合栈</title>
   <description>&lt;p&gt;地球人都知道栈最有效率的实现方式就是数组了。如果要求两个栈共享一个数组，为了充分利用空间，我们通常会一个栈放在底部向上生长，另一个放在顶部项下生长。现在，请设计一个算法，最有效率的在一个数组中实现三个栈。这里主要是指空间利用率。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class="addfav"&gt;&lt;br /&gt;收藏到：&lt;span class= "delicious"&gt;&lt;a href="http://delicious.com/save?url=http%3A%2F%2Falgorithmically.blogbus.com%2Flogs%2F7640835.html&amp;title=%E5%A4%8D%E5%90%88%E6%A0%88"&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sysmsg"&gt;&lt;b&gt;&lt;a href="http://www.blogbus.com" target="_blank"&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/algorithmically/~4/mDCHn4bQqgQ" height="1" width="1"/&gt;</description>
   <link>http://feedproxy.google.com/~r/algorithmically/~3/mDCHn4bQqgQ/7640835.html</link>
   <author>deanjiang</author>
   <pubDate>Wed, 15 Aug 2007 13:14:41 +0800</pubDate>
  <feedburner:origLink>http://algorithmically.blogbus.com/logs/7640835.html</feedburner:origLink></item>
  <item>
   <title>Yahoo!的面试</title>
   <description>&lt;p&gt;前一阵子也参加了一个Yahoo的面试，因为方向特殊，没有经过HR的面试，直接就跑了过去，问的全是概率相关的问题。这里我想说的是最后一个开放式的问题。其实这已经不是面试题了，而是他们当时正在考虑的项目，说出来挺有意思的。谁叫没让我签保密合同呢。&lt;/p&gt;&lt;p&gt;Yahoo!自己有一个照片分享网站，就是flickr。flickr有两个功能，一个是可以给每个照片加标签，以便於搜索，另一个就是每个照片可以关联到地图上的一个位置上。想象一下大家都给照片加什么样的标签呢？最多的恐怕就是照片里的人物和拍摄的地点了。于是雅虎开始考虑能不能用用户输入的标签和图片的地理位置信息给Yahoo!地图作标注。好比在yahoo地图上用户正在显示某个区域，我们可以用算法来计算出一个最恰当的名字。比如，你正在看北京海淀区附近的地图，那么它应该显示这里是海淀，而不要说北京或是中国，也不能是海淀里面的某个镇某个村。怎么做这个算法呢？&lt;/p&gt;&lt;p&gt;我的解答详见内文&lt;/p&gt;&lt;!--sp--&gt;&lt;div class="addfav"&gt;&lt;br /&gt;收藏到：&lt;span class= "delicious"&gt;&lt;a href="http://delicious.com/save?url=http%3A%2F%2Falgorithmically.blogbus.com%2Flogs%2F7643033.html&amp;title=Yahoo%21%E7%9A%84%E9%9D%A2%E8%AF%95"&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sysmsg"&gt;&lt;b&gt;&lt;a href="http://www.blogbus.com" target="_blank"&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/algorithmically/~4/iYhFbtKgONE" height="1" width="1"/&gt;</description>
   <link>http://feedproxy.google.com/~r/algorithmically/~3/iYhFbtKgONE/7643033.html</link>
   <author>deanjiang</author>
   <pubDate>Sun, 12 Aug 2007 22:28:34 +0800</pubDate>
  <feedburner:origLink>http://algorithmically.blogbus.com/logs/7643033.html</feedburner:origLink></item>
  <item>
   <title>分布式词频统计</title>
   <description>&lt;p&gt;有一个规模庞大的多语言语料库，已经经过预处理，分成了12个文件，每个文件存放在一台服务器中。每个文件中包含800亿个单词，每个单词占一行，平均每个单词40字节。假设服务器都已经联网，每台服务器有双CPU和4G的内存，4&amp;times;400GB的硬盘，换句话说，每台服务器就是一个高配置的PC机。请设计一个方案，找出出现频率最高的一百万个单词。 &lt;br /&gt; &lt;/p&gt;&lt;!--sp--&gt;&lt;div class="addfav"&gt;&lt;br /&gt;收藏到：&lt;span class= "delicious"&gt;&lt;a href="http://delicious.com/save?url=http%3A%2F%2Falgorithmically.blogbus.com%2Flogs%2F7604574.html&amp;title=%E5%88%86%E5%B8%83%E5%BC%8F%E8%AF%8D%E9%A2%91%E7%BB%9F%E8%AE%A1"&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sysmsg"&gt;&lt;b&gt;&lt;a href="http://www.blogbus.com" target="_blank"&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/algorithmically/~4/C7b-7ppg_fc" height="1" width="1"/&gt;</description>
   <link>http://feedproxy.google.com/~r/algorithmically/~3/C7b-7ppg_fc/7604574.html</link>
   <author>deanjiang</author>
   <pubDate>Sat, 11 Aug 2007 00:49:56 +0800</pubDate>
  <feedburner:origLink>http://algorithmically.blogbus.com/logs/7604574.html</feedburner:origLink></item>
  <item>
   <title>Xbox的最佳摔法</title>
   <description>&lt;p&gt;在网上多次看见相似的题目，有人给出了正确的答案，但没能够合理的说明为什么结果是最优的。所以我也出来伸展一下。题目如下：&lt;/p&gt;&lt;p&gt;你在一幢100层的办公楼里上班，现在给你两台Xbox，要求你用尽可能少的实验，确定把Xbox扔下而摔不坏的最高楼层。比方说，从30层丢下来没问题，但从31层丢下来就坏了，那么30层就是最高楼层。假设只要没超过这个最高楼层，Xbox摔几次都不会坏。允许把两台xbox都砸烂的情况下，最少要做多少次实验(把Xbox从楼上摔下多少次)才能保证找到这个最高楼层？请给出实验的方案。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class="addfav"&gt;&lt;br /&gt;收藏到：&lt;span class= "delicious"&gt;&lt;a href="http://delicious.com/save?url=http%3A%2F%2Falgorithmically.blogbus.com%2Flogs%2F7603866.html&amp;title=Xbox%E7%9A%84%E6%9C%80%E4%BD%B3%E6%91%94%E6%B3%95"&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sysmsg"&gt;&lt;b&gt;&lt;a href="http://www.blogbus.com" target="_blank"&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/algorithmically/~4/CUHIMNLFmX4" height="1" width="1"/&gt;</description>
   <link>http://feedproxy.google.com/~r/algorithmically/~3/CUHIMNLFmX4/7603866.html</link>
   <author>deanjiang</author>
   <pubDate>Fri, 10 Aug 2007 23:10:53 +0800</pubDate>
  <feedburner:origLink>http://algorithmically.blogbus.com/logs/7603866.html</feedburner:origLink></item>
  <item>
   <title>选择算法</title>
   <description>&lt;p&gt;设计一个选择算法从一组N个数字中找出最大或最小的M个数字。M通常远远小于N。&lt;/p&gt;&lt;p&gt;类似的问题往往是和缓存的使用有关。比如搜索引擎对常用搜索结果需要进行缓存，以避免反复的重复查询。比较简单的策略可以是对最后的M个不同的搜索进行缓存。这样的性能并非最优的，因为最后的M个搜索并不一定是最频繁的搜索。比较好的方案是对所有搜索计算出现的频率，然后选出最频率最高的M个进行缓存。当然这一过程并不需要是实时的，比如每天做一次就差不多了。两种方案如果能结合以下，量增缓存的效果可能会更好。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class="addfav"&gt;&lt;br /&gt;收藏到：&lt;span class= "delicious"&gt;&lt;a href="http://delicious.com/save?url=http%3A%2F%2Falgorithmically.blogbus.com%2Flogs%2F7597764.html&amp;title=%E9%80%89%E6%8B%A9%E7%AE%97%E6%B3%95"&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sysmsg"&gt;&lt;b&gt;&lt;a href="http://www.blogbus.com" target="_blank"&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/algorithmically/~4/k4Bmgyt4Q8k" height="1" width="1"/&gt;</description>
   <link>http://feedproxy.google.com/~r/algorithmically/~3/k4Bmgyt4Q8k/7597764.html</link>
   <author>deanjiang</author>
   <pubDate>Fri, 10 Aug 2007 20:08:57 +0800</pubDate>
  <feedburner:origLink>http://algorithmically.blogbus.com/logs/7597764.html</feedburner:origLink></item>
  <item>
   <title>正态分布数据的排序</title>
   <description>已知数组中的数据大致符合正态分布，哪种排序算法的效率最高？&lt;!--sp--&gt;&lt;div class="addfav"&gt;&lt;br /&gt;收藏到：&lt;span class= "delicious"&gt;&lt;a href="http://delicious.com/save?url=http%3A%2F%2Falgorithmically.blogbus.com%2Flogs%2F7597289.html&amp;title=%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83%E6%95%B0%E6%8D%AE%E7%9A%84%E6%8E%92%E5%BA%8F"&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sysmsg"&gt;&lt;b&gt;&lt;a href="http://www.blogbus.com" target="_blank"&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/algorithmically/~4/y9RlZDWiBSE" height="1" width="1"/&gt;</description>
   <link>http://feedproxy.google.com/~r/algorithmically/~3/y9RlZDWiBSE/7597289.html</link>
   <author>deanjiang</author>
   <pubDate>Fri, 10 Aug 2007 19:49:50 +0800</pubDate>
  <feedburner:origLink>http://algorithmically.blogbus.com/logs/7597289.html</feedburner:origLink></item>
  <item>
   <title>多级索引</title>
   <description>&lt;p&gt;有一套40G的数据，其中的每条数据都是一个键值对，所有的键都是唯一的。给你一台计算机，只有1G的内存，请设计一个方案如何才能有效的通过键来访问对应的值。请最小化内存的页面失效请求。&lt;/p&gt;&lt;!--sp--&gt;&lt;div class="addfav"&gt;&lt;br /&gt;收藏到：&lt;span class= "delicious"&gt;&lt;a href="http://delicious.com/save?url=http%3A%2F%2Falgorithmically.blogbus.com%2Flogs%2F7534523.html&amp;title=%E5%A4%9A%E7%BA%A7%E7%B4%A2%E5%BC%95"&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sysmsg"&gt;&lt;b&gt;&lt;a href="http://www.blogbus.com" target="_blank"&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/algorithmically/~4/i66KC0fej14" height="1" width="1"/&gt;</description>
   <link>http://feedproxy.google.com/~r/algorithmically/~3/i66KC0fej14/7534523.html</link>
   <author>deanjiang</author>
   <pubDate>Wed, 08 Aug 2007 21:35:18 +0800</pubDate>
  <feedburner:origLink>http://algorithmically.blogbus.com/logs/7534523.html</feedburner:origLink></item>
  <item>
   <title>中间值</title>
   <description>&lt;p&gt;给你O(N)台联网的计算机，每台计算机上保存了O(N)个整数。假设由于内存的限制每台计算机最多能购处理O(N)个整数，请设计一个算法找出这O(N&amp;times;N)个整数的中间值(Median)。&lt;/p&gt;&lt;p&gt;提示：可以假设有一台或几台计算机上没有保存数据（协调人），用来协调其他计算机的工作。&lt;/p&gt;&lt;p&gt;如果你不记得什么是中间值的话，这里有一个例子&lt;/p&gt;&lt;p&gt;1, 2, 3, 4, &lt;font color="#ff0000"&gt;5, 16&lt;/font&gt;, 17, 18, 19, 20 这里5和16都是中间值&lt;/p&gt;&lt;p&gt;1, 2, 3, 4, &lt;font color="#ff0000"&gt;5&lt;/font&gt;, 17, 18, 19, 20 这里5是中间值&lt;/p&gt;&lt;!--sp--&gt;&lt;div class="addfav"&gt;&lt;br /&gt;收藏到：&lt;span class= "delicious"&gt;&lt;a href="http://delicious.com/save?url=http%3A%2F%2Falgorithmically.blogbus.com%2Flogs%2F7533559.html&amp;title=%E4%B8%AD%E9%97%B4%E5%80%BC"&gt;Del.icio.us&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sysmsg"&gt;&lt;b&gt;&lt;a href="http://www.blogbus.com" target="_blank"&gt;博客大巴，你的个人传媒早班车&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/algorithmically/~4/5KJFKBjWJaw" height="1" width="1"/&gt;</description>
   <link>http://feedproxy.google.com/~r/algorithmically/~3/5KJFKBjWJaw/7533559.html</link>
   <author>deanjiang</author>
   <pubDate>Wed, 08 Aug 2007 19:46:34 +0800</pubDate>
  <feedburner:origLink>http://algorithmically.blogbus.com/logs/7533559.html</feedburner:origLink></item>
 </channel>
</rss>

