<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ah7975的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ah7975</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ah7975]]></copyright><item><title><![CDATA[string相关函数的实现]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253867</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253867</guid><author>ah7975</author><pubDate>Mon, 17 Sep 2012 10:44:00 +0800</pubDate><description><![CDATA[1. strstr函数：char* strstr(const char* src,const char* dest),返回子串dest第一次在src中出现的位置。

 1 char* mystrstr(const char* src,const char* des)
 2 {
 3     assert(src &amp;&amp; des);
 4     int n=0;...]]></description><category></category></item><item><title><![CDATA[最大子段和扩展（二维）]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253864</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253864</guid><author>ah7975</author><pubDate>Fri, 14 Sep 2012 16:37:00 +0800</pubDate><description><![CDATA[1. 题目：参见编程之美P189页。
2. 分析：详细算法书上说的很明确，学会这个分析过程。
具体代码如下：

  1 //二维最大子段和问题
  2 int maxSum(int **a,int row,int col,
  3            int&amp; i_min,int&amp; j_min,int&amp; i_max,int&amp; j_max)
...]]></description><category></category></item><item><title><![CDATA[棋盘覆盖问题]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253865</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253865</guid><author>ah7975</author><pubDate>Tue, 04 Sep 2012 16:59:00 +0800</pubDate><description><![CDATA[1. 题目：参见《计算机算法设计与分析》P19
2. 分析：当k&gt;0时，将2k×2k的棋盘分成4个2k-1×2k-1的子棋盘。特殊方格必位于4个较小子棋盘之一中，其余3个子棋盘无特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘，我们可以用一个L型骨牌覆盖这3个较小棋盘的汇合处，这3个子棋盘上被L型骨牌覆盖的方格就成为该棋盘上的特殊方格，从而将问题转化为4个较小规模的棋盘覆盖...]]></description><category></category></item><item><title><![CDATA[循环赛日程表]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253862</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253862</guid><author>ah7975</author><pubDate>Tue, 04 Sep 2012 16:27:00 +0800</pubDate><description><![CDATA[1. 题目：设有2k 个运动员参加循环比赛，要求如下：
　　（1）每个选手必须与其他选手各赛一次
　　（2）每个选手一天只能赛一次
　　（3）比赛进行n-1天
2. 分析：题目来自《计算机算法设计与分析》 P34页。书中有具体的分析，是采用分治算法来安排的赛程表。代码如下：

 1 int a[100][100]={0};
 2 
 3 void table(int k,...]]></description><category></category></item><item><title><![CDATA[错排问题]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253863</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253863</guid><author>ah7975</author><pubDate>Tue, 04 Sep 2012 15:08:00 +0800</pubDate><description><![CDATA[方法一：n各有序的元素应有n！种不同的排列。如若一个排列式的所有的元素都不在原来的位置上，则称这个排列为错排。任给一个n，求出1,2,……,n的错排个数Dn共有多少个。递归关系式为：D(n)=(n-1)(D(n-1)+D(n-2))D(1)=0,D(2)=1可以得到:错排公式为f(n) = n![1-1/1!+1/2!-1/3!+……+(-1)^n*1/n!]其中,n!=1*2*3*...]]></description><category></category></item><item><title><![CDATA[求一个数组中第k小的数]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253860</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253860</guid><author>ah7975</author><pubDate>Sat, 01 Sep 2012 09:57:00 +0800</pubDate><description><![CDATA[1. 题目：给定一个无序整数数组，返回这个数组中第k小的数。
2. 分析：最平常的思路是将数组排序，最快的排序是快排，然后返回已排序数组的第k个数，算法时间复杂度为O（nlogn），空间复杂度为O（1）。使用快排的思想，但是每次只对patition之后的数组的一半递归，这样可以将时间复杂度将为O（n）。
　　具体的思路：将数组按照第一个数字first进行划分，将比first小的放在左...]]></description><category></category></item><item><title><![CDATA[字典树（TrieTree）]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253861</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253861</guid><author>ah7975</author><pubDate>Fri, 31 Aug 2012 13:46:00 +0800</pubDate><description><![CDATA[1. 字典树又称单词查找树，Trie树，是一种树形结构，是一种哈希树的变种。典型应用是用于统计，排序和保存大量的字符串（但不仅限于字符串），所以经常被搜索引擎系统用于文本词频统计。它的优点是：利用字符串的公共前缀来节约存储空间，最大限度地减少无谓的字符串比较，查询效率比哈希表高。
2. Trie Tree的性质：
　　（1）根节点不包含字符，除根节点外每一个节点包含一个字符。
　　...]]></description><category></category></item><item><title><![CDATA[将给定的字符数组转换成float类型]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253805</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253805</guid><author>ah7975</author><pubDate>Thu, 30 Aug 2012 15:33:00 +0800</pubDate><description><![CDATA[1. 这道题主要是要将几种情况考虑完整，一下给出的程序考虑以下几种情况：
（1）以'+'开始的字符串
（2）以‘-’开始的字符串
（3）出现多个点‘.’的字符串
（4）出现非法字符
（5）不合理的组合方式
2. 代码如下：

 1 bool flag=true;
 2 float ctof(const char* str)
 3 {
 4     assert(st...]]></description><category></category></item><item><title><![CDATA[gdb调试]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253821</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253821</guid><author>ah7975</author><pubDate>Mon, 27 Aug 2012 09:56:00 +0800</pubDate><description><![CDATA[1. linux下编译C程序使用cc gcc g++ 编译C++程序使用 g++。
2. 调试程序使用gdb。
3. 调试过程主要参考以下两篇文章：
http://blog.youkuaiyun.com/haoel/article/details/2879
http://blog.youkuaiyun.com/haoel/article/details/2880
4.
今天在Linux上用GDB...]]></description><category></category></item><item><title><![CDATA[二叉树的前序，中序，后序遍历]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253803</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253803</guid><author>ah7975</author><pubDate>Sun, 26 Aug 2012 22:11:00 +0800</pubDate><description><![CDATA[1. 二叉树中很多的操作都可以从对二叉树的遍历入手，在遍历的基础上对树中节点进行相关的操作或做相关的信息统计。本文主要讨论二叉树的三种遍历算法。
2. 定义二叉树的结构体如下：

1 struct Node
2 {
3     int m_data;
4     Node* m_lChild;
5     Node* m_rChild;
6     Node(int da...]]></description><category></category></item><item><title><![CDATA[C语言中的细节]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253858</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253858</guid><author>ah7975</author><pubDate>Sun, 26 Aug 2012 20:42:00 +0800</pubDate><description><![CDATA[1. 逗号表达式
　　c语言提供一种特殊的运算符，逗号运算符，优先级别最低，它将两式联接起来，如：（3+5,6+8）称为逗号表达式，其求解过程先表达式1，后表达式2，整个表达式值是表达式2的值，如：（3+5，6+8）的值是14。（a=3*5,a*4）的值是60
　　逗号表达式的形式如下：
　　表达式1，表达式2，表达式3，...... ，表达式n
　　逗号表达式的要领：
　　(...]]></description><category></category></item><item><title><![CDATA[BloomFilter（布隆过滤器）]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253859</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253859</guid><author>ah7975</author><pubDate>Sun, 26 Aug 2012 16:41:00 +0800</pubDate><description><![CDATA[以下介绍转载自：http://www.cnblogs.com/allensun/archive/2011/02/16/1956532.html
布隆过滤器 (Bloom Filter)是由Burton Howard Bloom于1970年提出，它是一种space efficient的概率型数据结构，用于判断一个元素是否在集合中。在垃圾邮件过滤的黑白名单方法、爬虫(Crawler)的...]]></description><category></category></item><item><title><![CDATA[排列组合问题]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253856</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253856</guid><author>ah7975</author><pubDate>Sat, 25 Aug 2012 15:42:00 +0800</pubDate><description><![CDATA[转自博客：http://blog.youkuaiyun.com/star143133/article/details/6854745 
代码见Problem28

问题1 ：输入一个字符串，打印出该字符串中字符的所有排列。例如输入字符串abc，则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
 思路：这是个递归求解的问题。递归算...]]></description><category></category></item><item><title><![CDATA[Coins in a Line]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253857</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253857</guid><author>ah7975</author><pubDate>Thu, 16 Aug 2012 16:49:00 +0800</pubDate><description><![CDATA[1. 题目：给定一组硬币排成直线（假设硬币数量为偶数），有两个人开始取硬币。每次只能从队列两端取硬币。有没有这样一种方案使先手取硬币，最后得到的硬币面值最大？给出这样一种方案并给出取法及最终获得的最大面值。
2. 文章中给出了详细的解释，这类就不说了。
3. 代码：

 1 #include &lt;iostream&gt;
 2 #include &lt;cassert&gt...]]></description><category></category></item><item><title><![CDATA[找出和为k的所有组合]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253854</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253854</guid><author>ah7975</author><pubDate>Thu, 16 Aug 2012 14:55:00 +0800</pubDate><description><![CDATA[1. 题目：给定一个数组a（a中不存在重复元素）和一个值k，求出a中元素之和为k的所有组合。比如a为{7,3,6,2}，k=7，则所有组和有2+2+3和7。
2. 解析：回溯+递归。比较难以理解的是index索引的使用，代码如下：

void printSum(int candidates[], int index[], int n) { 
    for (int i = 1;...]]></description><category></category></item><item><title><![CDATA[求两个有序数组归并之后的第k个最小值]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253855</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253855</guid><author>ah7975</author><pubDate>Thu, 16 Aug 2012 14:08:00 +0800</pubDate><description><![CDATA[1. 题目：给定两个有序数组（升序）。求两个数组合并之后的第k小值。
2. 分析：常规算法将数组合并，之后从前向后遍历一次，找到k位的值，时间复杂度O（m+n）。改进之后的算法:不需要归并两个数组，而是使用两个指针分别从两个有序数组的起始向后走，如果a[i]&lt;=b[j]，那么i++,直到a[i]&gt;b[j] ; 如果a[i]&gt;=b[j]，那么j++，直到a[i]&lt;...]]></description><category></category></item><item><title><![CDATA[数组分段和最大值最小问题]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253852</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253852</guid><author>ah7975</author><pubDate>Thu, 16 Aug 2012 13:38:00 +0800</pubDate><description><![CDATA[1. 题目：给定一个数组，和一个值k，数组分成k段。要求这k段子段和最大值最小。求出这个值。
2.分析：这道题目很经典，也很难，个人认为很难。文章中给出了三种算法：算法1，暴力搜索。本题暴力搜索算法并不是很明显，可以使用递归实现暴力搜索。递归首先要有递归式：
 nn-1M[n, k] = min...]]></description><category></category></item><item><title><![CDATA[位运算]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253853</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253853</guid><author>ah7975</author><pubDate>Thu, 16 Aug 2012 10:09:00 +0800</pubDate><description><![CDATA[1. 面试的题目很多是关于位运算的。位运算包括：与，或，异或，取反，左移，右移。
2.下面是几道位运算的经典题目。
2.1 判断一个数是不是2的密次方?
解析：一个数要是2的密次方，必然其二进制表示只有一位为1。所以题目转换为判读这个数是否只有一位为1？？代码如下：

1 bool IsTwoPower(unsigned int x) 
2 {   return !(x &a...]]></description><category></category></item><item><title><![CDATA[Multiplication of numbers]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253807</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253807</guid><author>ah7975</author><pubDate>Sun, 12 Aug 2012 21:29:00 +0800</pubDate><description><![CDATA[1. 题目：给定一个整数数组，要求输出一个数组，使新数组的第i位是原数组中除去第i位剩余数字的乘积。如输入{4,3,2,1,2}，输出{12,16,24,48,24}。要求时间复杂度为：O(n)，且不能使用除法运算。
2. 分析：如果可以使用除法运算很容易想到的算法是将原数组中所有数字相乘，然后遍历，每次除以原数组中的第i位，即得到新数组中的第i位。但是这个算法有一个问题，要是原数组中...]]></description><category></category></item><item><title><![CDATA[螺旋输出二维矩阵]]></title><link>https://blog.youkuaiyun.com/ah7975/article/details/101253824</link><guid>https://blog.youkuaiyun.com/ah7975/article/details/101253824</guid><author>ah7975</author><pubDate>Sun, 12 Aug 2012 17:24:00 +0800</pubDate><description><![CDATA[1. 题目：顺时针螺旋输出二维矩阵。
2. 分析：螺旋输出二维矩阵，每次剥除最外层的数据，下次再输出里面的数据。很容易想到，这个可以用递归实现，在输出一圈时，输出顺序为：topLeft--&gt;topRight--&gt;bottomRight--&gt;bottomLeft--&gt;topLeft。在递归程序中怎样计算每一个元素的下标这个是关键。
3. 代码：

 1 #i...]]></description><category></category></item></channel></rss>