Algorithms In C.day0

教材:算法 C语言实现(Algorithms In C)Third Edition

引言部分

快速-查找算法(quick-find algorithm):
该算法可用于求解连通问题。
算法思路:
在从输入读取一个新的对p-q后,对于对中的每个数执行查找操作。如果对的成员在同一集合中,那么考虑下一对;如果不在同一集合中,则执行合并操作,并输出这个对。
以下是其简单实现:

//quick find algorithm version 1.0
#include <stdio.h>
#define N 10000
int main(int argc, char *argv[])
{
    int i,p,q,t,id[N];
    for (i=0;i<N;i++)
        id[i]=i;//初始化数组
    while(scanf("%d,%d\n",&p,&q)==2){
        if (id[p]==id[q]) continue;//查找操作
        for(t=id[p],i=0;i<N;i++)
        if(id[i]==t) id[i]=id[q];//合并操作
        printf("%d %d\n",p,q);
    }
    return 0;
}

很显然,对于N个对象的连通性问题,在执行M次合并操作的情况下,快速查找算法至少执行M*N条指令。
算法效率太低,面对大量对象和输入时不可行。
基于同一数据结构,考虑快速合并(quick-union)算法。
算法思路:
在一个没有环的结构中,每个对象指向同一集合中的另一个对象,要确定两个对象是否在同一个集合中,只需跟随每个对象的指针,直到到达指向自身的一个对象。当且仅当这个过程使两个对象到达同一个对象时,这两个对象在同一集合中。如果两个对象不在同一个集合中,最终一定到达不同对象(每个对象都指向自身)。
快速合并算法将相互连通的数据元素放入同一集合,也就是将其放入同一树中,利用了有着同一根节点的元素最终都将指向同一根节点的性质。
快速查找树中,所有节点仅需一个连接就可到达树根。而在快速合并树中,可能要经过几个链接才能到达树根。
代码实现:

这里写代码片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算法:C语言实现(第1-4部分)基础知识、数据结构、排序及搜索(原书第3版)》细腻讲解计算机算法C语言实现。全书分为四部分,共16章。包括基本算法分析原理,基本数据结构、抽象数据结构、递归和树等数据结构知识,选择排序、插入排序、冒泡排序、希尔排序、快速排序方法、归并和归并排序方法、优先队列与堆排序方法、基数排序方法以及特殊用途的排序方法,并比较了各种排序方法的性能特征,在进一步讲解符号表、树等抽象数据类型的基础上,重点讨论散列方法、基数搜索以及外部搜索方法。书中提供了用C语言描述的完整算法源程序,并且配有丰富的插图和练习,还包含大量简洁的实现将理论和实践成功地相结合,这些实现均可用在真实应用上。 《算法:C语言实现(第5部分)图算法(原书第3版)》是深入论述算法的三卷本教程《算法C语言实现》(第3版)中的第二卷——图算法。作者在这次修订中重写了许多内容,增加了数千个新练习、数百个新图表、数十个新程序,并对图表和程序做了详尽的注释说明。新版中不仅涵盖了新的主题,而且还提供了对许多经典算法的更充分的解释,包括图的性质、图搜索、有向图、最小生成树、最短路径和网。《算法:C语言实现(第5部分)图算法(原书第3版)》涵盖了足够的基本内容及较详细的图算法高级主题,既可单独用作数据结构与算法课程的教材,也可与第一卷(第1~4部分)结合使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值