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

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

实验名称:启发式搜索算法

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)

其中A*算法中的g(n)根据具体情况设计为d(n),意为n节点的深度,而h(n)设计为p(n),意为放错的数码与正确的位置距离之和。

由于实际情况中,一个将牌的移动都是单步进行的,没有交换拍等这样的操作。所以要把所有的不在位的将牌,移动到各自的目标位置上,至少要移动从他们各自的位置到目标位置的距离和这么多次,所以最有路径的耗散值不会比该值小,因此该启发函数h(n)满足A*算法的条件。

3.2代码

#include

#include

#include

//八数码状态对应的节点结构体

struct Node{

int s[3][3];//保存八数码状态,0代表空格

int f,g;//启发函数中的f和g值

struct Node * next;

struct Node *previous;//保存其父节点

};

int open_N=0; //记录Open列表中节点数目

//八数码初始状态

int inital_s[3][3]={

2,8,3,

1,6,4,

7,0,5

};

//八数码目标状态

int final_s[3][3]={

1,2,3,

8,0,4,

7,6,5

};

//------------------------------------------------------------------------

//添加节点函数入口,方法:通过插入排序向指定表添加

//------------------------------------------------------------------------

void Add_Node( struct Node *head, struct Node *p)

{

struct Node *q;

if(head->next)//考虑链表为空

{ q = head->next;

if(p->f < head->next->f){//考虑插入的节点值比链表的第一个节点值小

p->next = head->next;

head->next = p;

}

else {

while(q->next)//考虑插入节点x,形如a<= x <=b

{

if((q->f < p->f ||q->f == p->f) && (q->next->f > p->f || q->next->f == p->f)){ p->next = q->next;

q->next = p;

break;

}

q = q->next;

}

if(q->next == NULL) //考虑插入的节点值比链表最后一个元素的值更大q->next = p;

}

}

else head->next = p;

}

//------------------------------------------------------------------------

//删除节点函数入口

//------------------------------------------------------------------------

void del_Node(struct Node * head, struct Node *p )

{

struct Node *q;

q = head;

while(q->next)

{

if(q->next == p){

q->next = p->next;

p->next = NULL;

if(q->next == NULL) return;

// free(p);

}

q = q->next;

}

}

//------------------------------------------------------------------------

//判断两个数组是否相等函数入口

//------------------------------------------------------------------------

int equal(int s1[3][3], int s2[3][3])

{

int i,j,flag=0;

for(i=0; i< 3 ; i++)

for(j=0; j< 3 ;j++)

if(s1[i][j] != s2[i][j]){flag = 1; break;}

if(!flag)

return 1;

else return 0;

}

//------------------------------------------------------------------------

//判断后继节点是否存在于Open或Closed表中函数入口

//------------------------------------------------------------------------

int exit_Node(struct Node * head,int s[3][3], struct Node *Old_Node) {

struct Node *q=head->next;

int flag = 0;

while(q)

if(equal(q->s,s)) {

flag=1;

Old_Node->next = q;

return 1;}

else q = q->next;

if(!flag) return 0;

}

//------------------------------------------------------------------------

//计算p(n)的函数入口

//其中p(n)为放错位的数码与其正确的位置之间距离之和

//具体方法:放错位的数码与其正确的位置对应下标差的绝对值之和//------------------------------------------------------------------------

int wrong_sum(int s[3][3])

{

int i,j,fi,fj,sum=0;

for(i=0 ; i<3; i++)

for(j=0; j<3; j++)

{

for(fi=0; fi<3; fi++)

for(fj=0; fj<3; fj++)

if((final_s[fi][fj] == s[i][j])){

sum += fabs(i - fi) + fabs(j - fj);

break;

}

}

return sum;

}

//------------------------------------------------------------------------

//获取后继结点函数入口

//检查空格每种移动的合法性,如果合法则移动空格得到后继结点

//------------------------------------------------------------------------

int get_successor(struct Node * BESTNODE, int direction, struct Node *Successor)//扩展BESTNODE,产生其后继结点SUCCESSOR

