算法是什么?
算法(algorithm奥格瑞娜木)是一种求解问题的一系列计算步骤,用来将输入数据转化成输出结果
算法设计应满足以下目标:
(1)正确性:要求算法能够正确地执行预先规定的功能和性能的要求。
(2)可使用性:要求算法能够方便地使用。
(3)可读性:算法应该易与人理解。
(4)健壮性:要求算方具有很好的容错性。
(5)高效率与低存储量需求:通常,算法的效率主要指算法的执行时间。
对同一个问题如果有多种算法可以求解,执行时间短的算法效率高。
例子1.1:以下算法用于在带头节点的单链表h中查找第一个值为x的节点,
从中找到后返回其逻辑序号(从1号计起),否则返回0。
{ int data;
struct node * next;
}LNode;//定义单链表节点类型
/*int findx(LNode *h,int x)
{ LNode *p=h->next;
int i=0;
while(p->data!=x)
{i++;
p=p->next;
}
return i;
} */
/*注意:当单链表中的首节点值为x时该算法返回值为0,此时应该返回逻辑序号1。
另外,当单链表中不存在值为x的节点时该算法执行出错,因为p为NULL时仍执行P=P->next。
所以,该算法不满足正确性和健壮性。
*/
/*当单链表中的首节点值为x时该算法返回0,此时应该返回逻辑序号1。
另外,当单链表中有不错存在的x节点时该算法执行出错,因为P为NULL,
时仍然执行P=->next。所以该算法不满足正确性,和健壮性。
代码应该为 如下:
*/
int findx(LNode *h,int x)
{ LNode *p = h->next;//P初始时指向首节点
int i=1;
while(p!=NULL && p->data!=x)
{ i++;
p = p->next;
}
if (p==NULL) //没找到值X的节点返回0
return 0;
else
return i;//找到值为x的节点返回其逻辑序号;
}
算法5个特性:
(1)有限性:一个算法必须总是(对任何合法的输入值)在执行有限步之后结束,
且每一步都可以在有限时间内完成。
(2)确定性:算法中的每一条执行指令必须有确切的含义,不会存在二义性。
(3)可执行性:算法中的每一条运算都必须时足够基本的,在原则上都能精确地执行,
甚至人们仅用笔和纸就能做有限次运算就能完成。
(4)输入性:一个算法有零个和多个输入;
(5)输出性:一个算法有一个或多个输出。若无输出则算法无意义。输入和输出存在某种特定关系。