二分搜索算法实验报告

二分搜索算法实验报告
二分搜索算法实验报告

实验一二分搜索算法实验报告

一.实验目的

1、理解分治算法的概念和基本要素;

2、理解递归的概念;

3、掌握设计有效算法的分治策略;

4、通过二分搜索技术学习分治策略设计技巧;

二.实验内容及要求

1.使用二分搜索算法查找任意N个有序数列中的指定元素。

2.通过上机实验进行算法实现。

3.保存和打印出程序的运行结果,并结合程序进行分析,上交实验报告。

4. 至少使用两种方法进行编程。

三.实验原理

二分搜索算法也称为折半查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。

【基本思想】将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果xa[n/2],则我们只要在数组a的右半部继续搜索x。

二分搜索法的应用极其广泛,而且它的思想易于理解。第一个二分搜索算法早在1946 年就出现了,但是第一个完全正确的二分搜索算法直到1962年才出现。Bentley在他的着作《Writing Correct Programs》中写道,90%的计算机专家不能在2小时内写出完全正确的二

分搜索算法。问题的关键在于准确地制定各次查找范围的边界以及终止条件的确定,正确地归纳奇偶数的各种情况,其实整理后可以发现它的具体算法是很直观的。

方法一:直接查找

穷举法遍历

方法二:递归查找

#include<>

#define MAX 30

int BinarySearch(int a[],int &x,int left,int right)

{

if(left>right){

return -1;

}

else{

left=(left+right)/2;

if(x==a[left])

return left;

else

{

if(x>a[left])

BinarySearch(a,x,left+1,right);

else

BinarySearch(a,x,left*2-right,left+1);

}

}

}

main()