{

int i,j,i_0,j_0,temp;

for(i=0; i<3; i++)

for(j=0; j<3; j++)

Successor->s[i][j] = BESTNODE->s[i][j];

//获取空格所在位置

for(i=0; i<3; i++)

for(j=0; j<3; j++)

if(BESTNODE->s[i][j] == 0){i_0 = i; j_0 = j;break;}

switch(direction)

{

case 0: if((i_0-1)>-1 ){

temp = Successor->s[i_0][j_0];

Successor->s[i_0][j_0] = Successor->s[i_0-1][j_0];

Successor->s[i_0-1][j_0] = temp;

return 1;

}

else return 0;

case 1: if((j_0-1)>-1){

temp = Successor->s[i_0][j_0];

Successor->s[i_0][j_0] = Successor->s[i_0][j_0-1];

Successor->s[i_0][j_0-1] = temp;

return 1;

}

else return 0;

case 2: if( (j_0+1)<3){

temp = Successor->s[i_0][j_0];

Successor->s[i_0][j_0] = Successor->s[i_0][j_0+1];

Successor->s[i_0][j_0+1] = temp;

return 1;

}

else return 0;

case 3: if((i_0+1)<3 ){

temp = Successor->s[i_0][j_0];

Successor->s[i_0][j_0] = Successor->s[i_0+1][j_0];

Successor->s[i_0+1][j_0] = temp;

return 1;

}

else return 0;

}

}

//------------------------------------------------------------------------

//从OPen表获取最佳节点函数入口

//------------------------------------------------------------------------

struct Node * get_BESTNODE(struct Node *Open)

{

return Open->next;

}

//------------------------------------------------------------------------

//输出最佳路径函数入口

//------------------------------------------------------------------------

void print_Path(struct Node * head)

{

struct Node *q, *q1,*p;

int i,j,count=1;

p = (struct Node *)malloc(sizeof(struct Node));

//通过头插法变更节点输出次序

p->previous = NULL;

q = head;

while(q)

{

q1 = q->previous;

q->previous = p->previous;

p->previous = q;

q = q1;

}

q = p->previous;

while(q)

{

if(q == p->previous)printf("八数码的初始状态:\n");

else if(q->previous == NULL)printf("八数码的目标状态:\n");

else printf("八数码的中间态%d\n",count++);

for(i=0; i<3; i++)

for(j=0; j<3; j++)

{

printf("%4d",q->s[i][j]);

if(j == 2)printf("\n");

}

printf("f=%d, g=%d\n\n",q->f,q->g);

q = q->previous;

}

}

//------------------------------------------------------------------------

//A*子算法入口:处理后继结点

//------------------------------------------------------------------------

void sub_A_algorithm(struct Node * Open, struct Node * BESTNODE, struct Node * Closed,struct Node *Successor)

{

struct Node * Old_Node = (struct Node *)malloc(sizeof(struct Node));

Successor->previous = BESTNODE;//建立从successor返回BESTNODE的指针

Successor->g = BESTNODE->g + 1;//计算后继结点的g值

//检查后继结点是否已存在于Open和Closed表中,如果存在:该节点记为old_Node,比较后继结点的g值和表中old_Node节点

//g值,前者小代表新的路径比老路径更好,将Old_Node的父节点改为BESTNODE,并修改其f,g值,后者小则什么也不做。

//即不存在Open也不存在Closed表则将其加入OPen表,并计算其f值

if( exit_Node(Open, Successor->s, Old_Node) ){

if(Successor->g < Old_Node->g){

Old_Node->next->previous = BESTNODE;//将Old_Node的父节点改为BESTNODE

Old_Node->next->g = Successor->g;//修改g值

Old_Node->next->f = Old_Node->g + wrong_sum(Old_Node->s);//修改f值

//排序~~~~~~~~~~~~~~~~~~

del_Node(Open, Old_Node);

Add_Node(Open, Old_Node);

}

}

else if( exit_Node(Closed, Successor->s, Old_Node)){

if(Successor->g < Old_Node->g){

Old_Node->next->previous = BESTNODE;

Old_Node->next->g = Successor->g;

Old_Node->next->f = Old_Node->g + wrong_sum(Old_Node->s);

//排序~~~~~~~~~~~~~~~~~~

del_Node(Closed, Old_Node);

Add_Node(Closed, Old_Node);

}

}

else {

Successor->f = Successor->g + wrong_sum(Successor->s);

Add_Node(Open, Successor);

open_N++;

}

}

