- 博客(11)
- 收藏
- 关注
原创 做题笔记之-----母函数的相关应用
前面说过母函数求递推式,今天要讲的母函数的作用是求组合数和排列数。母函数有指数形式和一般形式。这些东西网上都有大把资料。我就懒得写了。一般形式的母函数主要解决问题: 有 1 5 10 25 50 元的硬币,然后给你一个数字,问你用这几种硬币组合凑成数字大小的种类。很简单。种类个数就是系数,而这个数字就是x的次数。大多数都是这样的类型,换汤不换药。就举一个例子了。而这种方法唯一的难点是用
2012-08-08 20:55:46 597
原创 做题笔记之---多项式乘法
/// 本次计算的是f(x)=(1+x^1+x^2+x^3+········)*(1+x^2+x^4+x^6+·····)*(1+x^3+x^6····)*········#includeusing namespace std;#define N 30 //N表示有多少个多项式相乘#define M 51 //M表示只需要x的次数小于M的那些项int main(){ int F[
2012-08-08 09:32:03 932
原创 做题笔记之------母函数求递推式
前几天在杭电上做一个找字母的题目,才接触到母函数这个东西。一开始,我看别人解题报告,以为母函数仅仅就是求这类题目而已,当我去搜索母函数,然后发现了一篇文章,关于介绍母函数求解递推式,我顿时就欣喜若狂,虽然对于一些式子,我们仅仅知道递推式,就可以利用计算机算出我们所需要的那一项,但是,这样是会消耗很多时间和空间,我个人一直都在寻找一种能够将递推式转化为通项公式的方法,而母函数,正好达到了这一要求,母
2012-08-06 22:32:21 783
原创 关于相交线产生区域问题和错误排序
今天在杭电上做题目时碰到一题说求N条折线最多能分割多少个区域的问题。花了一个小时,把折线和直线的情况都推了一边,算是做个笔记吧直线情况 : 当一条直线时 ,有2个区域。两条直线,四个区域,此时有1个交点,三条直线要有3个交点才能产生最多区域。我们可以发现,每增加一条直线,交点数目增加 n-1个,n-1即为第n条直线与前N-1条直线都有交点。而n-1个交点会多增加N-2个区域,同
2012-07-31 20:22:56 583
原创 算法导论笔记之----双向链表
#includeusing namespace std;typedef int Element;struct Node{ Element Num; Node *parent; Node *next;};class Lnode{public: Lnode(); void creat(); bool find(Element);//判断某个元素是否在链表中 void
2012-07-26 16:43:50 391
原创 算法导论笔记之---合并排序应用之求逆序数
逆序数:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。这是百度百科里的定义。如 4 7 6 8 5 1 3 2 逆序数为20 在我所了解中求逆序数有两种思路:一种是求出数列a[n]中排列在a[i]前面比a[i]大的数的个数,然后将n个数求和即为逆序数。另一种是求出数列a[n]中排列在a[i]后面比a[i]小的数的个数,然后将N个数求和。
2012-07-24 13:35:34 471
原创 算法导论笔记之----随机快速排序
根据算法导论的描述,我们知道快排虽好,但是也有情况是O(n^2),这种情况下每次划分都是 n-1 和1个元素 此时还不如插入排序的效率。所以引进了随机快速排序。原理是在我们排序的范围,随机产生一个数,然后将该数对应的数组值与数组排序的第一个数字交换,然后再进行普通的快速排序。。#include#define random(x) (rand()%(x))using namespace std;
2012-07-24 09:45:47 474
原创 算法导论笔记之----堆排序
最大堆,父节点大于它的孩子节点的值。。。先采用递归的方法,建立一个最大堆,然后将堆的最高父节点与当前所保留的树最后一个节点交换,同时去掉最后一个节点,将剩余树从新建堆。。#includeusing namespace std;void Buildhead(int *arr,int parent,int longth){ int lagest; if(parent*2+1<=l
2012-07-24 09:08:38 389
原创 算法导论笔记之----合并排序
合并排序,思想很简单,先分再合,这种算法不仔细看,很容易以为是快速排序。实际上相差很大。合并排序,每次分,都是取中间的一个位置,然后用递归,将一组T个数据分成T组一个数据的数组,然后再合并起来。(都是根据数组的下标进行运算,所以从0开始)///合并排序#includeusing namespace std;void m_sort(int *arr,int begin,int middle,i
2012-07-24 08:55:35 404
原创 算法导论笔记之---插入排序
//插入排序#includeusing namespace std;void Insert(int *arr,int Count){ for(int i=1;i<Count;++i) { int Now=i; for(int j=i-1;j>-1;--j) if(arr[Now]<arr[j]) swap(arr[Now--],arr[j]); else
2012-07-24 08:39:42 315
原创 算法导论笔记之----二叉搜索树的插入、删除、搜索操作
#includeusing namespace std;struct tree{ int Key; tree *left; tree *right;};void SetNull(tree *&Root,int x);void Insert(tree *&Root,int x){ if(Root==NULL) { Root=new tree; Ro
2012-07-24 08:15:25 596
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人