{

int a[MAX];

int found,x,n,i,j,p;

printf("输的个数\n");

scanf("%d",&n);

printf("数组数据\n");

for(i=0;i

{

scanf("%d",&a[i]);

}

for (i=0;i

{

p=i;

for (j=i+1;j

if (a[p]>a[j])

p=j;

if (p!=j)

{

x=a[p];

a[p]=a[i];

a[i]=x;

}

}

for(i=0;i

{

printf("%d ",a[i]);

}

printf("输入要查找的数\n");

scanf("%d",&x);

found=BinarySearch(a,x,0,n);

if(found==-1)

{

printf("未找到\n");

}

else

{

printf("要查找的数在第 %d个\n",found+1); }

}

方法三:迭代查找

#include<>

#define MAX 30

int BinarySearch(int a[],int &x,int n)

{

int left =0;

int right=n-1;

int middle;

while(left<=right){

middle=(left+right)/2;

if(x==a[middle])

return middle;

if(x>a[middle])

left=middle+1;

else right=middle-1;

}

return-1;

}

main()

{

int a[MAX];

int found,x,n,i,j,p;

printf("数的个数\n");

scanf("%d",&n);

printf("数组数据\n");

for(i=0;i

{

scanf("%d",&a[i]);

}

for (i=0;i

{

p=i;

for (j=i+1;j

if (a[p]>a[j])

p=j;

if (p!=j)

{

x=a[p];

a[p]=a[i];

a[i]=x;

}

}

for(i=0;i

{

printf("%d ",a[i]);

}

printf("输入要查找的数\n");

scanf("%d",&x);

found=BinarySearch(a,x,n);

if(found==-1)

{

printf("未找到\n");

}

else

{

printf("要查找的数在第 %d 个\n",found+1); }

}

四.程序代码

变量定义说明:

BinarySearch()算法:a->数组

key->要查找的元素

left->左标志

right->右标志

(n->数据个数)

Main()主函数:ound->是否找到标志,-1表示未找到,找到其值为下标

x->要查找的元素

n->元素个数

i,j,p->循环控制变量

(1)、递归查找

#include<>

#define MAX 30

int BinarySearch(int a[],int key,int left,int right)

{

int mid=(right-right)/2+left;

if(a[mid]==key) {

return mid;

}

if(left>=right) {

return -1;

}else if(key>a[mid]) {

return BinarySearch(a,key,mid+1,right);

} else if(key

return BinarySearch(a,key,left,mid- 1);

}

return -1;

}

int main(void)

{

int a[MAX];

int found,x,n,i,j,p;

printf("数据个数:");

scanf("%d",&n);

printf("输入数据:\n");

for(i=0;i

{

printf("请输入第%d个数据:",i);

scanf("%d",&a[i]);

}

for (i=0;i

{

p=i;

for(j=i+1;j

if(a[p]>a[j])

p=j;

if (p!=j)

{

x=a[p];

a[p]=a[i];

a[i]=x;

}

}

printf("排序后的数据如下:");

for(i=0;i

{

printf("%d ",a[i]);

}

printf("\n");

printf("输入要查找的数:");

scanf("%d",&x);

int left=0,right=n;

found=BinarySearch(a,x,left,right);

if(found==-1)

{

printf("未找到\n");

}

else

{

printf("要查找的数在第%d个\n",found+1);

}

}

(2)、非递归查找

#include<>

#define MAX 30

int BinarySearch(int a[], int key,int len){

int mid=len/2;

if (key==a[mid]) {

return mid;

}

int left=0;

int right=len-1;

while(left<=right){ //迭代查找 mid=(right+left)/2;

if(key

right=mid-1;

}else if(key>a[mid]) {

left=mid+1;

}else{

return mid;

}

}

return -1;

}

int main(void)

{

int a[MAX];

int found,x,n,i,j,p;

printf("数据个数:");

scanf("%d",&n);

printf("输入数据:\n");

for(i=0;i

{

printf("请输入第%d个数据:",i);

scanf("%d",&a[i]);

}

for (i=0;i

{

p=i;

for(j=i+1;j

if(a[p]>a[j])

p=j;

if (p!=j)

{

x=a[p];

a[p]=a[i];

a[i]=x;

}

}

printf("排序后的数据如下:");

for(i=0;i

{

printf("%d ",a[i]);

}

printf("\n");

printf("输入要查找的数:");

scanf("%d",&x);

int left=0,right=n;

found=BinarySearch(a,x,n);

if(found==-1)

{

printf("未找到\n");

}

else

{

printf("要查找的数在第%d个\n",found+1);

}

}

五.结果运行与分析

找到要查找的数据:

未找到要查找的数据:

六.心得与体会

通过这次实验,巩固了自己对二分搜索算法的理解,它是分治法的一个特殊例子,由此也对分治法有了更深一层次的认识。分而治之,化复杂为简单,不只是在算法中,在日常生活中也是极其重要的。正如Bentley在他的着作《Writing Correct Programs》中所说,能够完整的写出二分搜索算法是很难的,准确来说,在固定的时间内很大一部分人是不能完成这个任务的,因为其中的边界判定问题需要引起很大的注意,一不留神就容易犯错,导致结果的错误,而这种边界问题有很难找到,只有通过一步一步的演算才能完全正确的推导出来。这告诫我们,熟能生巧,只有在生活中多练习,当真正需要的时候,才能够信手拈来。

搜索策略实验报告

学生实验报告 实验课名称:人工智能 实验项目名称:八数码实验 专业名称:计算机科学与技术 班级: 2012240201 学号: 201224020102 学生姓名:张璐 教师姓名:陈亮亮 2014年12 月13 日

实验日期:2014 年12 月9 日实验室名称:明远2202

最后,为提高程序的运行效率,减少程序扩展节点时搜索量,将当前0所处位置(i_0:0在s[3][3]中所处行号,j_0:0在s[3][3]中所处列号)也存储在DATA中。 五.源程序: struct array { int id; int depth; int Wx; //错位个数 int moveNum;//计算移动距离 int a[MAX_X][MAX_Y]; int x; //0的横坐标(在数组里的) int y; //0的纵坐标 }; class EightDigital { public: EightDigital(int a[MAX_X][MAX_Y],int b[MAX_X][MAX_Y]); ~EightDigital(); bool safe(int x,int y); //判断与0相邻的位置能否交换,防止数组越界bool compare(); //判断是否到达目标 void search(int x,int y); //搜索目标 void addOpenTable(int x0,int y0,int x1,int y1);//x0,y0是交换前0的坐标,x1,y1是交换后0的坐标,加入open表 void addCloseTable(); //create close table void deleteOpenTable(); void insertSort(); void exchange(int x0,int y0,int x1,int y1); //交换数组值,移动0 int Wx(); //计算错位个数 void print(); //打印数组 bool haveSolution(); int moveNum();

《人工智能基础》实验报告-实验名称:启发式搜索算法

实验名称:启发式搜索算法 1、实验环境 Visual C++ 6.0 2、实验目的和要求 (复述问题)使用启发式算法求解8数码问题 (1)编制程序实现求解8数码问题A*算法,采用估价函数 f(n)=d(n)+p(n) 其中:d(n)是搜索树中结点n的深度;w(n)为节点n的数据库中错放的旗子个数; p(n)为结点n的数据库中每个棋子与其目标位置之间的距离总和。 (2)分析上述(1)中两种估价函数求解8数码问题的效率差别,给出一个是p(n)的上界h(n)的定义,并测试该估价函数是否使算法失去可采纳性。 实验目的:熟练掌握启发式搜索A*算法及其可采纳性。 3、解题思路、代码 3.1解题思路 八数码问题的求解算法 (1)盲目搜索 宽度优先搜索算法、深度优先搜索算法 (2)启发式搜索 启发式搜索算法的基本思想是:定义一个评价函数f,对当前的搜索状态进行评估,找出一个最有希望的节点来扩展。 先定义下面几个函数的含义: f*(n)=g*(n)+h*(n) (1) 式中g*(n)表示从初始节点s到当前节点n的最短路径的耗散值;h*(n)表示从当前节点n到目标节点g的最短路径的耗散值,f*(n)表示从初始节点s经过n到目标节点g的最短路径的耗散值。 评价函数的形式可定义如(2)式所示: f(n)=g(n)+h(n) (2) 其中n是被评价的当前节点。f(n)、g(n)和h(n)分别表示是对f*(n)、g*(n)和h*(n)3个函数值的估计值。 利用评价函数f(n)=g(n)+h(n)来排列OPEN表节点顺序的图搜索算法称为算法A。在A算法中,如果对所有的x,h(x)<=h*(x) (3)成立,则称好h(x)为h*(x)的下界,它表示某种偏于保守的估计。采用h*(x)的下界h(x)为启发函数的A算法,称为A*算法针对八数码问题启发函数设计如下: F(n)=d(n)+p(n) (4)

查找与及其应用实验报告

{ printf("%d ",R[i].key); i++; //从表头往后找} if (i>=n) return -1; else { printf("%d",R[i].key); return i; } } int main() { SeqList R; int n=10,i; KeyType k=5; int a[]={3,6,2,10,1,8,5,7,4,9}; for (i=0;i

printf("%d ",R[i].key); printf("\n"); printf("查找%d所比较的关键字:\n\t",k); if ((i=SeqSearch(R,n,k))!=-1) printf("\n元素%d的位置是%d\n",k,i); else printf("\n元素%d不在表中\n",k); printf("\n"); } 代码片段2: #include #define MAXL 100//定义表中最多记录个数 typedef int KeyType; typedef char InfoType[10]; typedef struct { KeyType key;//KeyType为关键字的数据类型InfoType data;//其他数据 } NodeType; typedef NodeType SeqList[MAXL];//顺序表类型 int BinSearch(SeqList R,int n,KeyType k)//二分查找算法{

实验五搜索引擎使用实验

实验五搜索引擎使用实验一、实验目的 1.了解搜索引擎的发展情况和现状;理解搜索引擎的工作原理;2.了解中英文搜索引擎的基本知识和种类; 3. 掌握中英文搜索引擎的初级检索与高级检索两种方式; 4. 分析和对比各种中英文搜索引擎的共性与区别; 5. 了解网络促销的主要方式二、实验内容: 1. 找网上的中英文搜索引擎,并列出5个中文搜索引擎和5个英文搜索引擎的名称; 2.掌握google、百度中高级搜索语法应用方法。 3. 用3个中文、2个英文搜索引擎对同一主题\同一检索词(关键词)进行检索,从检索效果分析得到的检索结果,并比较分析你所选择的搜索引擎的共性与区别。 4.了解网络促销的应用方式和网络广告促销的特点三、实验步骤 1. 搜索引擎的关键词检索(1)进入Google,熟悉并掌握以下功能:掌握Google 的网站检索功能,选取一些关键词在主页上使用“所有网页”检索网页,并通过使用运算符提高查准率;同时使用“高级检索”功能;掌握Google的图像检索功能;掌握Google的网上论坛功能;掌握Google的主题分类检索功能。(2)进入百度,熟悉并掌握Baidu各功能。搜索到至少两个专利介绍网站,并搜索一条关于手机防盗产品的专利技术,写出检索步骤并截图。 2. 搜索引擎的高级搜索语法应用(百度或谷歌) 3.浏览不同类型的网络广告。四、实验报告 1.进入Google,

搜索关键词“搜索引擎优化”,要求结果格式为Word格式;搜索关键词“电子商务”,但结果中不要出现“网络营销”字样;分别写出检索步骤并截图。 2. 精确匹配——双引号和书名号,分别加和不加双引号搜索“山东财经大学”,查看搜索结果。分别加和不加书名号搜索“围城”,查看搜索结果。 3. 搜索同时包含“山东财经大学”和“会计学院”的网页,并查看数量。 4.利用百度搜索两个专利介绍网站,并搜索一条关于手机防盗产品的专利技术,写出检索步骤并截图。 5.选择使用Google和百度,查询某商务信息(自定,如“海尔2012年销售额” )。要求写出:搜索引擎的名称、检索信息的主题、检索结果(列出前5个)。6.分析实验中所使用搜索引擎的优缺点。 7.比较说明中国和美国的网络广告发展情况。五.实验操作答案 1.(1)可以直接搜索word版的搜索引擎优化即可。如下图 (2)操作和上面差不多,看下图 2.不加引号搜索“山东财经大学”时,没有结果;而加引号时则有许多搜索结果。但是加不加引号搜索“围城”时,结果却是相同的。 3.大多为关于山东财经大学的信息,而会计学院则是属于山财的分支。 4. 1.进入

二分搜索实验报告

竭诚为您提供优质文档/双击可除 二分搜索实验报告 篇一:算法设计与分析二分查找实验报告 课程设计说明书 设计题目:二分查找程序的实现 专业:班级: 设计人: 山东科技大学年月日 课程设计任务书 学院:信息科学与工程学院专业:班级:姓名: 一、课程设计题目:二分查找程序的实现二、课程设计主要参考资料 (1)计算机算法设计与分析(第三版)王晓东著(2)三、课程设计应解决的主要问题 (1)二分查找程序的实现(2)(3)四、课程设计相关附件(如:图纸、软件等): (1)(2) 五、任务发出日期:20XX-11-21课程设计完成日期:

20XX-11-24 指导教师签字:系主任签字: 指导教师对课程设计的评语 成绩: 指导教师签字: 年月日 二分查找程序的实现 一、设计目的 算法设计与分析是计算机科学与技术专业的软件方向的必修课。同时,算法设计与分析既有较强的理论性,也有较强的实践性。算法设计与分析的实验过程需要完成课程学习过程各种算法的设计和实现,以达到提高教学效果,增强学生实践动手能力的目标。 用分治法,设计解决二分查找程序的实现问题的一个简捷的算法。通过解决二分查找程序的实现问题,初步学习分治策略。 二、设计要求 给定已按升序排好序的n个元素a[0:n-1],现要在这n 个元素中找出一特定元素x。实现二分搜索的递归程序并进行跟踪分析其执行过程。 用顺序搜索方法时,逐个比较a[0:n-1]中的元素,直至找出元素x,或搜索遍整个数组后确定x不在其中。这个方

法没有很好的利用n个元素已排好序这个条件,因此在最坏情况下,顺序搜索方法需要o(n)次比较。要求二分法的时间复杂度小于o(n)。 三、设计说明(一)、需求分析 二分搜索方法充分利用了元素间的次序关系,采用分治策略,可在最坏情况下用o(logn)时间完成搜索任务。 该算法的流程图如下: (二)、概要设计 二分查(:二分搜索实验报告)找的基本思路是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果 x=a[n/2],则找到x,算法终止;如果xa[n/2],则只要在数组a的右半部分继续搜索x。 由于二分查找的数组不一定是一个整数数组,所以我采用了c++中的模板函数,将排序函数sort和二分查找函数binarysort写为了模板函数,这样不尽可以查找整数数组,也可以查找小数数组。 由于查找的数组的长度不固定,所以我用了c语言中的malloc和realloc函数,首先定义一个数组指针,用malloc 函数该它分配空间,然后向数组中存数,当数组空间满时,在用realloc函数为数组再次分配空间。由于在随机输入一组数时不知在什么位置停止,所以 篇二:二分搜索实验报告

人工智能实验报告

人工智能实验报告 标准化文件发布号:(9312-EUATWW-MWUB-WUNN-INNUL-DQQTY-

****大学 人工智能基础课程实验报告 (2011-2012学年第一学期) 启发式搜索王浩算法 班级: *********** 学号: ********** 姓名: ****** 指导教师: ****** 成绩: 2012年 1 月 10 日

实验一 启发式搜索算法 1. 实验内容: 使用启发式搜索算法求解8数码问题。 ⑴ 编制程序实现求解8数码问题A *算法,采用估价函数 ()()()() w n f n d n p n ??=+???, 其中:()d n 是搜索树中结点n 的深度;()w n 为结点n 的数据库中错放的棋子个数;() p n 为结点n 的数据库中每个棋子与其目标位置之间的距离总和。 ⑵ 分析上述⑴中两种估价函数求解8数码问题的效率差别,给出一个是()p n 的上界的()h n 的定义,并测试使用该估价函数是否使算法失去可采纳性。 2. 实验目的 熟练掌握启发式搜索A *算法及其可采纳性。 3. 实验原理 使用启发式信息知道搜索过程,可以在较大的程度上提高搜索算法的时间效率和空间效率; 启发式搜索的效率在于启发式函数的优劣,在启发式函数构造不好的情况下,甚至在存在解的情形下也可能导致解丢失的现象或者找不到最优解,所以构造一个优秀的启发式函数是前提条件。 4.实验内容 1.问题描述 在一个3*3的九宫格 里有1至8 八个数以及一个空格随机摆放在格子中,如下图: 初始状态 目标状态 现需将图一转化为图二的目标状态,调整的规则为:每次只能将空格与其相邻的 一个数字进行交换。实质是要求给出一个合法的移动步骤,实现从初始状态到目标状态的转变。 2.算法分析 (1)解存在性的讨论

查找表实验报告

河北科技大学 实验报告 16级计算机科学与技术专业班学号 2019年5月21日姓名教师白云飞 实验名称查找表操作成绩 实验类型设计型实验批阅教师白云飞 一、实验目的 1.掌握查找表的基本概念。 2.掌握静态查找表(顺序查找、折半查找)的存储和算法实现。 3.掌握动态查找表(二叉排序树)的存储和算法实现。 二、实验内容 1.给出静态查找表的顺序存储结构描述。 2.实现顺序查找和折半查找操作。 3.给出二叉排序树的二叉链式存储结构描述。 4.实现二叉排序树的初始化、插入、删除、查找、清空等操作。 5.编写主程序实现对这些运算的测试。 三、实验环境 硬件:CPU I 5 内存4GB,硬盘512GB 操作系统:Windows XP 软件编程环境:VC++6.0 四、实验步骤 1.用VC建立一个控制台应用程序,命名为Search。 2.新建一个头文件,命名为datastru.h,包含标示符常量的定义和Status类型定义。 3.新建一个头文件,命名为Search.h,包含查找表的存储类型描述和基本运算的声明。4.新建一个程序文件,命名为Search.cpp,包含查找表基本运算的实现和复杂运算的实现。5.新建一个主程序文件,命名为SearchMain.cpp,包含对这些运算的测试。 五、程序源代码(对复杂的设计思想描述要有较详细的注释) 1.头文件datastru.h内容。 #define TRUE 1 #define FALSE 0 #define OK 1

#define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status ; 2.头文件Search.h内容。 …… 3.程序文件Search.cpp内容。 ……. 4.主程序文件SearchMain.cpp实现。 //设计测试程序 …… 六、实验数据、结果分析 (描述最终得到的结果,并进行分析说明) 既要有正确数据的测试也要有异常数据的测试。 七、结论体会 (说明实验过程中遇到的问题及解决办法;个人的收获;未解决的问题等)

SEO实训报告

实训报告(2014 -2015学年度第一学期) 项目名称:《搜索引擎优化与营销》 指导教师: 实训类型: 学生姓名: 学生学号: 班级: 实训时间:2014年12月8日—12日实训地点:电子商务实训室 实训作品:目标网站搜索引擎优化建议 信息管理系监制

文轩网网站SEO优化方案 一、实训项目介绍 文轩在线是新华文轩出版传媒股份有限公司(简称"新华文轩")的控股子公司。新华文轩是我国第一家按照上市公司标准组建的股份制出版发行企业。2007年,在香港联合交易所主板(H股)上市,成为国内首家在港上市的出版发行企业。文轩网作为新华文轩推出的电子商务品牌,现已成为文轩自零售、中盘、定制之后的第四销售渠道。文轩网已拥有注册会员四百万余;常备图书品种超过70万种;开辟了包括淘宝、拍拍、新浪、乐酷天等国内外知名网站在内的多家网络连锁渠道;连续3年销售规模增长率逾200%。目前,文轩网月独立IP访问过千万,月均点击率超过10亿次,是国内少数几家网上零售规模上亿的企业之一。 二、任务内容 1、准备工作 ①团队建设

2、项目要求 一选择目标分析网站,确定竞争对手 二对强劲竞争对手的网站结构和页面优化分析 三目标网站关键词的研究 四目标网站的优化建议 3、项目规划 经过组员毛遂自荐,和对自己能力分析做出如下规划

4、项目实施过程 一.选择目标分析网站,确定竞争对手 <1>目标网站信息 通过百度搜索新华书店查找到文轩网这个网站。基于从小去新华书店买图书,决定对这个网站进行分析。 ①目标网站的基本信息

<2>竞争对手分析 通过对各种搜索引擎进行交叉比对。查找出文轩网做大需要面对的5个竞争对手 ①竞争对手网站 ②竞争对手网站基本信息

搜索引擎-第二次实验报告

实验二:实验 一、实验目的: 根据网络爬虫的基本原理,实现一个简易网络爬虫,需要达到以下指标: 1、种子URL为https://www.360docs.net/doc/403943253.html,; 2、至少抓取10000个页面; 3、至少完成3轮抓取,每轮给出更新的URL及其数量; 4、实现URL判重,列出每轮爬去时重复的URL数量; 5、数据存放到数据库中,能抽取出网页中的标题、页面生成日期(http协议中的时间),至少包含标题、时间、url、抓取时间、网页正文这几个字段。 二、实验方案: 1.爬虫分析与设计 我们组应用的是java来写爬虫,我们应用SSM框架将数据库和应用程序连接起来,可以在程序中更简单的进行数据库插入、查询等操作。 在对url处理的时候我们用的是Java的URL类,通过这个类可以获得请 求头的一些信息,例如编码方式。 如何获取url,我们一开始遇到了一些问题,直接解析网页中的ref 标签的时候得到的不全是网页链接,所以转换思路,我们先得到页面中 的标签,然后再得到标签里边href中的url,然后再对url进行处 理。 在处理url的时候,因为网页中的url并不是全部以http开头的,所以在url获取部分,对url的格式进行判断,如果通常格式就进行修改,例如,有的链接是”#”,我们就把开始搜索的url加到它的前边,形成一 个正确的url。

图1:应用URL类获取网页内容 图2:利用url请求头获取编码信息 图3:获取a标签

图4-1:获取url 图4-2:获取url

图5:url判重 2.数据库分析与设计 我们设计了两个表,一个是未爬取url表,两一个是已经爬取url表。 未爬取的表中村的是搜索判重之后,还没有爬取的url,已爬取的存储爬取到的信息。 图6:判重后需要爬取的url表 图7:爬取后url信息存储表

631306050123黄嘉城+谓词演算+启发式搜索

重庆交通大学计算机与信息学院验证性实验报告 班级:计软专业 13 级 1 班 学号: 631306050123 姓名:黄嘉城 实验项目名称:谓词演算 实验项目性质:验证性实验 实验所属课程:人工智能 实验室(中心):软件中心实验室(语音楼8楼)指导教师:朱振国 实验完成时间: 2016 年 6 月 10 日

一、实验目的 理解和掌握谓词演算 二、实验内容及要求 在一个空房间中,机器人将A桌子上的盒子搬移到B桌子上,用选定的编程语言编写程序,演示谓词演算过程。 三、实验设备及软件 visual studio 四、设计方案 ㈠题目 机器人搬盒子 ㈡设计的主要思路 设在房内c处有一个机器人,在a及b处各有一张桌子, a桌上有一个盒子。为了让机器人从c处出发把盒子从a处 拿到b处的桌上,然后再回到c处,需要制订相应的行动规划。 现在用一阶谓词逻辑来描述机器人的行动过程。 ㈢主要功能 实现机器人搬盒子移动 五、主要代码 #include "stdio.h"

//定义初始状态 char state[10][20]={"AT(robot,c)","EMPTY(robot)", "ON(box,a)","TABLE(a)","TABLE(b)"}; //定义目标状态 char end_state[5][20]={"AT(robot,c)","EMPTY(robot)", "ON(box,b)","TABLE(a)","TABLE(b)"}; int state_num=5; int number;//记录某字符串在总数据库中的位置 bool IsInState(char *S1) /*判断字符串(状态)是否在总数据库中*/ { int i,j; bool flag; //printf("S1:%s\n state[0]: %s state[1]: %s\n",S1,state[0],state[1]); //printf("%d\n",state_num); for(i=0;i

搜索引擎营销实训报告Violet

`` 评 语 Comment 教师签字 日期 Signature of Tutor______________Date:_______ 成绩 Score 学时 Time 2学时 小组名称 No. Violet 58.56.41.36 项目名称 Item 搜索引擎营销实训 课程名称 Course 网络营销实务 教材 Textbook 网络营销教程 1、举例说明(百度、GOOGLE 、搜狐任选其一)利用搜索引擎开展关键字推广的基本步骤; 2、结合小组企业查找利用搜索引擎开展营销推广的 案例1个。 3、上网搜索利用搜索引擎做推广有哪些基本技巧 4、将小组公司网站到搜索引擎注册登记,截图; 5、上网观看搜索引擎营销视频,写出观感体会 6、到百度推广虚拟体验中心,体会百度推广过程 以1~5上以小组为单位完成实训报告,下课前交,第6题每人都做 。 1、 举例说明(百度、GOOGLE 、搜狐任选其一)利用搜索引擎开展关键字 推广的基本步骤; 第一步:将网站提交到百度。 第二步:到百度收录吧申请百度收录新站,留下网站名称、网站地址、及网站的简单介绍。 第三步:到百度知道提交一个与新站相关的问题,顺便带上新站的链接。 第四步:在百度百科创建一个与新站内容相关的词条,并在词条下面的相关新闻记者栏位加上新的链接。 第五步:将网站内的精彩文章推荐到天极网摘、天天网摘、POCO 网摘、和讯网摘等。 第六步:到A5、Chinaz 、门户通、落伍等知名的站长论坛或其它权重高的论坛、博客发布文章并带上网站的链接。 2、结合小组企业查找利用搜索引擎开展营销推广的 案例。 我们的公司名字:Violet 服装有限公司 Violet 以打造“魅力女神”为侧重点,让每个爱美的女性寻找最适合的,最独一无二的,最无与伦比的美。 网店标语:流行稍纵即逝,唯violet 风格永存。 网店宗旨:特别的爱,给特别的你。 以下是结合我们服装店的情况利用搜索引擎开展营销推广的 案例 案例:兰蔻——品牌、销售两不误 如若有消费者在百度搜索上敲下“兰蔻”两个字,搜索结果页面最上方不再是普通的文字链接,而是图文并茂深 圳 职 业 技 术 学 院 Shenzhen Polytechnic 项 目 实 训(验)报 告

实验一 二分搜索算法

实验一二分搜索算法 E08620311-方凯-08计算机(3)班 一.实验目的: 1、理解分治算法的概念和基本要素; 2、理解递归的概念; 3、掌握设计有效算法的分治策略; 4、通过二分搜索技术学习分治策略设计技巧; 二.实验内容及要求: 1.使用二分搜索算法查找任意N个有序数列中的指定元素。 2.通过上机实验进行算法实现。 3.保存和打印出程序的运行结果,并结合程序进行分析,上交实验报告。 4.至少使用两种方法进行编程。 二.实验原理: 二分搜索算法也称为折半查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。 【基本思想】将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x 作比较,如果x=a[n/2]则找到x,算法终止。如果xa[n/2],则我们只要在数组a的右半部继续搜索x。 二分搜索法的应用极其广泛,而且它的思想易于理解。第一个二分搜索算法早在1946年就出现了,但是第一个完全正确的二分搜索算法直到1962年才出现。Bentley在他的著作《Writing Correct Programs》中写道,90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。问题的关键在于准确地制定各次查找范围的边界以及终止条件的确定,正确地归纳奇偶数的各种情况,其实整理后可以发现它的具体算法是很直观的。 方法一:直接查找; 方法二:递归查找; 方法三:迭代查找;

四.程序代码: 方法1:直接查找 int BinarySearch(int a[],int x,int n){ int left=0;int right=n-1; while(left<=right){ int middle=(left+right)/2; if(x==a[middle])return middle; if(x>a[middle])left=middle+1; else right=middle-1; } return-1; } 方法2:递归查找 int BinarySearchDG(int a[],int x,int left,int right){ int middle=(left+right)/2; if(left<=right){ if(x==a[middle])return middle; if(x>a[middle])return BinarySearchDG(a,x,middle+1,right); else return BinarySearchDG(a,x,left,middle-1); } return-1; }

人工智能实验报告

计算机科学与技术1341901301 敏 实验一:知识表示方法 一、实验目的 状态空间表示法是人工智能领域最基本的知识表示方法之一,也是进一步学习状态空间搜索策略的基础,本实验通过牧师与野人渡河的问题,强化学生对知识表示的了解和应用,为人工智能后续环节的课程奠定基础。 二、问题描述 有n个牧师和n个野人准备渡河,但只有一条能容纳c个人的小船,为了防止野人侵犯牧师,要求无论在何处,牧师的人数不得少于野人的人数(除非牧师人数为0),且假定野人与牧师都会划船,试设计一个算法,确定他们能否渡过河去,若能,则给出小船来回次数最少的最佳方案。 三、基本要求 输入:牧师人数(即野人人数):n;小船一次最多载人量:c。 输出:若问题无解,则显示Failed,否则,显示Successed输出一组最佳方案。用三元组(X1, X2, X3)表示渡河过程中的状态。并用箭头连接相邻状态以表示迁移过程:初始状态->中间状态->目标状态。 例:当输入n=2,c=2时,输出:221->110->211->010->021->000 其中:X1表示起始岸上的牧师人数;X2表示起始岸上的野人人数;X3表示小船现在位置(1表示起始岸,0表示目的岸)。 要求:写出算法的设计思想和源程序,并以图形用户界面实现人机交互,进行输入和输出结果,如: Please input n: 2 Please input c: 2 Successed or Failed?: Successed Optimal Procedure: 221->110->211->010->021->000 四、算法描述 (1)算法基本思想的文字描述;

数据压缩实验报告

实验一常见压缩软件的使用 一、实验目的 使用一些常见的压缩软件,对数据压缩的概念、分类、技术和标准形成初步的认识和理解。 二、实验要求 1.认真阅读实验指导书,按实验步骤完成实验内容。 2.实验过程中注意思考实验提出的问题,并通过实验解释这些问题。 3.通过实验达到实验目的。 三、实验环境 计算机硬件:CPU处理速度1GHz以上,内存258M以上,硬盘10G以上 软件:Windows操作系统2000或XP。 四、实验内容 1.使用WinZip或WinRAR两种压缩软件分别对文本文件(.txt,.doc)、程序源代码文件(.c)、数据文件(.dat)、二进制目标代码文件(.obj)、图像文件(.bmp)、音频文件(.wav)和视频文件(.avi,.wmv)进行压缩,分别计算出压缩率,判断这两种压缩软件采用的是可逆压缩还是不可以压缩,猜测其可能用到了那些压缩(编码)技术? 2.使用jpegimager、TAK和BADAK分别进行图像、音频和视频的压缩,体验其压缩效果。3.使用bcl程序对文本文件、程序源代码文件、数据文件、二进制目标代码文件、图像文件等进行多种统计编码技术的压缩,包括香农-费诺(shannon-fano)编码、霍夫曼(huffman)编码、游程编码rle、字典编码lz等,记录每种压缩方法对不同类型文件的压缩效果并进行比较,结合所学知识,解释其中的原因。 五、实验步骤 1、下载并打开WinZip和WinRAR两种压缩软件 2、分别新建两个文档:qqjj.winzip 和winrar。添加所要压缩的文件:文本文件(.txt,.doc)、程序源代码文件(.c)、数据文件(.dat)、二进制目标代码文件(.obj)、图像文件(.bmp)、音频文件(.wav)和视频文件(.avi,.wmv)进行压缩,如图所示:

企业网站搜索引擎友好性分析实验报告

企业网站搜索引擎友好性分析实验报告 1.实验目的 了解搜索引擎营销对网络营销信息传递的作用,通过对部分选定网站搜索引擎进行友好性分析,深入研究网站建设的专业性对搜索引擎营销的影响,对于发现的问题,提出相应的改进建议。 2.实验内容和步骤 (1)从备选网站中选定一个企业网站; (2)浏览该网站并确认该网站最相关的2-3个核心关键词(比如主要产品名称、所在行业等); (3)用每个关键词分别在搜索引擎google和百度进行检索,了解该网站在搜索结果中的表现,如排名、网页标题和摘要信息内容等,同时记录 同一关键词检索结果中与被选企业同行的其他竞争者的排名和摘要信息情况; (4)根据有关信息分析被调查网站的搜索引擎友好性。 本实验备选网站网址 https://www.360docs.net/doc/403943253.html, https://www.360docs.net/doc/403943253.html, https://www.360docs.net/doc/403943253.html, https://www.360docs.net/doc/403943253.html, https://www.360docs.net/doc/403943253.html, https://www.360docs.net/doc/403943253.html, https://www.360docs.net/doc/403943253.html, https://www.360docs.net/doc/403943253.html, https://www.360docs.net/doc/403943253.html, https://www.360docs.net/doc/403943253.html, 3.实验报告 本次实验所选的网站是娃哈哈集团的https://www.360docs.net/doc/403943253.html,,并以GOOGLE,百度两个搜索引擎进行搜索。 杭州娃哈哈集团有限公司为中国最大的食品饮料生产企业,全球第五大饮料生产企业,仅次于可口可乐、百事可乐、吉百利、柯特这4家跨国公司主要生产含乳饮料、瓶装水、碳酸饮料、茶饮料、果汁饮料、罐头食品、医药保健品、休闲食品等八大类60多个品种的产品,其中瓶装水、含乳饮料、八宝粥罐头多年来产销量一直位居全国第一。进入该公司网页首先出现醒目的“娃哈哈”三个字,背景是传统的鮮紅色,配以简单的关键词和动态的产品图片介紹。通过浏览其网站后我觉得应该选用“饮料业”“饮用水”“乳品”作用核心关键词进行研究分析。 一,在GOOGLE搜索。

八数码问题人工智能实验报告

基于人工智能的状态空间搜索策略研究 ——八数码问题求解 (一)实验软件 TC2.0 或VC6.0编程语言或其它编程语言 (二)实验目的 1. 熟悉人工智能系统中的问题求解过程; 2. 熟悉状态空间的盲目搜索和启发式搜索算法的应用; 3. 熟悉对八数码问题的建模、求解及编程语言的应用。 (三)需要的预备知识 1. 熟悉TC 2.0或VC6.0 编程语言或者其它编程语言; 2. 熟悉状态空间的宽度优先搜索、深度优先搜索和启发式搜索算法; 3. 熟悉计算机语言对常用数据结构如链表、队列等的描述应用; 4. 熟悉计算机常用人机接口设计。 (四)实验数据及步骤 1. 实验内容 八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。 图1 八数码问题示意图 请任选一种盲目搜索算法(深度优先搜索或宽度优先搜索)或任选一种启发式搜索方法(A 算法或A* 算法)编程求解八数码问题(初始状态任选),并对实验结果进行分析,得出合理的结论。 2. 实验步骤 (1)分析算法基本原理和基本流程; 程序采用宽度优先搜索算法,基本流程如下:

(2)确定对问题描述的基本数据结构,如Open表和Closed表等;

(3)编写算符运算、目标比较等函数; (4)编写输入、输出接口; (5)全部模块联调; (6)撰写实验报告。 (五)实验报告要求 所撰写的实验报告必须包含以下内容: 1. 算法基本原理和流程框图; 2. 基本数据结构分析和实现; 3. 编写程序的各个子模块,按模块编写文档,含每个模块的建立时间、功能、输入输出参数意义和与其它模块联系等; 4. 程序运行结果,含使用的搜索算法及搜索路径等; 5. 实验结果分析; 6. 结论; 7. 提供全部源程序及软件的可执行程序。 附:实验报告格式 一、实验问题 二、实验目的 三、实验原理 四、程序框图 五、实验结果及分析 六、结论

查找与排序实验报告

实验四:查找与排序 【实验目的】 1.掌握顺序查找算法的实现。 2.掌握折半查找算法的实现。 【实验内容】 1.编写顺序查找程序,对以下数据查找37所在的位置。 5,13,19,21,37,56,64,75,80,88,92 2.编写折半查找程序,对以下数据查找37所在的位置。 5,13,19,21,37,56,64,75,80,88,92 【实验步骤】 1.打开VC++。 2.建立工程:点File->New,选Project标签,在列表中选Win32 Console Application,再在右边的框里为工程起好名字,选好路径,点OK->finish。 至此工程建立完毕。 3.创建源文件或头文件:点File->New,选File标签,在列表里选C++ Source File。给文件起好名字,选好路径,点OK。至此一个源文件就被添加到了你刚创建的工程之中。 4.写好代码 5.编译->链接->调试 #include "stdio.h" #include "malloc.h" #define OVERFLOW -1 #define OK 1 #define MAXNUM 100 typedef int Elemtype; typedef int Status; typedef struct {

Elemtype *elem; int length; }SSTable; Status InitList(SSTable &ST ) { int i,n; ST.elem = (Elemtype*) malloc (MAXNUM*sizeof (Elemtype)); if (!ST.elem) return(OVERFLOW); printf("输入元素个数和各元素的值:"); scanf("%d\n",&n); for(i=1;i<=n;i++) { scanf("%d",&ST.elem[i]); } ST.length = n; return OK; } int Seq_Search(SSTable ST,Elemtype key) { int i; ST.elem[0]=key; for(i=ST.length;ST.elem[i]!=key;--i); return i; } int BinarySearch(SSTable ST,Elemtype key) { int low,high,mid; low=1; high=ST.length;

网络营销上机实验报告

实验一 实验日期:星期四56 第1次实验 实验名称:企业网站专业性诊断评价 实验目的:加深对网络营销导向的企业网站的认识,利用所学知识对对网站专业性进行分析评价,记录评价过程中发现的主要问题,并提出相应的改进建议。 实验内容:企业网站专业性诊断评价 实验步骤: 我选择对杉杉的企业网站进行网页诊断和分析郑永刚领军的杉杉投资控股(集团)有限公司(下简称杉杉控股),是以资本为纽带的大型企业集群。杉杉控股2008年销售额达116亿,资产总额超过100亿,产业涉及时尚产业、新能源新材料、投资、园区开发、国际贸易五大板块,旗下拥有杉杉股份和中科英华两家上市公司。2002年以来杉杉控股连续入选中国企业500强。2009年杉杉集团与伊藤忠商社实现全面合资合作,双方在管理、品牌、技术、国际化等多方面展开紧密对接,杉杉进入一个新的发展时期。 我觉得该网站的优点有: 1、首先该网站下载速度还比较快,我在10秒内打开了该企业网站。 2、通过最多3次点击,可以通过首页到达任何一个页面内容 这是第一个页面(首页)

这是第二个页面 这是第三个页面

还可以通过任何一个页面到达站内的其他任何网站,比如,我现在所在的页面是一个三级页面,可以到达其他任何一个页面。如下图。 3、公司介绍还比较详细,有企业的具体联系方式。

4、网站可以稳定运行,访问速度挺快。这从我诊断该网站的过程中可以了解到。 5、为用户提供站内搜索、多种语言等在线服务手段。

6、用户关心的信息可以在网站首页直接找到。 我觉得该网站的缺点有: 1、网站首页、各栏目首页以及各个内容页面没有能反映网页核心内容的网页标题,整个网站几乎都用一个网页标题,各网页标题几乎都是“杉杉控股”,除了一级栏目“校园招聘”下的网页标题是“[杉杉投资2011校园招聘]杉杉投资前程无忧官方校园招聘网”外。

二分搜索实验报告

二分搜索 一.实验目的: 1.理解算法设计的基本步骤及各步的主要内容、基本要求; 2.加深对分治设计方法基本思想的理解,并利用其解决现实生活中的问题; 3.通过本次实验初步掌握将算法转化为计算机上机程序的方法。 二.实验内容: 1.编写实现算法:给定n个元素,在这n个元素中找到值为key的元素。 2.将输入的数据存储到指定的文本文件中,而输出数据存放到另一个文本文件中,包括结果和具体的运行时间。 3.对实验结果进行分析。 三.实验操作: 1.二分搜索的思想: 首先,假设表中的元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复上述过程,知道找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 由于二分搜索是基于有序序列的一种搜索算法,故将输入的一组数据首先进行排序,考虑到输入数据可能有多个,采用快速排或者是合并排序,其中与冒泡做了对比。 冒泡排序算法: void sort(int List[],int length){ int change; for(int i=0;iList[j]){ change=List[i]; List[i]=List[j]; List[j]=change; } } } 快速排序算法: void Qsort(int List[],int low,int high){ if(low>=high) return; int first=low; int last=high; int key=List[first]; while(first=key) --last; List[first]=List[last]; while(first

人工智能实验报告

人工智能实验报告 实验一 在搜索策略实验群 实验目的 熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N 数码难题,理解求解流 程和搜索顺序。 搜索图 算法比较 广度优先 深度优先 A* Open 表 节点G ,节点10 节点G ,节点6 节点3,节点9,节点G ,节点 10,节点8 Close 表 节点s ,节点1,节点2,节点3,节点4,节点5,节点6,节点7,节点8,节点9 节点s,节点1,节点3,节点7, 节点4,节点8,节点2,节点5, 节点9 节点s ,节点2,节点1,节点 5,节点6,节点4 估价函数 无 无 )()()(n h n g n f += 搜索节点次序 记录 节点s ,节点1,节点2,节点3,节点4,节点5,节点6,节点7,节点8,节点9,节点G 节点s,节点1,节点3,节点7, 节点4,节点8,节点2,节点5, 节点9,节点G 节点s ,节点2,节点1,节点 5,节点6,节点4,节点G 观测结果 经过11步搜索得到目标节点 经过10步搜索得到目标节点 经过7步搜索得到目标节点 学生结论 宽度优先搜索能保证在搜索树 深度优先搜索要沿路径一条一 A*算法是启发式算法的一

中找到一条通向目标节点的最短路径,但由于盲目性大所以当搜索数据比较多的时候该方法较为 费时。条的走到底,如果目标在前几条 路径中那么该搜索会较为快捷, 在本搜索树中虽然比宽度优先少 一步,但是若第一条路径或者某 几条路径很深,则该搜索会相当 耗时且不能保证成功。 种能通过路径的权值找出代价 最为小的一条,所以很具优越 性,但是算法本身计算较为复 杂,要考虑以前的和将来两方 面的代价,进行估算,所以没 有前两种方法简单。

《数据结构》实验报告查找

实验四——查找 一、实验目的 1.掌握顺序表的查找方法,尤其是折半查找方法; 2.掌握二叉排序树的查找算法。 二、实验内容 1.建立一个顺序表,用顺序查找的方法对其实施查找; 2.建立一个有序表,用折半查找的方法对其实施查找; 3.建立一个二叉排序树,根据给定值对其实施查找; 4.对同一组数据,试用三种方法查找某一相同数据,并尝试进行性能分析。 三、实验预习内容 实验一包括的函数有:typedef struct ,创建函数void create(seqlist & L),输出函数void print(seqlist L),顺序查找int find(seqlist L,int number),折半查找int halffind(seqlist L,int number) 主函数main(). 实验二包括的函数有:结构体typedef struct,插入函数void insert(bnode * & T,bnode * S),void insert1(bnode * & T),创建函数void create(bnode * & T),查找函数bnode * search(bnode * T,int number),主函数main(). 四、上机实验 实验一: 1.实验源程序。 #include<> #define N 80 typedef struct { int number; umber; for(i=1;[i].number!=0;) { cin>>[i].name>>[i].sex>>[i].age; ++; cout<>[++i].number; } } umber<<"\t"<<[i].name<<"\t"<<[i].sex<<"\t"<<[i].age<

相关文档
最新文档