Quantcast
Channel: 数据结构与算法
Browsing all 50 articles
Browse latest View live

[算法问题]合并两个已经排序的数组为另一个数组

问题描述: 设子数组a[0:k]和a[k+1:n-1]已排好序(0=k=n-1).试设计一个合并这两个子数组为排好序的数组a[0:n-1]的算法.要求算法在最坏的情况下所用的计算时间为O(n), 且只用到O(1)的辅助空间. 这一题比较简单,看代码就知道了. #include stdio.h void Displa

View Article



[算法问题]交换两个子数组的元素值

问题描述: 设a[0:n-1]是一个有n个元素的数组,k(0=k=n-1)是一个非负整数.试设计一个算法将子数组 a[0:k]与a[k+1:n-1]换位.要求算法在最坏情况下耗时O(n), 且只用到O(1)的辅助空间. 这个问题比较常见了,一般的办法就是分别把两个子数组分别逆序排列,然后对

View Article

(算法导论习题解problem2.4)寻找一个序列中逆序对的数量

一个序列的逆序对是这样的两个元素, 对于序列A而言, ij且A[i]A[j], 于是A[i]和A[j]就形成一个逆序对. 研究一个序列中逆序对的数量是有实际意义的, 对于插入排序而言, 它排序的时间与待排序序列的逆序对数量成正比. 下面给出求出一个序列中逆序对数量的算法,

View Article

(算法导论习题解exercise2.3-4)递归版插入排序

没什么可以多说的,直接看代码吧: #include stdio.h void display(int array[], int size) { int i; for (i = 0; i size; ++i) { printf(%d , array[i]); } printf(\n); } void insert_sort(int array[], int size) { if (size 1) {...

View Article

用C语言编写程序实现Zip或者Rar无损压缩算法

用C语言编写程序实现Zip或者Rar无损压缩算法 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *HUFF.C Huffman encode for multimedia application 8*8 pixel Ver 3 * * * *Ver 1: Complied in Borland...

View Article


运动搜索算法之钻石搜索(Ver1.0)

前言 DS算法是在运动搜索中使用最为广泛的搜索算法之一,有的地方被翻译成钻石搜索,菱形搜索。不管是硬件还是软件的视频编码器中,都可以看到它的存在。下面文章的内容主要从学报上摘录,希望给视频算法的新手们有些许帮助。 原理 通常,运动矢量总是高度集

View Article

如何实现PHP的TEA算法

算法简单,而且效率高,每次可以操作8个字节的数据,加密解密的KEY为16字节,即包含4个int数据的int型数组,加密轮数应为8的倍数,一般比较常用的轮数为64,32,16,QQ原来就是用TEA16来还原密码的. TEA算法 核心为: #include stdint.h void encrypt (uint32_t* v, u

View Article

如何实现PHP的TEA算法 (2)

$w [0] = $y; $w [1] = $z; } private function _decipherLong($y, $z, $k) { // sum = delta5, in general sum = delta * n $sum = 0xC6EF3720; $delta = 0x9E3779B9; $n = ( integer ) $this-n_iter; while ( $n --...

View Article


一种随机抽题的简单算法

随机抽题是很多有关考试软件经常会遇到的问题,设相关题库中有n道题,要从中抽取m ( m=n ) 道题,这要首先产生m个随机数。在C语言中,一般的做法是: int *intArray; int i; time_t t; intArray = malloc(m*sizeof(int)); /*time(t)); /*依次产生m个随机数*/

View Article


蚁群算法小程序(C/C++语言实现)(四)

ms = MAX_SMELL; break; } if(IsTrace(i,j)) continue; if(Smell[type][i][j]ms) ms = Smell[type][i][j]; } break; case DOWN: for(i=xxx-ANT_EYESHOT;i=xxx+ANT_EYESHOT;i++) for(j=yyy+1;j=yyy+ANT_EYESHOT;j++) {...

View Article

蚁群算法小程序(C/C++语言实现)(三)

} /* of have smell to drop */ } /* of have food */ else /* no food, looking for food */ { if(ant[AntNow].SmellAmount[SMELL_TYPE_HOME]) { smellnow = Smell[SMELL_TYPE_HOME][antx][anty]; smelltodrop =...

View Article

蚁群算法小程序(C/C++语言实现)(三) (2)

yyy,ddir); if(CanGoState==0||CanGoState==2||CanGoState==3||CanGoState==6) cangof = 1; else cangof = 0; if(CanGoState==0||CanGoState==1||CanGoState==3||CanGoState==5) cangol = 1; else cangol = 0;...

View Article

蚁群算法小程序(C/C++语言实现)(二)

fclose(fp_block); } void HomeFoodInitial(void) { int randnum; int homeplace; /* 1 -- home at left-up, food at right-down 2 -- home at left-down, food at right-up 3 -- home at right-up, food at...

View Article


蚁群算法小程序(C/C++语言实现)(一)

算法解释: 程序开始运行,蚂蚁们开始从窝里出动了,寻找食物;他们会顺着屏幕爬满整个画面,直到找到食物再返回窝。 其中,F点表示食物,H表示窝,白色块表示障碍物,+就是蚂蚁了。 预期的结果:各个蚂蚁在没有事先告诉他们食物在什么地方的前提下开始寻找

View Article

蚁群算法小程序(C/C++语言实现)(一) (2)

DispPlayTime(void); int TimeUse(void); void HideCur(void); void ResetCur(void); /* --------------- */ struct HomeStruct { int xxx,yyy; int amount; int TargetFood; }home; struct FoodStruct { int...

View Article


蚁群算法小程序(C/C++语言实现)(一) (3)

file...,FileNameBlock); gets(FileNameBlock); if(FileNameBlock[0]==0) strcpy(FileNameBlock,Ant.ant); else strcat(FileNameBlock,.ant); if ((fp_block = fopen(FileNameBlock, rb)) == NULL) {...

View Article

仿STL中的堆算法的一个实现

RT。 堆的性质之类的不再这里阐述,写这个算法只为了更好的理解STL中的堆算法,如果看不懂STL中的算法也可以来参考这里给出的算法,因为是纯C的看起来会省去很多语言方面的细节。 同时里面还有一个STL中对应算法的测试以比较两者的效果。 /*****************

View Article


二分查找算法(迭代和递归版本)

Bentley在他的着作《Writing Correct Programs》中写道,90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。 我自己尝试了一下,确实要第一次就完全写正确不容易.以下两份实现依次为迭代和递归版本的代码,二分查找的思想很多人都清楚,但是这里有一个

View Article

二叉树创建及遍历算法

//二叉树处理头文件 //包括二叉树的结构定义,二叉树的创建,遍历算法(递归及非递归), /* 作者:成晓旭 时间:2001年10月7日(18:49:38-20:00:00) 内容:完成二叉树创建,二叉树的前,中,后序遍历(递归) 时间:2001年10月7日(21:09:38-22:09:00) 内容:完成二叉树

View Article

二叉树创建及遍历算法 (2)

二叉树的根节点指针 */ void last_Order_Access(BTNode *head) { BTNode *pt; ABTStack *ps,*top; int counter =1; pt = head; top = NULL; printf(\n二叉树的后序遍历结果非递归:\t); while(pt!=NULL ||top!=NULL) /*二叉树未遍历完,或堆栈非空*/ { whil

View Article
Browsing all 50 articles
Browse latest View live




Latest Images