//------------------------------------------------------------------------

//A*算法入口

//八数码问题的启发函数为:f(n)=d(n)+p(n)

//其中A*算法中的g(n)根据具体情况设计为d(n),意为n节点的深度,而h(n)设计为p(n),//意为放错的数码与正确的位置距离之和

//------------------------------------------------------------------------

void A_algorithm(struct Node * Open, struct Node * Closed) //A*算法

{

int i,j;

struct Node * BESTNODE, *inital, * Successor;

inital = (struct Node * )malloc(sizeof(struct Node));

//初始化起始节点

for(i=0; i<3; i++)

for(j=0; j<3; j++)

inital->s[i][j] = inital_s[i][j];

inital->f = wrong_sum(inital_s);

inital->g = 0;

inital->previous = NULL;

inital->next = NULL;

Add_Node(Open, inital);//把初始节点放入OPEN表

open_N++;

while(1)

{

if(open_N == 0){printf("failure!"); return;}

else {

BESTNODE = get_BESTNODE(Open);//从OPEN表获取f值最小的BESTNODE,将其从OPEN表删除并加入CLOSED表中

del_Node(Open, BESTNODE);

open_N--;

Add_Node(Closed, BESTNODE);

if(equal(BESTNODE->s, final_s)) {//判断BESTNODE是否为目标节点

printf("success!\n");

print_Path(BESTNODE);

return;

}

//针对八数码问题,后继结点Successor的扩展方法:空格(二维数组中的0)上下左右移动,

//判断每种移动的有效性,有效则转向A*子算法处理后继节点,否则进行下一种移动

else{

Successor = (struct Node * )malloc(sizeof(struct Node)); Successor->next = NULL;

if(get_successor(BESTNODE, 0, Successor))sub_A_algorithm( Open, BESTNODE, Closed, Successor);

Successor = (struct Node * )malloc(sizeof(struct Node)); Successor->next = NULL;

if(get_successor(BESTNODE, 1, Successor))sub_A_algorithm( Open, BESTNODE, Closed, Successor);

Successor = (struct Node * )malloc(sizeof(struct Node)); Successor->next = NULL;

if(get_successor(BESTNODE, 2, Successor))sub_A_algorithm( Open, BESTNODE, Closed, Successor);

Successor = (struct Node * )malloc(sizeof(struct Node)); Successor->next = NULL;

if(get_successor(BESTNODE, 3, Successor))sub_A_algorithm( Open, BESTNODE, Closed, Successor);

}

}

}

}

//------------------------------------------------------------------------

//main()函数入口

//定义Open和Closed列表。Open列表:保存待检查节点。Closed列表:保存不需要再检查的节点

//------------------------------------------------------------------------

void main()

{

struct Node * Open = (struct Node * )malloc(sizeof(struct Node));

struct Node * Closed = (struct Node * )malloc(sizeof(struct Node));

Open->next = NULL ; Open->previous = NULL;

Closed->next =NULL; Closed->previous = NULL;

A_algorithm(Open, Closed);

}

4、实验步骤

4.1输入:初始状态为

2 8 3

1 6 4

7 5

4.2输出:

1 2 3

8 4

7 6 5

4.3 实验截图

5、讨论和分析

对实验结果进行分析讨论。

通过本次的试验,我对启发式搜索算法有了更加深入地了解。在实验中,通过对两种启发式搜索所扩在的节点数来看,p(n)看来比w(n)更加有成效,能在复杂的情况下求得更加优质的解,避免不必要的节点的扩展。但是对于估价函数h*(n)来说,他的定义趋于多元化,p(n)只是他的一个比较好的特例,对于一些复杂的搜索问题,如国际象棋问题,他就显得特别的简单。所以要更好的定义一个估价函数还有待讨论。

