﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-罗朝辉（飘飘白云）-随笔分类-Algorithms</title><link>http://www.cppblog.com/kesalin/category/16173.html</link><description>关注：C++,3D技术,游戏开发,移动开发(iPhone/iPad, Android,J2me等)</description><language>zh-cn</language><lastBuildDate>Mon, 11 Apr 2011 02:20:36 GMT</lastBuildDate><pubDate>Mon, 11 Apr 2011 02:20:36 GMT</pubDate><ttl>60</ttl><item><title>【算法】常用排序，查找，树算法集锦</title><link>http://www.cppblog.com/kesalin/archive/2011/04/10/algorithms.html</link><dc:creator>罗朝辉</dc:creator><author>罗朝辉</author><pubDate>Sun, 10 Apr 2011 04:11:00 GMT</pubDate><guid>http://www.cppblog.com/kesalin/archive/2011/04/10/algorithms.html</guid><wfw:comment>http://www.cppblog.com/kesalin/comments/143864.html</wfw:comment><comments>http://www.cppblog.com/kesalin/archive/2011/04/10/algorithms.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kesalin/comments/commentRss/143864.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kesalin/services/trackbacks/143864.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前面写了好些排序，红黑树，B 树算法的文章，还剩下查找这一大块没有写，查找相关的算法代码已经实现，但是却没有写查找算法日志的闲情了，只好先在这里放出代码来，以后有空有闲情再补上吧。<br><br>算法代码 Google 仓库：点击这里<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/kesalin/archive/2011/04/10/algorithms.html'>阅读全文</a><img src ="http://www.cppblog.com/kesalin/aggbug/143864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kesalin/" target="_blank">罗朝辉</a> 2011-04-10 12:11 <a href="http://www.cppblog.com/kesalin/archive/2011/04/10/algorithms.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【树】树算法之红黑树</title><link>http://www.cppblog.com/kesalin/archive/2011/04/03/redblacktree.html</link><dc:creator>罗朝辉</dc:creator><author>罗朝辉</author><pubDate>Sun, 03 Apr 2011 03:21:00 GMT</pubDate><guid>http://www.cppblog.com/kesalin/archive/2011/04/03/redblacktree.html</guid><wfw:comment>http://www.cppblog.com/kesalin/comments/143330.html</wfw:comment><comments>http://www.cppblog.com/kesalin/archive/2011/04/03/redblacktree.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kesalin/comments/commentRss/143330.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kesalin/services/trackbacks/143330.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 红黑树本质是二叉查找树的一种，它的性能高于普通的二叉查找树，即使是在最坏的情况下也能保证时间复杂度为O(lgn)。红黑树在每个结点上增加一个存储位表示结点的颜色（或红或黑，故称红黑树）。通过对任何一条从根到叶子的路径上各个结点着色方式的限制，红黑树可以保证没有一条路径会比其他路径长出两倍，因而是接近平衡的。<br><br>红黑树的每个结点至少包含五个域：color，key，left，right 和 parent（一般我们都会在结点中存储额外的数据 data，但前面的五个域是必不可少的），如果某个结点没有子结点或者结节点，则将相应的指针设置为空值（NIL，注意不是 NULL，NIL是一个特定的空结点对象，类似于Obj-C 中 Nil对象）。我们将这些 NIL 当作叶子结点（在实际处理过程中，往往将最底层的孩子结点和根结点的父亲都指向同一个 NIL 结点，以便于处理红黑树代码中的边界条件），而将其它结点当作内结点。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/kesalin/archive/2011/04/03/redblacktree.html'>阅读全文</a><img src ="http://www.cppblog.com/kesalin/aggbug/143330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kesalin/" target="_blank">罗朝辉</a> 2011-04-03 11:21 <a href="http://www.cppblog.com/kesalin/archive/2011/04/03/redblacktree.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【树】树算法之 B 树</title><link>http://www.cppblog.com/kesalin/archive/2011/03/21/btree.html</link><dc:creator>罗朝辉</dc:creator><author>罗朝辉</author><pubDate>Mon, 21 Mar 2011 15:10:00 GMT</pubDate><guid>http://www.cppblog.com/kesalin/archive/2011/03/21/btree.html</guid><wfw:comment>http://www.cppblog.com/kesalin/comments/142430.html</wfw:comment><comments>http://www.cppblog.com/kesalin/archive/2011/03/21/btree.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/kesalin/comments/commentRss/142430.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kesalin/services/trackbacks/142430.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: B 树是一种被设计成专门存储在磁盘上的平衡查找树。因为磁盘的操作速度要大大慢于随机存取存储器，所以在分析B 树的性能时，不仅要看动态集合操作花了多少计算时间，还要看执行了多少次磁盘存储操作。 B 树与红黑树（下一篇介绍）类似，但在降低磁盘I/O 操作次数方面要更好一些。许多数据库系统就使用 B 树或 B 树的变形来存储信息，想象一下一棵每个节点包含 1001 个 key 的高度为 2 的 B 树能容纳多少数据啊，而在内存中我们只存储了一个节点，在需要的时候再从磁盘中读取所需的节点。<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/kesalin/archive/2011/03/21/btree.html'>阅读全文</a><img src ="http://www.cppblog.com/kesalin/aggbug/142430.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kesalin/" target="_blank">罗朝辉</a> 2011-03-21 23:10 <a href="http://www.cppblog.com/kesalin/archive/2011/03/21/btree.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【排序】排序算法之分配排序</title><link>http://www.cppblog.com/kesalin/archive/2011/03/18/bucket_radix_sort.html</link><dc:creator>罗朝辉</dc:creator><author>罗朝辉</author><pubDate>Fri, 18 Mar 2011 15:47:00 GMT</pubDate><guid>http://www.cppblog.com/kesalin/archive/2011/03/18/bucket_radix_sort.html</guid><wfw:comment>http://www.cppblog.com/kesalin/comments/142181.html</wfw:comment><comments>http://www.cppblog.com/kesalin/archive/2011/03/18/bucket_radix_sort.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kesalin/comments/commentRss/142181.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kesalin/services/trackbacks/142181.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前面讲了插入排序，交换排序，选择排序，归并排序，下面接着来讲桶排序，基数排序。<br><br>桶排序和基数排序均属于分配排序。分配排序的基本思想：排序过程无须比较关键字，而是通过用额外的空间来"分配"和"收集"来实现排序，它们的时间复杂度可达到线性阶：O(n)。简言之就是：用空间换时间，所以性能与基于比较的排序才有数量级的提高！&nbsp;&nbsp;<a href='http://www.cppblog.com/kesalin/archive/2011/03/18/bucket_radix_sort.html'>阅读全文</a><img src ="http://www.cppblog.com/kesalin/aggbug/142181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kesalin/" target="_blank">罗朝辉</a> 2011-03-18 23:47 <a href="http://www.cppblog.com/kesalin/archive/2011/03/18/bucket_radix_sort.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【排序】排序算法之归并排序</title><link>http://www.cppblog.com/kesalin/archive/2011/03/13/merge_sort.html</link><dc:creator>罗朝辉</dc:creator><author>罗朝辉</author><pubDate>Sun, 13 Mar 2011 07:19:00 GMT</pubDate><guid>http://www.cppblog.com/kesalin/archive/2011/03/13/merge_sort.html</guid><wfw:comment>http://www.cppblog.com/kesalin/comments/141722.html</wfw:comment><comments>http://www.cppblog.com/kesalin/archive/2011/03/13/merge_sort.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kesalin/comments/commentRss/141722.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kesalin/services/trackbacks/141722.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 排序算法之归并排序&nbsp;&nbsp;&nbsp;罗朝辉（http://www.cppblog.com/kesalin）转载请注明出处排序是数据处理中经常使用的一种重要运算，在计算机及其应用系统中，花费在排序上的时间在系统运行时间中占有很大比重，其重要性勿需多言。下文将介绍常用的如下排序方法，对它们进行简单的分析和比较，并提供&nbsp;C&nbsp;语言实现。所谓排序，就...&nbsp;&nbsp;<a href='http://www.cppblog.com/kesalin/archive/2011/03/13/merge_sort.html'>阅读全文</a><img src ="http://www.cppblog.com/kesalin/aggbug/141722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kesalin/" target="_blank">罗朝辉</a> 2011-03-13 15:19 <a href="http://www.cppblog.com/kesalin/archive/2011/03/13/merge_sort.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【排序】排序算法之选择排序</title><link>http://www.cppblog.com/kesalin/archive/2011/03/09/select_sort.html</link><dc:creator>罗朝辉</dc:creator><author>罗朝辉</author><pubDate>Wed, 09 Mar 2011 13:37:00 GMT</pubDate><guid>http://www.cppblog.com/kesalin/archive/2011/03/09/select_sort.html</guid><wfw:comment>http://www.cppblog.com/kesalin/comments/141456.html</wfw:comment><comments>http://www.cppblog.com/kesalin/archive/2011/03/09/select_sort.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kesalin/comments/commentRss/141456.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kesalin/services/trackbacks/141456.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前面讲了插入，交换排序，下面接着来讲选择排序。&nbsp;&nbsp;<a href='http://www.cppblog.com/kesalin/archive/2011/03/09/select_sort.html'>阅读全文</a><img src ="http://www.cppblog.com/kesalin/aggbug/141456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kesalin/" target="_blank">罗朝辉</a> 2011-03-09 21:37 <a href="http://www.cppblog.com/kesalin/archive/2011/03/09/select_sort.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【排序】排序算法之交换排序</title><link>http://www.cppblog.com/kesalin/archive/2011/03/04/exchange_sort.html</link><dc:creator>罗朝辉</dc:creator><author>罗朝辉</author><pubDate>Fri, 04 Mar 2011 15:47:00 GMT</pubDate><guid>http://www.cppblog.com/kesalin/archive/2011/03/04/exchange_sort.html</guid><wfw:comment>http://www.cppblog.com/kesalin/comments/141136.html</wfw:comment><comments>http://www.cppblog.com/kesalin/archive/2011/03/04/exchange_sort.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kesalin/comments/commentRss/141136.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kesalin/services/trackbacks/141136.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前面我们讲了插入排序，下面接着来讲交换排序。<br><br>交换排序的基本思想是：两两比较待排序记录的关键字，发现两个记录的次序相反时即进行交换，直到没有反序的记录为止。应用交换排序基本思想的主要排序方法有：冒泡排序和快速排序。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/kesalin/archive/2011/03/04/exchange_sort.html'>阅读全文</a><img src ="http://www.cppblog.com/kesalin/aggbug/141136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kesalin/" target="_blank">罗朝辉</a> 2011-03-04 23:47 <a href="http://www.cppblog.com/kesalin/archive/2011/03/04/exchange_sort.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【排序】排序算法之插入排序</title><link>http://www.cppblog.com/kesalin/archive/2011/03/03/insert_sort.html</link><dc:creator>罗朝辉</dc:creator><author>罗朝辉</author><pubDate>Thu, 03 Mar 2011 14:07:00 GMT</pubDate><guid>http://www.cppblog.com/kesalin/archive/2011/03/03/insert_sort.html</guid><wfw:comment>http://www.cppblog.com/kesalin/comments/141085.html</wfw:comment><comments>http://www.cppblog.com/kesalin/archive/2011/03/03/insert_sort.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kesalin/comments/commentRss/141085.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kesalin/services/trackbacks/141085.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 排序是数据处理中经常使用的一种重要运算，在计算机及其应用系统中，花费在排序上的时间在系统运行时间中占有很大比重，其重要性无需多言。下文将介绍常用的如下排序方法，对它们进行简单的分析和比较，并提供 C/C++ 语言实现。<br><br>所谓排序，就是要将一堆记录，使之按关键字递增(或递减)次序排列起来。根据排序所采用的策略，可以分为如上五种：<br><br>1、插入排序（直接插入排序、希尔排序）；<br>2、交换排序（冒泡排序、快速排序）；<br>3、选择排序（直接选择排序、堆排序）；<br>4、归并排序；<br>5、桶排序（桶排序，基数排序）；<br><br>其中插入排序、交换排序、选择排序、选择排序、归并排序都是基于关键字比较的排序，比较排序的平均时间复杂度好不过 O(nlogn)。<br>而桶排序是基于映射的排序，其平均时间复杂度可达到 O(n)，但桶排序需要额外的空间来存储经过映射的记录。<br><br>通常在待排序记录较多的时候，基于映射的排序 O(n) 比基于比较的排序 O(nlogn) 的效率要高得多，这很好理解：用空间换时间。（查找算法其实也是如&nbsp;&nbsp;<a href='http://www.cppblog.com/kesalin/archive/2011/03/03/insert_sort.html'>阅读全文</a><img src ="http://www.cppblog.com/kesalin/aggbug/141085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kesalin/" target="_blank">罗朝辉</a> 2011-03-03 22:07 <a href="http://www.cppblog.com/kesalin/archive/2011/03/03/insert_sort.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Android】Android 上实现水波特效二--优化</title><link>http://www.cppblog.com/kesalin/archive/2010/09/28/ripple_opt.html</link><dc:creator>罗朝辉</dc:creator><author>罗朝辉</author><pubDate>Tue, 28 Sep 2010 03:49:00 GMT</pubDate><guid>http://www.cppblog.com/kesalin/archive/2010/09/28/ripple_opt.html</guid><wfw:comment>http://www.cppblog.com/kesalin/comments/127962.html</wfw:comment><comments>http://www.cppblog.com/kesalin/archive/2010/09/28/ripple_opt.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kesalin/comments/commentRss/127962.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kesalin/services/trackbacks/127962.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     在上一篇文章《Android 上实现水波特效》中对水波波幅的计算是针对每一个像素的，效率比较低，尤其是在手机上运行，相当缓慢。我们可以利用线性插值进行优化，这样可以将计算减少一半（MeshSize 为 2）或减少四分之三（MeshSize 为 4），效率得以大大提升，即使是在手机上也能较为流畅地运行。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/kesalin/archive/2010/09/28/ripple_opt.html'>阅读全文</a><img src ="http://www.cppblog.com/kesalin/aggbug/127962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kesalin/" target="_blank">罗朝辉</a> 2010-09-28 11:49 <a href="http://www.cppblog.com/kesalin/archive/2010/09/28/ripple_opt.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Android】Android 上实现水波特效</title><link>http://www.cppblog.com/kesalin/archive/2010/09/01/android_ripple.html</link><dc:creator>罗朝辉</dc:creator><author>罗朝辉</author><pubDate>Wed, 01 Sep 2010 05:19:00 GMT</pubDate><guid>http://www.cppblog.com/kesalin/archive/2010/09/01/android_ripple.html</guid><wfw:comment>http://www.cppblog.com/kesalin/comments/125518.html</wfw:comment><comments>http://www.cppblog.com/kesalin/archive/2010/09/01/android_ripple.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kesalin/comments/commentRss/125518.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kesalin/services/trackbacks/125518.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文中的水波特效算法部分整理自 GameRes 上的资料，原作者 Imagic。我只是在学习 Android 的过程中，想到这个特效，然后就在Android 上实现出来，并在源算法的基础上添加了雨滴滴落特效，以及划过水面时的涟漪特效。 该程序在模拟器和真机上运行速度都较慢，需要进一步优化或使用 JNI 实现，如果你想到好的优化算法，请联系我：kesalin@gmail.com。&nbsp;&nbsp;<a href='http://www.cppblog.com/kesalin/archive/2010/09/01/android_ripple.html'>阅读全文</a><img src ="http://www.cppblog.com/kesalin/aggbug/125518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kesalin/" target="_blank">罗朝辉</a> 2010-09-01 13:19 <a href="http://www.cppblog.com/kesalin/archive/2010/09/01/android_ripple.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>