摘要:
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 && des); 4 int n=0; 5 if (*des=='\0') 6 { 7 return const_cast<char* >(src); 8 } 9 while (*src!='\0')10 {11 ... 阅读全文
摘要:
1. 题目:参见编程之美P189页。2. 分析:详细算法书上说的很明确,学会这个分析过程。具体代码如下: 1 //二维最大子段和问题 2 int maxSum(int **a,int row,int col, 3 int& i_min,int& j_min,int& i_max,int& j_max) 4 { 5 int **p=new int *[row+1]; 6 for (int i=0;i<=row;i++) 7 { 8 p[i]=new int[col+1]; 9 } 10 for (in... 阅读全文
摘要:
1. 题目:参见《计算机算法设计与分析》P192. 分析:当k>0时,将2k×2k的棋盘分成4个2k-1×2k-1的子棋盘。特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘无特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘,我们可以用一个L型骨牌覆盖这3个较小棋盘的汇合处,这3个子棋盘上被L型骨牌覆盖的方格就成为该棋盘上的特殊方格,从而将问题转化为4个较小规模的棋盘覆盖问题。递归地使用这种分割,知道棋盘转化为1×1的棋盘。3. 代码: 1 #include <iostream> 2 #include <iomanip> 3 # 阅读全文
摘要:
1. 题目:设有2k 个运动员参加循环比赛,要求如下: (1)每个选手必须与其他选手各赛一次 (2)每个选手一天只能赛一次 (3)比赛进行n-1天2. 分析:题目来自《计算机算法设计与分析》 P34页。书中有具体的分析,是采用分治算法来安排的赛程表。代码如下: 1 int a[100][100]={0}; 2 3 void table(int k,int a[][100]) 4 { 5 assert(k>0 && a); 6 //k=0时,只有1个人,赛程直接给出如下a[1][1]=1 7 a[1][1]=1; 8 int n=1; 9 int ... 阅读全文
摘要:
方法一: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*.....*n,特别地,有0!=0,1!=1. 解释:n 个不同元素的一个错排可由下述两个步骤完成: 第一步,“错排” 1 号元素(将 1 号元素排在第 2 至第 n 个位置之一),有 n - 1 种方法。 第二步 阅读全文
摘要:
1. 题目:给定一个无序整数数组,返回这个数组中第k小的数。2. 分析:最平常的思路是将数组排序,最快的排序是快排,然后返回已排序数组的第k个数,算法时间复杂度为O(nlogn),空间复杂度为O(1)。使用快排的思想,但是每次只对patition之后的数组的一半递归,这样可以将时间复杂度将为O(n)。 具体的思路:将数组按照第一个数字first进行划分,将比first小的放在左边,比first大的放在右边,first放中间。返回patition之后first的下标j。如果此时j+1==k(+1是因为数组下标从0开始)那么说明a[j]就是要找的第k个数。如果j+1<k,递归查找左半部分;如 阅读全文
摘要:
1. 字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。2. Trie Tree的性质: (1)根节点不包含字符,除根节点外每一个节点包含一个字符。 (2)从根节点到某一节点,路径数经过的字符连接起来,为该节点对应的字符串。 (3)每个节点的子节点包含的字符均不相同。3. 基本操作主要是插入和查找,偶尔涉及删除操作。4. 实现方法,搜索字典树项目的方法为: (1)从... 阅读全文
摘要:
1. 这道题主要是要将几种情况考虑完整,一下给出的程序考虑以下几种情况:(1)以'+'开始的字符串(2)以‘-’开始的字符串(3)出现多个点‘.’的字符串(4)出现非法字符(5)不合理的组合方式2. 代码如下: 1 bool flag=true; 2 float ctof(const char* str) 3 { 4 assert(str); 5 float res=0.0f; 6 float Intpart=0.0f; 7 float Dotpart=0.0f; 8 bool minus=false; 9 const char* tmp=str... 阅读全文
摘要:
1. linux下编译C程序使用cc gcc g++ 编译C++程序使用 g++。2. 调试程序使用gdb。3. 调试过程主要参考以下两篇文章:http://blog.csdn.net/haoel/article/details/2879http://blog.csdn.net/haoel/article/details/28804.今天在Linux上用GDB进行程序调试的时候,发现提示:No symbol table is loaded. Use the "file" command.导致这个错误的原因一般是:在交叉编译时没有加-g选项.所以在编译程序时一定要注意加上-g 阅读全文
摘要:
1. 二叉树中很多的操作都可以从对二叉树的遍历入手,在遍历的基础上对树中节点进行相关的操作或做相关的信息统计。本文主要讨论二叉树的三种遍历算法。2. 定义二叉树的结构体如下:1 struct Node2 {3 int m_data;4 Node* m_lChild;5 Node* m_rChild;6 Node(int data=0,Node* lChild=NULL,Node* rChild=NULL)7 :m_data(data),m_lChild(lChild),m_rChild(rChild){}8 };3. 递归遍历代码很容易写,如下:... 阅读全文