在进行实验探究时,我还遇到一些问题,在低阶数码问题中,使用简单的宽搜或深搜便可以解决。但是在实验过程中,仍遇到很多的问题,这让我意识到自己对该算法的认识还不够充足,还要更加的努力。

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

实验名称:启发式搜索算法 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)

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

实验二:实验 一、实验目的: 根据网络爬虫的基本原理,实现一个简易网络爬虫,需要达到以下指标: 1、种子URL为https://www.360docs.net/doc/078039622.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信息存储表

插入排序算法实验报告

算法设计与分析基础 实验报告 应用数学学院 二零一六年六月

实验一插入排序算法 一、实验性质设计 二、实验学时14学时 三、实验目的 1、掌握插入排序的方法和原理。 2、掌握java语言实现该算法的一般流程。 四、实验内容 1、数组的输入。 2、输入、输出的异常处理。 3、插入排序的算法流程。 4、运行结果的输出。 五、实验报告 Ⅰ、算法原理 从左到右扫描有序的子数组,直到遇到一个大于(或小于)等于A[n-1]的元素,然后就把A[n-1]插在该元素的前面(或后面)。 插入排序基于递归思想。 Ⅱ、书中源代码 算法InsertionSort(A[0..n-1]) //用插入排序对给定数组A[0..n-1]排序 //输入:n个可排序元素构成的一个数组A[0..n-1] //输出:非降序排列的数组A[0..n-1] for i ←1 to n-1 do v ← A[i] j ← i-1 while j ≥0and A[j] > v do A[j+1] ← A[j] j ← j-1 A[j+1] ← v

Ⅲ、Java算法代码: import java.util.*; public class Charu { public static void main(String[] args) { int n = 5; int a[] = new int[n]; int s = a.length; int i = 0, j = 0, v = 0; System.out.println("请输入若干个数字:"); Scanner sc = new Scanner(System.in); try { while (i < s) { a[i] = sc.nextInt(); i++; } for (i = 1; i = 0 && a[j] > v) { a[j + 1] = a[j]; j--; } a[j + 1] = v; } System.out.println("插入排序结果显示:"); for (i = 0; i < s; i++) { System.out.println(a[i]); } } catch (Exception es) { System.out.println(es); } } } Ⅳ、运行结果显示:

二分搜索实验报告

竭诚为您提供优质文档/双击可除 二分搜索实验报告 篇一:算法设计与分析二分查找实验报告 课程设计说明书 设计题目:二分查找程序的实现 专业:班级: 设计人: 山东科技大学年月日 课程设计任务书 学院:信息科学与工程学院专业:班级:姓名: 一、课程设计题目:二分查找程序的实现二、课程设计主要参考资料 (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)解存在性的讨论

搜索引擎营销实验报告

搜索引擎营销实验报告 实验概述: 【实验目的及要求】了解关于搜索引擎的基本知识以及与其实际应用的搜索引擎广告营销与当前各网站的网站策略。 【实验原理】通过网上实际操作与搜索加强学生对现实搜索引擎营销情况的了解 【实验环境】各主要搜索引擎 实验内容: 【实验方案设计】通过对各搜索引擎的使用体验来增强学生关于搜索引擎营销的基本知识与各引擎广告策略的不同之处 【实验过程】 实验一:了解常见的搜索引擎和类别的基本形式 1.全文搜索引擎和目录索引引擎的区别是什么? 下表由几个角度比较了全文搜索引擎与目录索引的不同点: 实验二:了解百度的广告策略 1.竞价排名的含义 竞价排名的基本特点是按点击付费,推广信息出现在搜索结果中(一般是靠前的位置),如果没有被用户点击,则不收取推广费。 2.对“鲜花”查询竞价 竞价排名显示:

