算法设计
文章平均质量分 77
baimeng5720
知行合一
展开
-
【算法设计-分治】最大子数组问题
先写上代码:#includeusing namespace std;typedef struct maximum{int left;int right;int sum;}Maximum;Maximum* FIND_MAX_CROOSING_SUBARRAY(int *A,int low,int mid,int high);Maximum* FIND_MAXI原创 2015-04-24 14:05:17 · 592 阅读 · 0 评论 -
【算法设计-最长公共子串与最长公共子序列】
先写代码,然后晚上上传过程图#includeusing namespace std;int LongestSubStr(char *str1, char *str2){int c[100][100];int i, j;int maxi, maxj;int n = strlen(str1);int m = strlen(str2);for (i = 0; i原创 2015-08-24 15:31:44 · 698 阅读 · 0 评论 -
【算法设计-动态规划】钢条切割问题
问题:给定一段长度为n英寸的钢条和一个价格表pi(i=1,2,...,n),求切割钢条方案,使得销售收益rn最大。如果长度为n英寸的钢条的价格pn足够大,最优解可能就是完全不需要切割。方法一:递归从上而下把所有的全部搜索一遍int CUT_ROD(int p[],int n){if(n==0)return 0;int q=INT_MIN; for(int i=1;i原创 2015-05-26 08:48:16 · 1924 阅读 · 0 评论 -
【算法设计-二叉搜索树】二叉查找树的操作与实现
二叉查找树某个结点的左子树的值都比它小,其右子树的值比它大。要实现的主要操作代码实现#include using namespace std;// BST的结点 typedef struct node{int key;struct node *lChild, *rChild,*parent;}Node, *BST;BST lvis=NULL原创 2015-05-16 10:17:28 · 1037 阅读 · 0 评论 -
【算法设计-链栈和链队列】链栈和链队列的实现
1.链队列。利用带有头结点的单链表来实现链队列,插入和删除的复杂度都为o(1)代码:#include#includetypedef struct Qnode{ int data; Qnode *next;}Qnode;typedef struct LinkQueue{Qnode *front;Qnode *rear;}LinkQueue;vo原创 2015-05-07 19:55:59 · 1105 阅读 · 0 评论 -
【算法设计-单链表的逆转】单链表逆转实现
1.在Θ(n)时间内将链表转置,而且只能需要少量的额外空间这里需要用3个指针使得q指向p然后依次后移。代码:#includeusing namespace std;typedef struct Node{int data;struct Node *next;}LinkList;LinkList* Create_End();void printLi原创 2015-05-07 20:32:19 · 5803 阅读 · 1 评论 -
【腾讯2015校园招聘技术类】第24题
题目:请设计一个函数可以把10进制的正整数转换为4位定长的36进制字符串36进制的规则为:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";举例说明:1="0001"10="000A"20="000k"35="000Z"36="0010"100="002S"2000="01JK"代码如下#includeusing name原创 2015-05-19 09:04:49 · 715 阅读 · 0 评论 -
【ACM】华为-2012-校园招聘机试题
3、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 = 50且 system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,优先级相同的任务按照入队顺序排列(即先入队的任务排在前面),数组元素为-1表示结束。例如:task[] = {0, 30, 155, 1,原创 2015-04-07 22:00:50 · 577 阅读 · 0 评论 -
【散列表-链接法解决冲突】利用链接法来解决冲突的散列表
~~~~(>_首先看一下这种散列表的结构:1.每个槽都令其为NULL,注意里面保存的都是指向Node的指针,而不是结点哦~2.然后我这里把链表的头结点,比如上图的k1,k5,k8的prior指针指向了T这个散列表,因为这样删除的时候会比较简单。3.注意删除链表中的第一个结点和尾结点时候的不同方法哦。。因为这个耽误了3天时间啊。。。好了,代码如下:#include原创 2015-05-14 07:57:09 · 930 阅读 · 0 评论 -
【算法设计-链表】单链表与双向循环链表
1.单链表代码:包含了尾插法,插入,删除操作。有头结点的单链表也是为了在第一个位置插入和删除时候容易,不需要另外讨论#include#includetypedef struct Linklist{ int key; Linklist *next;}Linklist;Linklist* create_end(){ Linklist *head=(Link原创 2015-05-06 14:42:27 · 628 阅读 · 0 评论 -
【散列表-直接定址法】含有卫星数据的直接定址法
数组T中的每个值都是指针,指针指向node结点,node结点中的元素为key,data。代码:#include#includetypedef struct Node{int key;int data;}Node;typedef struct T{ Node **table;//利用指针数组 int size;}T;void T_creat原创 2015-05-11 15:57:08 · 894 阅读 · 0 评论 -
【算法设计-快速排序】随机快速排序算法
1.算法流程:但是为了减少算法因为初始数据可能已经部分按大小排序,导致算法复杂性会变成o(n2)进行了随机选择方法在random_partition中随机产生(p,r)之间的一个数字,然后交换A[i]与A[r]这样会使得快速排序算法的复杂性得到降低。代码实现:#include#include#define DataType int void FastSo原创 2015-05-04 11:00:23 · 1273 阅读 · 0 评论 -
【算法设计-优先队列】优先队列的实现与操作
优先队列是堆排序的一个具体应用。优先队列分为如下几个操作:1.INSERT(S,x)把元素x插入到优先队列中。2.MAXIMUM(S):返回s中具有最大关键字的元素。3.EXTRACT_MAX(S):去掉S中最大关键字的元素4.INCREASE_KEY(S,x,k):将元素x的关键字值增加到k,k是不小于x的元素。优先队列的应用:1.共享计算机系统的作业调度。最大优先队原创 2015-05-04 08:18:32 · 1995 阅读 · 0 评论 -
【算法设计-堆排序】大根堆排序
1.堆排序不仅拥有与归并排序一样的时间复杂度为o(nlgn),而且空间复杂度所占秩序额外的几个元素空间,这个又有插入排序的优势。2.堆排序分为3部分,第一部分是保持堆的性质的函数MAX_HEAPIFY函数,用于保持堆的性质:父结点的值要大于子节点。 第二部分是创建大根堆的函数,BUILD_MAX_HEAP这个函数从第一原创 2015-05-03 22:30:36 · 1256 阅读 · 0 评论 -
【算法设计-随机算法】利用随机算法生成均匀随机排序数组
思想:1.首先生成1到n的数组A2.生成1到n^3的n个数的随机数组P例如A= P=3.对p数组进行从小到大的排序(利用快速排序),生成数组P1=4.根据3中P1的顺序,生成随机数数组A1=代码:#include#include#include//快速排序,平均时间复杂度o(nlog2n),最好为o(log2n),最坏为o(n2).是不稳定排序( 交换排序)原创 2015-04-28 16:12:16 · 2058 阅读 · 2 评论 -
【算法设计-散列表】散列表的直接定址法与位向量
位向量(bit vector)是一个仅包含0和1的数组。长度为m的位向量所占空间要比包含m个指针的数组少的多。用一个位向量来表示一个包含不同元素的动态集合。字典操作的运行时间为0(1)代码:#include #include #define INT_BIT 32 typedef struct { unsigned int *table;原创 2015-05-11 14:34:44 · 1063 阅读 · 0 评论 -
【算法设计-二叉树遍历】二叉树的递归与非递归遍历方法
非递归方法利用一个堆栈来将处理。代码如下:#include#includetypedef struct Node{ char data; struct Node *lchild,*rchild;}*BitTree,Node;typedef struct Stack{ Node *key[20]; int top;}stack;voi原创 2015-05-09 09:00:01 · 527 阅读 · 0 评论 -
【算法-分治】从数组中取出n个元素的所有组合(需要深入理解递归)
本文为转载,原文章出处http://www.cnblogs.com/shuaiwhu/archive/2012/04/27/2473788.html如数组为{1, 2, 3, 4, 5, 6},那么从它中取出3个元素的组合有哪些,取出4个元素的组合呢?比如取3个元素的组合,我们的思维是:取1、2,然后再分别取3,4,5,6;取1、3,然后再分别取4,5,6;......转载 2015-04-27 16:11:50 · 2191 阅读 · 0 评论 -
[算法设计-字符的全排列问题]
代码:#includeusing namespace std;void swap(char &a, char &b){char temp = a;a = b;b = temp;}void func(char a[], int m, int n){if (m == n){for (int i = 0; i cout cout }el原创 2015-09-09 09:47:39 · 441 阅读 · 0 评论