Algorithm
文章平均质量分 74
goooxu
这个作者很懒,什么都没留下…
展开
-
八皇后问题的一个绝妙算法
算法不难理解,主要是巧妙得利用位运算来消除无效运算,值得学习#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 · 610 阅读 · 0 评论 -
随机取样和洗牌算法
有一个长度为n的数组,想对其中的元素进行洗牌,使他们能够随机的分布,随机的意思是使每个元素在每个位置上出现的概率都是1/n。如何去做呢,有一个方法如下:依次遍历所有的元素,在遍历到第i个元素的时候,有1/i 的概率和前i个元素(包括第i个)其中之一进行交换,则遍历完所有的元素之后,得到的新的数组就满足上面提到的随机分布的条件原创 2011-04-09 13:33:00 · 1326 阅读 · 0 评论 -
最近公共祖先LCA的几种解决方案
天原创 2011-04-12 16:17:00 · 802 阅读 · 0 评论 -
最长递增子序列
方法一:#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 · 793 阅读 · 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 · 1694 阅读 · 1 评论 -
高效Permutation算法
本文介绍了一个基本C++ 0x语法的产生Permutation的高效算法。原创 2013-11-22 15:34:29 · 2208 阅读 · 0 评论