经查询显示排在第一位的是一家名叫“精品鲜花”的门户网站。 自然排名显示: 3.思考讨论:百度的广告策略如何策划的。谈谈你的看法。 百度是通过竞价排名来实现广告策划的。从企业的角度来说,企业可以根据自己的财务预算来进行广告竞价投放。从百度的角度来说,能以量化的形式衡量各搜索结果的排序而获得盈利。而从顾客的角度来说,可能从排名中意外地获得一些所需的信息。 通过平时对百度搜索引擎的使用,其广告策略基本合理。 实验三:对比搜索引擎收录情况 1.对比各搜索引擎关键字的搜索情况 2.搜索西安到三原的距离 对“百度”与“谷歌”进行“西安到三原的距离”关键字搜索后,第一条出现的便是“西安到三原自驾车路线, 距离三原县公路里程44.8千米”成功地搜出两地距离。而“雅虎”搜索得手工从“雅虎地图”中搜出两地距离。 3. 各个搜索引擎对同类网站的收录情况是否相同?如果不相同,各个搜索引擎有什么特点? 各个搜索引擎对同类网站的收录情况不尽相同。百度与谷歌属于全文引擎搜索,其网页数据库的更新速度也不相同,但收录网页数与更新的速度是谷歌比百度更快,内容更丰富。而雅虎属于目录索引搜索引擎,其网站专业分类性较强,虽然信息收藏量比全文搜索引擎要少,但是其针对性更强,找到的信息会更细致。

《数据结构》实验报告——排序.docx

《数据结构》实验报告排序实验题目: 输入十个数,从插入排序,快速排序,选择排序三类算法中各选一种编程实现。 实验所使用的数据结构内容及编程思路: 1. 插入排序:直接插入排序的基本操作是,将一个记录到已排好序的有序表中,从而得到一个新的,记录增一得有序表。 一般情况下,第i 趟直接插入排序的操作为:在含有i-1 个记录的有序子序列r[1..i-1 ]中插入一个记录r[i ]后,变成含有i 个记录的有序子序列r[1..i ];并且,和顺序查找类似,为了在查找插入位置的过程中避免数组下标出界,在r [0]处设置哨兵。在自i-1 起往前搜索的过程中,可以同时后移记录。整个排序过程为进行n-1 趟插入,即:先将序列中的第一个记录看成是一个有序的子序列,然后从第2 个记录起逐个进行插入,直至整个序列变成按关键字非递减有序序列为止。 2. 快速排序:基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 假设待排序的序列为{L.r[s] ,L.r[s+1],…L.r[t]}, 首先任意选取一个记录 (通常可选第一个记录L.r[s])作为枢轴(或支点)(PiVOt ),然后按下述原则重新排列其余记录:将所有关键字较它小的记录都安置在它的位置之前,将所有关键字较大的记录都安置在它的位置之后。由此可以该“枢轴”记录最后所罗的位置i 作为界线,将序列{L.r[s] ,… ,L.r[t]} 分割成两个子序列{L.r[i+1],L.[i+2], …,L.r[t]}。这个过程称为一趟快速排序,或一次划分。 一趟快速排序的具体做法是:附设两个指针lOw 和high ,他们的初值分别为lOw 和high ,设枢轴记录的关键字为PiVOtkey ,则首先从high 所指位置起向前搜索找到第一个关键字小于PiVOtkey 的记录和枢轴记录互相交换,然后从lOw 所指位置起向后搜索,找到第一个关键字大于PiVOtkey 的记录和枢轴记录互相 交换,重复这两不直至low=high 为止。 具体实现上述算法是,每交换一对记录需进行3 次记录移动(赋值)的操作。而实际上,

(完整word版)查找、排序的应用 实验报告

