<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:media="http://search.yahoo.com/mrss/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>算法技术手册 - 四号程序员</title>
	<atom:link href="https://www.coder4.com/archives/tag/%E7%AE%97%E6%B3%95%E6%8A%80%E6%9C%AF%E6%89%8B%E5%86%8C/feed" rel="self" type="application/rss+xml" />
	<link>https://www.coder4.com</link>
	<description>Keep It Simple and Stupid</description>
	<lastBuildDate>Thu, 05 Jul 2012 15:30:49 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>算法技术手册 – 查找 – 散列查找(Hash查找)</title>
		<link>https://www.coder4.com/archives/2586</link>
					<comments>https://www.coder4.com/archives/2586#respond</comments>
		
		<dc:creator><![CDATA[coder4]]></dc:creator>
		<pubDate>Wed, 26 Oct 2011 12:06:13 +0000</pubDate>
				<category><![CDATA[C && C++]]></category>
		<category><![CDATA[算法&数据结构]]></category>
		<category><![CDATA[散列查找]]></category>
		<category><![CDATA[查找]]></category>
		<category><![CDATA[算法技术手册]]></category>
		<guid isPermaLink="false">http://www.coder4.com/?p=2586</guid>

					<description><![CDATA[对于含有n个元素的集合C，我们先构造一个Hash函数，让n映射到b个桶内，当选择合理时，速度会很快，时间复杂度O(1)。 完美哈希函数：不会产生冲突，是存在的。 对于&#62;=1个值映射到同一个桶的情况下，就会发生碰撞。处理方法： 链表：每个桶拉一个链表，第一遍散列后，在链表中查找是否存在元素。 开放定址：构造双变量散列函数h(u, j)。h(u, 0) = h(u)，此时退化为原始散列函数。 开放定址，分两类： 线性探测h(u, j)=(h(u)+j) m[......] 继续阅读]]></description>
		
					<wfw:commentRss>https://www.coder4.com/archives/2586/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>算法技术手册 – 查找 – 二分查找</title>
		<link>https://www.coder4.com/archives/2582</link>
					<comments>https://www.coder4.com/archives/2582#respond</comments>
		
		<dc:creator><![CDATA[coder4]]></dc:creator>
		<pubDate>Tue, 25 Oct 2011 12:16:31 +0000</pubDate>
				<category><![CDATA[算法&数据结构]]></category>
		<category><![CDATA[二分查找]]></category>
		<category><![CDATA[查找]]></category>
		<category><![CDATA[算法技术手册]]></category>
		<guid isPermaLink="false">http://www.coder4.com/?p=2582</guid>

					<description><![CDATA[二分查找，要求集合是有序的，在这个条件基础上，它比顺序查找具有更好的性能。 如果使用伴随数组，只需要struct中有一个key是有序的就行。 需要指出的是，当数组放在磁盘上时，时间复杂度就不再是O(LogN)，而取决于磁盘存取的开销。 源代码： #include &#60;stdio.h&#62; typedef int TYPE; int search(TYPE* arr, int n, int t) { int low = 0; int hi[......] 继续阅读]]></description>
		
					<wfw:commentRss>https://www.coder4.com/archives/2582/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>算法技术手册 – 查找 – 顺序查找</title>
		<link>https://www.coder4.com/archives/2579</link>
					<comments>https://www.coder4.com/archives/2579#respond</comments>
		
		<dc:creator><![CDATA[coder4]]></dc:creator>
		<pubDate>Tue, 25 Oct 2011 12:06:11 +0000</pubDate>
				<category><![CDATA[C && C++]]></category>
		<category><![CDATA[算法&数据结构]]></category>
		<category><![CDATA[查找]]></category>
		<category><![CDATA[算法技术手册]]></category>
		<category><![CDATA[顺序查找]]></category>
		<guid isPermaLink="false">http://www.coder4.com/?p=2579</guid>

					<description><![CDATA[顺序查找也叫线性查找，是最简单的查找算法。穷举法遍历每个元素，查找是否包含元素t。 平均、最坏性能O(N) #include &#60;stdio.h&#62; typedef int TYPE; int search(TYPE* arr, int n, TYPE t) { int i=0; for(i=0; i&#60;n; i++) { if(arr[i]==t) { re[......] 继续阅读]]></description>
		
					<wfw:commentRss>https://www.coder4.com/archives/2579/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>算法技术手册 – 排序 – 如何选择排序算法</title>
		<link>https://www.coder4.com/archives/2309</link>
					<comments>https://www.coder4.com/archives/2309#respond</comments>
		
		<dc:creator><![CDATA[coder4]]></dc:creator>
		<pubDate>Sat, 08 Oct 2011 13:16:29 +0000</pubDate>
				<category><![CDATA[C && C++]]></category>
		<category><![CDATA[算法&数据结构]]></category>
		<category><![CDATA[排序]]></category>
		<category><![CDATA[排序算法]]></category>
		<category><![CDATA[算法技术手册]]></category>
		<category><![CDATA[选择]]></category>
		<guid isPermaLink="false">http://www.coder4.com/?p=2309</guid>

					<description><![CDATA[实际上，没有绝对优秀的、应该始终采用的排序算法。 书上给出了一些选择不同排序算法的理由，写的非常好，抄录一下。 元素很少：插入排序 几乎有序：插入排序 关注最差情况：堆排序（牢记：堆排序的最差时间复杂度依然是O(nlogn)） 平均较好：快速排序 元素从密集范围取出：桶排序 代码量小：插入排序 书上也在不同应用环境：字符串、浮点、几乎有序等情况下进行了测试，有兴趣的可以去翻阅。[......] 继续阅读]]></description>
		
					<wfw:commentRss>https://www.coder4.com/archives/2309/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>算法技术手册 – 排序 – 桶排序/哈希排序/散列排序</title>
		<link>https://www.coder4.com/archives/2301</link>
					<comments>https://www.coder4.com/archives/2301#comments</comments>
		
		<dc:creator><![CDATA[coder4]]></dc:creator>
		<pubDate>Sat, 08 Oct 2011 13:04:04 +0000</pubDate>
				<category><![CDATA[C && C++]]></category>
		<category><![CDATA[算法&数据结构]]></category>
		<category><![CDATA[哈希排序]]></category>
		<category><![CDATA[排序]]></category>
		<category><![CDATA[散列排序]]></category>
		<category><![CDATA[桶排序]]></category>
		<category><![CDATA[算法技术手册]]></category>
		<guid isPermaLink="false">http://www.coder4.com/?p=2301</guid>

					<description><![CDATA[在前面的计数排序中，我们已经领略到了如何用空间换时间的方法，找到一种线性时间复杂度O(N)的排序算法。 计数排序的缺点也是非常明显的：一旦数据范围[0,k)，中的k]相对于数据量N非常稀疏，计数排序的空间会非常大、时间消耗也会增大非常大。当然主要还是空间问题。 个人认为：桶排序 = 哈希排序 = 散列排序，基本思想是一样的。 于是桶排序/哈希排序应运而生，假设值域范围还是k，我们不去创建k个buckets，而是创建m个木桶，让N个元素通过哈系函数映射到这k个桶即可。这里还有一个[......] 继续阅读]]></description>
		
					<wfw:commentRss>https://www.coder4.com/archives/2301/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>算法技术手册 – 排序 – 计数排序</title>
		<link>https://www.coder4.com/archives/2284</link>
					<comments>https://www.coder4.com/archives/2284#respond</comments>
		
		<dc:creator><![CDATA[coder4]]></dc:creator>
		<pubDate>Sat, 08 Oct 2011 09:11:53 +0000</pubDate>
				<category><![CDATA[C && C++]]></category>
		<category><![CDATA[算法&数据结构]]></category>
		<category><![CDATA[排序]]></category>
		<category><![CDATA[算法技术手册]]></category>
		<category><![CDATA[计数排序]]></category>
		<guid isPermaLink="false">http://www.coder4.com/?p=2284</guid>

					<description><![CDATA[如果已知被排序的n个元素，值范围固定在在 "[0,k)"内]，那么计数排序是最好的选择，它具有线性复杂度。 这个约束有些过强，有些时候，可以将不满足这个条件的转化一下： 比如 [-k, k)映射]到[0, 2k)等]。 再比如1/p的小树映射到p k-p等等。 下面上算法，主要走两遍： 首先建立k个桶 (1)扫描n个元素，增加对应桶中的计数 (2)从小到大扫描k个桶，计数非零则减一，然后顺序、依次输出。 源代码： #include &#60;stdio.h&#62;[......] 继续阅读]]></description>
		
					<wfw:commentRss>https://www.coder4.com/archives/2284/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>算法技术手册 - 排序 - 堆排序</title>
		<link>https://www.coder4.com/archives/2182</link>
					<comments>https://www.coder4.com/archives/2182#respond</comments>
		
		<dc:creator><![CDATA[coder4]]></dc:creator>
		<pubDate>Tue, 20 Sep 2011 05:51:01 +0000</pubDate>
				<category><![CDATA[C && C++]]></category>
		<category><![CDATA[算法&数据结构]]></category>
		<category><![CDATA[堆排序]]></category>
		<category><![CDATA[排序]]></category>
		<category><![CDATA[算法技术手册]]></category>
		<guid isPermaLink="false">http://www.coder4.com/?p=2182</guid>

					<description><![CDATA[堆排序依赖于上午写道的构建堆和调整堆。 基本思想： (1)首先执行BuildHeap（以最大堆为例），则arr[0]已经是最大元素了，如果我们要按照从小到大排序，那么它应该被放在arr[n-1]上，于是，我们swap arr[0]和arr[n-1]。 (2)类似的，我们让i从n-1到0，依次执行调整堆，AdjustHeap(i,n)，每次调整完成后，堆顶部一定是最大元素，正好把他换到i-2上。 上述的思路和选择排序是不是非常相似！ 改进： 调整堆实际用到了递归方法，而其实它是[......] 继续阅读]]></description>
		
					<wfw:commentRss>https://www.coder4.com/archives/2182/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>算法技术手册 - 排序 - 堆排序 - 调整堆和构造堆</title>
		<link>https://www.coder4.com/archives/2178</link>
					<comments>https://www.coder4.com/archives/2178#respond</comments>
		
		<dc:creator><![CDATA[coder4]]></dc:creator>
		<pubDate>Tue, 20 Sep 2011 02:36:59 +0000</pubDate>
				<category><![CDATA[C && C++]]></category>
		<category><![CDATA[算法&数据结构]]></category>
		<category><![CDATA[堆排序]]></category>
		<category><![CDATA[构造堆]]></category>
		<category><![CDATA[算法技术手册]]></category>
		<category><![CDATA[调整堆]]></category>
		<guid isPermaLink="false">http://www.coder4.com/?p=2178</guid>

					<description><![CDATA[堆的下标相关： 对于大小为n的堆(0~n-1)中的一个元素idx (1)左孩子：idx*2 + 1 (2)右孩子：idx*2 + 2 (3)父亲结点：(idx-1)/2 (4)最大（右下）的非叶子结点：n/2-1 特别注意(4)区别于(3)，为什么呢？最后一个结点为n-1，那么它的父亲结点肯定是最后一个非叶子结点。即(n-1-1)/2 = n/2 - 1，都是下标搞的麻烦是吧！ 目的：通过n/2-1次调整堆，可以构造一个堆。 调整堆(i,max)：将i及之后（右、下）[......] 继续阅读]]></description>
		
					<wfw:commentRss>https://www.coder4.com/archives/2178/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>算法技术手册 – 排序 – 选择排序</title>
		<link>https://www.coder4.com/archives/2167</link>
					<comments>https://www.coder4.com/archives/2167#respond</comments>
		
		<dc:creator><![CDATA[coder4]]></dc:creator>
		<pubDate>Sun, 18 Sep 2011 09:50:50 +0000</pubDate>
				<category><![CDATA[算法&数据结构]]></category>
		<category><![CDATA[实现]]></category>
		<category><![CDATA[排序]]></category>
		<category><![CDATA[算法技术手册]]></category>
		<category><![CDATA[选择排序]]></category>
		<guid isPermaLink="false">http://www.coder4.com/?p=2167</guid>

					<description><![CDATA[选择排序，思想非常简单，分为selectMax和selectSort两个部分。 selectMax： 每次选择区间内最大的数，返回其Index selectSort 1、从右到左依次扫描i（除idx=0，因为选到最后，最小的一定在最左边），规定区间为[0, i] 2、调用selectMax，获得最大的maxIndex。 3、这个i位置应该是第i大的数的位置，也就是maxIndex的数的位置，因此，如果i!=maxIndex，swap之。 算法复杂度，不管是最坏、平均还是最好[......] 继续阅读]]></description>
		
					<wfw:commentRss>https://www.coder4.com/archives/2167/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>算法技术手册 - 排序 - 快速排序</title>
		<link>https://www.coder4.com/archives/2159</link>
					<comments>https://www.coder4.com/archives/2159#comments</comments>
		
		<dc:creator><![CDATA[coder4]]></dc:creator>
		<pubDate>Sat, 17 Sep 2011 14:04:51 +0000</pubDate>
				<category><![CDATA[算法&数据结构]]></category>
		<category><![CDATA[快速排序]]></category>
		<category><![CDATA[算法技术手册]]></category>
		<guid isPermaLink="false">http://www.coder4.com/?p=2159</guid>

					<description><![CDATA[待补充：非递归版本。 快速排序和前面的中值排序非常类似。 分为partition和sort主体两个部分。 1.partition 和前面求第k大的数用到的思路非常类似。 (0)确定一个pivotIndex (1)交换a[right]和a[pivotIndex] (2)i=store=left,i从left到right-1，注意要包含right-1！！（不用包含right，因为里面是pivot） (3)在(2)过程中，如果a[i] (4)完成上述步骤后，交换a[stor[......] 继续阅读]]></description>
		
					<wfw:commentRss>https://www.coder4.com/archives/2159/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
