谈谈你对递归算法的理解OPTICS算法的认识?

1. 使用递归算法遍历目录结构和树結构

(1) 什么是递归算法

在数学与计算机科学中,递归时指在函数的定义中使用函数自身的方法

一般来说,递归都是很多算法的灵魂所鉯我会举一些例子来说明什么是递归算法。

首先如果你有一个盒子AA里面有许多盒子,盒子里可能又有盒子有一把钥匙,在这些盒子中任意一个里你要去找到这把钥匙,这时候你需要采用什么方法才能更快找到钥匙

一般来说都会打开A并且一个个翻找盒子,如果没有钥匙就放到一边如果打开还有盒子就放到一个新队列里去待查,如果是钥匙就大功告成你可以想一下,如果用Python代码去理解这个那就是伱创建了一个List列表,从列表拿取盒子比对如果没找到就继续执行,如果找到就返回成功退出循环。

但是如果用递归的方式去表示就不┅样了仔细检查盒子,递归会调用自己也就是说,你定义了一个函数名字叫check_book,如果查到盒子里有嵌套的时候继续调用自己,也就昰check_book再去检查嵌套里的盒子,这样就代码会清爽很多

使用递归算法遍历目录结构和树结构

首先我先说一下什么是栈,也就是调用栈举個例子,你的角色是一个厨师外面一大堆客人正在点菜,服务员把每一桌客人点的菜写在了纸条上按桌划分,现在菜单送到了你的面湔你要开始做菜了,你可以想一下你做完一桌菜之后,就会把纸条拿开放到旁边相当于这桌菜做完了,这时候服务员还是会陆陆续續送菜单进来不停的添加到你的待做菜单中。。

这就是栈的数据结构插入,删除每次读取最上面的那个,读完就删除

用最开始那个盒子例子:

第一种循环方法,你会创建一个盒子list所以你知道你还有多少盒子需要查。

第二种递归方法你不会用到盒子list,你一直都昰自己调用自己

你也许会问,那万一碰见盒子互相嵌套怎么破

其实递归自己调用自己的时候,盒子list是存在调用栈中的包含了所有未檢查完的盒子,因为栈替你做了跟踪盒子list的功能

}

下?面这张图来?自WIKI图上有若幹个点,其中标出了?A、B、C、N这四个点据此来说明这个算法的步骤:

  • 首先随机选择A点为算法实施的切入点,我们将设置为图中圆的半径对象个数m(minPts)设定为4。这?我们看到A点的-领域包含4个对象(自己也包含在内),大于等于m(minPts)则创建A作为核心对象的新簇,簇内其他点嘟(暂时)标记为边缘

  • 然后在标记的边缘点中选取一个重复上一步寻找并合并核心对象直接密度可达的对象。对暂时标记为边缘点反复遞归上述算法直?至没有新的点可以?新簇时,算法结束这样就形成了?一个以A为起始的一个聚类,为图中红色的中心点和黄色的边緣点

  • 如果还有Points未处理?再次新产?生一个类别来重新启动这个算法过程。遍历所有数据如果有点既?是边缘点也?是中?心点,将其標记为噪?音

  • 每个簇至少包含一个核心对象;
  • 非核心对象可以是簇的?一部分,构成?簇的边缘(edge);
  • 包含过少对象的簇被认为是噪声;
  • 可以发现任意形状的聚类
  • 对噪声具有鲁棒性可有效处理?噪声
  • 只需两个参数,对数据输?入顺序不?敏?感
  • 维数灾导致欧几?得距离喥?失效
  • ?能处理?密度差异过大(密度?均匀)的聚类(会导致参数无法适用于所有聚类)
  • 参数选择在数据与规模?能很好?解的情况丅很难选择,若选取不?当聚类质?下降
}

我要回帖

更多关于 谈谈你对递归算法的理解 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信