实验七查找、排序的应用 一、实验目的 1、本实验可以使学生更进一步巩固各种查找和排序的基本知识。 2、学会比较各种排序与查找算法的优劣。 3、学会针对所给问题选用最适合的算法。 4、掌握利用常用的排序与选择算法的思想来解决一般问题的方法和技巧。 二、实验内容 [问题描述] 对学生的基本信息进行管理。 [基本要求] 设计一个学生信息管理系统,学生对象至少要包含:学号、姓名、性别、成绩1、成绩2、总成绩等信息。要求实现以下功能:1.总成绩要求自动计算; 2.查询:分别给定学生学号、姓名、性别,能够查找到学生的基本信息(要求至少用两种查找算法实现); 3.排序:分别按学生的学号、成绩1、成绩2、总成绩进行排序(要求至少用两种排序算法实现)。 [测试数据] 由学生依据软件工程的测试技术自己确定。 三、实验前的准备工作 1、掌握哈希表的定义,哈希函数的构造方法。 2、掌握一些常用的查找方法。 1、掌握几种常用的排序方法。 2、掌握直接排序方法。

四、实验报告要求 1、实验报告要按照实验报告格式规范书写。 2、实验上要写出多批测试数据的运行结果。 3、结合运行结果,对程序进行分析。 五、算法设计 a、折半查找 设表长为n,low、high和mid分别指向待查元素所在区间的下界、上界和中点,key为给定值。初始时,令low=1,high=n,mid=(low+high)/2,让key与mid指向的记录比较, 若key==r[mid].key,查找成功 若keyr[mid].key,则low=mid+1 重复上述操作,直至low>high时,查找失败 b、顺序查找 从表的一端开始逐个进行记录的关键字和给定值的比较。在这里从表尾开始并把下标为0的作为哨兵。 void chaxun(SqList &ST) //查询信息 { cout<<"\n************************"<=1;j--) if(ST.r[j].xuehao

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

实验五搜索引擎使用实验

实验五搜索引擎使用实验一、实验目的 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、直接插入排序算法思想 直接插入排序的基本思想是将一个记录插入到已排好序的序列中,从而得到一个新的,记录数增1 的有序序列。 直接插入排序算法的伪代码称为InsertionSort,它的参数是一个数组A[1..n],包含了n 个待排序的数。用伪代码表示直接插入排序算法如下: InsertionSort (A) for i←2 to n do key←A[i] //key 表示待插入数 //Insert A[i] into the sorted sequence A[1..i-1] j←i-1 while j>0 and A[j]>key do A[j+1]←A[j] j←j-1 A[j+1]←key 2、快速排序算法思想 快速排序算法的基本思想是,通过一趟排序将待排序序列分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,以达到整个序列有序。 假设待排序序列为数组A[1..n],首先选取第一个数A[0],作为枢轴(pivot),然后按照下述原则重新排列其余数:将所有比A[0]大的数都排在它的位置之前,将所有比A[0] 小的数都排在它的位置之后,由此以A[0]最后所在的位置i 作为分界线,将数组A[1..n]分成两个子数组A[1..i-1]和A[i+1..n]。这个过程称作一趟快速排序。通过递归调用快速排序,对子数组A[1..i-1]和A[i+1..n]排序。 一趟快速排序算法的伪代码称为Partition,它的参数是一个数组A[1..n]和两个指针low、high,设枢轴为pivotkey,则首先从high 所指位置起向前搜索,找到第一个小于pivotkey 的数,并将其移到低端,然后从low 所指位置起向后搜索,找到第一个大于pivotkey 的数,并将其移到高端,重复这两步直至low=high。最后,将枢轴移到正确的位置上。用伪代码表示一趟快速排序算法如下: Partition ( A, low, high) A[0]←A[low] //用数组的第一个记录做枢轴记录 privotkey←A[low] //枢轴记录关键字 while low=privotkey do high←high-1 A[low]←A[high] //将比枢轴记录小的记录移到低端 while low

人工智能实验报告

计算机科学与技术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为希尔排序,4为冒泡排序,5为快速排序,6为基数排序,7为折半插入排序8为直接插入排序。 【二】概要设计 1.堆排序 ⑴算法思想:堆排序只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。将序列所存储的元素A[N]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的元素均不大于(或不小于)其左右孩子(若存在)结点的元素。算法的平均时间复杂度为O(N log N)。 ⑵程序实现及核心代码的注释: for(j=2*i+1; j<=m; j=j*2+1) { if(j=su[j]) break; su[i]=su[j]; i=j; } su[i]=temp; } void dpx() //堆排序 { int i,temp; cout<<"排序之前的数组为:"<=0; i--) { head(i,N); } for(i=N-1; i>0; i--) {

