6-17 创新班第十课

21 篇文章 0 订阅
9 篇文章 0 订阅

首先,江老师评价了一下我们的博客,说我的tree那题没有用新学的方法做,所以我就在博客上贴了程序

       在这里,江老师讲了两个很重要的概念:

              1、静态和动态:

                     按照tree那题来举例:

按照杨鸿飞的方法压缩路径就是属于静态,而用我们学的方法就是属于动态:

静态:

                                          for(int i=1;i<=n;i++)

                           fa[i]=getf(i);

            动态:

                                          while(fa[x]!=x)

                      {

                           int y=fa[x];

                           fa[x]=root;

                           x=y;

                       }

静态就是整个变化过程完了之后在处理,动态就是有变化就处理,有变化就处理。

静态——最后处理;

动态——中间处理;

   好吧其实我写想和博客时都有点晕,不怎么搞得清楚,不过到时候江老师会再详细地讲,到时候再做补充吧。

            2、不会做题时找出思绪的有效方法:

                            画大量的例子!!

                     这样一能让我们熟悉题目的特征,二来有时还能找到一些规律。                    

 

 

好吧暂时先写这么多,回到家再写吧。

 

回家续写:

    后来老师又讲到galaxy,说到了它的解题思路:

       由于这题属于并查集,而并查集的特点就是压缩路径,所以就是讲了       压缩路径的方法(不压缩路径也会超时)

       

先定义一个结构体,里面除了包括正常那些外,在加多一个这个这个节点到根的距离。每次需要用到这个节点时就求距离,然后把两个节点的距离差求出来,就能求出这两个节点(舰队)之间有多少个节点(舰队)。

 

    接着老师讲了递归来找根,这样不仅能顺便压缩路径,而且程序非常短。

int getf(int x)

{

   if(x==fa[x]) return x;

   return fa[x]=getf(fa[x]);

}

 

程序十分简单,但是也有一点小问题:

1、          如果这棵树特别深,那么就要开十分多的getf()函数,这有可能空间会爆掉。

2、          如果是一个环形,像这个一样怎么办?它会无限递归一直退不出来。6-17 创新班第十课 - 周正华 - 周正华的博客

 

所以我们就要用到“启发式”来解决:拿小的来连大的。

具体如何做江老师说以后会学到,那么就先不要理它了。

然后江老师顺便讲了一下明天要学的哈希(hash)算法,大概就是说如何快速比较两个数的不同之类的。今天特别晚,那这个就留到明天的博客再写吧。

 

      

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值