temp=su[i]; su[i]=su[0]; su[0]=temp; head(0,i-1); } cout<<"排序之后的数组为:"<

二分搜索实验报告

二分搜索 一.实验目的: 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

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

基于人工智能的状态空间搜索策略研究 ——八数码问题求解 (一)实验软件 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、维普中文科技期刊数据库 3、万方数据资源系统 4、国研网 5、中宏数据库 6、人大复印资料 7、高校财经数据库 三、实验环境 CPU:Intel(R) core?2 CPU 内存:1G 软件:IE 资源:互联网 四、实验步骤 1.进入广东商学院图书馆网页,点击数字资源,进入中国期刊数据库。 2. 根据自己检索课题的要求,采用分类检索与主题检索在加上 3.鉴于以上检索的结果记录数较多,而且与需求的相关性低,采用以下缩减手段:

(1)在检索导航中更改默认分类:只选择“经济与管理”类 (2)更改更新时间(2005~2009),得到结果; (3)把模糊匹配改为精确匹配得到结果; 4. 通过亲自查看其摘要,全文的方式,剔除一些不相关的文献,并归纳出剔除文章的原则。 5. 将最后的所得的与主题密切相关的文献题录信息拷贝下来,保存在作业文件夹中。并在实验报告中体现出来。 6. 把最后所得的期刊论文的全文都一一拷贝下来。保存在自己的移动硬盘中。作为后期撰写文献综述的依据之一。 7. 登陆到学校的重庆维普数据库、人大报刊索引全文数据库,万方全文数据库期刊、国研网子系统,重复2,3,4,5,6,将所得检索结果拷贝下来,放在作业文件夹 五、试验结果 实验步骤3(2)(3)的结果如下,其它数据库结果类似 六、实验分析 期刊网的主页上免费的资源有:学术研究、工具书检索、党和国家大事、文化与生活、学习教育、行业知识仓库等,在相应领域的信息检索中起着重要作用。

算法排序问题实验报告

《排序问题求解》实验报告 一、算法得基本思想 1、直接插入排序算法思想 直接插入排序得基本思想就是将一个记录插入到已排好序得序列中,从而得到一个新得, 记录数增 1 得有序序列。 直接插入排序算法得伪代码称为InsertionSort,它得参数就是一个数组A[1、、n],包含了n 个待排序得数。用伪代码表示直接插入排序算法如下: InsertionSort (A) for i←2 ton do key←A[i]//key 表示待插入数 //Insert A[i] into thesortedsequence A[1、、i-1] j←i-1 while j>0 andA[j]>key do A[j+1]←A[j] j←j-1 A[j+1]←key 2、快速排序算法思想 快速排序算法得基本思想就是,通过一趟排序将待排序序列分割成独立得两部分,其中一 部分记录得关键字均比另一部分记录得关键字小,则可对这两部分记录继续进行排序,以达 到整个序列有序。 假设待排序序列为数组A[1、、n],首先选取第一个数A[0],作为枢轴(pivot),然后按照下述原则重新排列其余数:将所有比A[0]大得数都排在它得位置之前,将所有比 A[0]小得数都排在它得位置之后,由此以A[0]最后所在得位置i 作为分界线,将数组 A[1、、n]分成两个子数组A[1、、i-1]与A[i+1、、n]。这个过程称作一趟快速排序。通过递归调用快速排序,对子数组A[1、、i-1]与A[i+1、、n]排序。 一趟快速排序算法得伪代码称为Partition,它得参数就是一个数组A[1、、n]与两个指针low、high,设枢轴为pivotkey,则首先从high所指位置起向前搜索,找到第一个小于pivotkey得数,并将其移到低端,然后从low 所指位置起向后搜索,找到第一个大于pivotkey 得数,并将其移到高端,重复这两步直至low=high。最后,将枢轴移到正确得位置上。用伪代码表示一趟快速排序算法如下: Partition ( A,low,high) A[0]←A[low] //用数组得第一个记录做枢轴记录 privotkey←A[low] //枢轴记录关键字 while low<high //从表得两端交替地向中间扫描 while low=privotkey do high←high-1 A[low]←A[high] //将比枢轴记录小得记录移到低端 while low<high &&A[low]<=pivotkey)dolow←low+1 A[high]←A[low] //将比枢轴记录大得记录移到高端

人工智能实验报告

人工智能实验报告 实验一 在搜索策略实验群 实验目的 熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用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*算法是启发式算法的一

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

搜索引擎优化实验报告

实验 成绩 实验评阅教师签名 简 要 评 语 华北科技学院管理系 实验报告册 20 实验课程名称: 网上创业 实验项目序号: 实验六 实验项目名称: 搜索引擎优化 实验室名称: 电子商务实验室 开课学 期: 2011 ——2012 学年第 1 学期 授 课 教 师: 白宏斌 实验指导教师: 白宏斌 专 业: 电子商务专业 班 级: B09-3 姓 名: 巩伟 学 号: 200904064327

实验报告实验时间: 2011 年12月20 日

关键词:新闻 凤凰网 凤凰网是一个集图文资讯、视频点播、专题报道、虚拟社区、免费资源、电子商务为一体的Internet 站点;网站设有专栏,介绍凤凰卫视中文台、资讯台、电影台、欧洲台、美洲台和《凤凰周刊》。凤凰网秉承“开创新视野,创造新文化”之精神,凤凰展翅之理想,始终坚持以先进科技配合卓越服务,根据每一位用户和客户的需求制定个性化的服务程式,务求协助用户和客户准确达成目标,创造辉煌成绩。 凤凰网是一个集图文资讯、视频点播、专题报道、虚拟社区、免费资源、电子商务为一体的Internet站点;网站设有专栏,介绍凤凰卫视中文台、资讯台、电影台、欧洲台、美洲台和《凤凰周刊》。 一、标志 凤凰LOGO由两只凤凰构成一个圆,中间是一只注视着世界的眼睛。颜色的基调是象征高贵、雍荣的黄色,黄色之中,又有热烈、耀眼的红色,这两种颜色是中国人最喜欢的。 1、一凤一凰两只鸟,盘旋飞舞、和谐互动的共容在一个圆内。寓意凤凰的起源、成形;凤凰台的东方特色;凤凰台是东西传媒合作的产物。 2、两只鸟头朝里,尾朝外呈弧形打开,所有的口都是开放的。寓意在中国传统的、封闭的意识形态中找到出口;开门办台,欢迎合作,迎接挑战,吸收各种先进经验和优秀文化;发挥传媒影响力,以开放姿态融入世界,让世界了解中国。 3、与中国道教的太极图有形似意同之妙。寓意阴阳的彼此对立又相互消长,阴阳是宇宙运行之道,是万物之和,世界之和。 4、中国解释历史的方式是盛衰分合带有轮转的性质,西方的历史观以直线前进的观点为基础。凤凰LOGO将二者结合为螺旋式前进。团凤构成的圆又是像一个地球,寓意凤凰将把影响力扩大到全世界。 凤凰网是凤凰新媒体旗下的一个图文音、视频综合资讯网站,提供国际、中国大陆及港、澳、台地区的时政、社会、财经、娱乐、时尚、生活等综合新闻信息;以博客、论坛、辩论、调查等Web 2.0应用为用户提供互动与共动交流空间;以RSS、TAG、点播、轮播、个人节目表等可订制的多媒体服务满足用户的个性化信息需求。 二、资讯中心 资讯频道 凤凰资讯,真实、多维、高远,立足大中华、聚焦两岸三地、放眼全世界,为你提供与国内媒体不尽相同的资讯大餐。高度、角度、尺度、深度、热度、速度、黏度,第一时间将资讯的力量与您分享,是个人提升不可缺少的资讯平台。 财经频道 高端财经、深度解读、全球视野、独家观点、评论访谈,凤凰网财经频道依托强大的凤凰

相关文档
最新文档