-
什么是拓扑
2019-11-29 22:07:27通常的平面几何或立体几何研究的对象是点、线、面之间的位置关系以及它们的度量性质。拓扑学对于研究对象的长短、大小、面积、体积等度量性质和数量关系都无关。 举例来说,在通常的平面几何里,把平面上的一个图形...拓扑学是几何学的一个分支,但是这种几何学又和通常的平面几何、立体几何不同。通常的平面几何或立体几何研究的对象是点、线、面之间的位置关系以及它们的度量性质。拓扑学对于研究对象的长短、大小、面积、体积等度量性质和数量关系都无关。
举例来说,在通常的平面几何里,把平面上的一个图形搬到另一个图形上,如果完全重合,那么这两个图形叫做全等形。但是,在拓扑学里所研究的图形,在运动中无论它的大小或者形状都发生变化。在拓扑学里没有不能弯曲的元素,每一个图形的大小、形状都可以改变。
所谓“拓扑”就是把实体抽象成与其大小、形状无关的“点”,而把连接实体的线路抽象成“线”,进而以图的形式来表示这些点与线之间关系的方法,其目的在于研究这些点、线之间的相连关系。表示点和线之间关系的图被称为拓扑结构图。拓扑结构与几何结构属于两个不同的数学概念。在几何结构中,我们要考察的是点、线之间的位置关系,或者说几何结构强调的是点与线所构成的形状及大小。如梯形、正方形、平行四边形及圆都属于不同的几何结构,但从拓扑结构的角度去看,由于点、线间的连接关系相同,从而具有相同的拓扑结构即环型结构。也就是说,不同的几何结构可能具有相同的拓扑结构。
作者:喵潇湘
链接:https://www.zhihu.com/question/26507158/answer/409420878
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 -
拓扑结构和几何结构的区别
2020-09-28 17:38:41所谓“拓扑”就是把实体抽象成与其大小、形状无关的“点”,而把连接实体的线路抽象成“线”,进而以图的形式来表示这些点与线之间关系的方法,其目的在于研究这些点、线之间的相连关系。表示点和线之间关系的图被...2020年9月28日 周一 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】
最近在看数据结构中的图,里面有一节叫做拓扑排序,不是很明白这个“拓扑”是什么意思,上网搜了一下,有个说法如下,感觉比较通俗易懂。
所谓“拓扑”就是把实体抽象成与其大小、形状无关的“点”,而把连接实体的线路抽象成“线”,进而以图的形式来表示这些点与线之间关系的方法,其目的在于研究这些点、线之间的相连关系。表示点和线之间关系的图被称为拓扑结构图。拓扑结构与几何结构属于两个不同的数学概念。在几何结构中,我们要考察的是点、线之间的位置关系,或者说几何结构强调的是点与线所构成的形状及大小。如梯形、正方形、平行四边形及圆都属于不同的几何结构,但从拓扑结构的角度去看,由于点、线间的连接关系相同,从而具有相同的拓扑结构即环型结构。也就是说,不同的几何结构可能具有相同的拓扑结构。
一句话总结:
- 拓扑结构:不考虑形状,不考虑连线的长短,侧重节点连或不连
- 几何结构:注重形状及连线的长度
参考文献
https://www.zhihu.com/question/26507158
-
机器学习中的过拟合、欠拟合问题
2020-10-02 17:04:47最左边的图是使用一次多项式来拟合两个变量之间的关系,我们可以直观的感受到直线并不能很好的描述两个变量之间的关系,主要原因就是一次多项式的表达力不够,这个现象叫做欠拟合。 然后直接来看最右边的图,我们...以线性回归和逻辑回归来实际看一下什么是过拟合问题
线性回归
线性回归是使用多项式来拟合变量之间的关系,从而可以根据某些变量来预测另外的变量。
图中的一个红叉叉描述了一个关系实例,横轴代表房子面积,纵轴代表房子的面积。
最左边的图是使用一次多项式来拟合两个变量之间的关系,我们可以直观的感受到直线并不能很好的描述两个变量之间的关系,主要原因就是一次多项式的表达力不够,这个现象叫做欠拟合。
然后直接来看最右边的图,我们使用一个4次多项式来拟合两个变量之间的关系,这条曲线完美的通过了所有的样例点,但是这种扭扭曲曲的线条并不一定适用于未出现的样例点,只是很强的拟合了现有的数据,所以我们把这个情况称作过拟合(over fitting)
逻辑回归
首先声明逻辑回归是一个分类问题,这个令人捉摸不透的叫法需要从很久很久以前说起。。。。。。所以就不说了
逻辑回归的本质是找到决策边界
主要参考自 吴恩达的机器学习视频 https://www.bilibili.com/video/BV164411b7dx?p=39
-
图的遍历
2017-03-11 12:58:08在此之前,我们来看一下什么是图:首先,图可以分为有向图和无向图(这里只讨论无权图),像下面这个图就是无向图,V1 ~ V5 是图的顶点,而连接图的两个顶点的线就叫边或者专业一点的说法叫做:“度”,在无向图中,...这篇文章中总结一下关于图的遍历算法,在此之前,我们来看一下什么是图:
首先,图可以分为有向图和无向图(这里只讨论无权图),像下面这个图就是无向图,V1 ~ V5 是图的顶点,而连接图的两个顶点的线就叫边或者专业一点的说法叫做:“度”,在无向图中,两个顶点之间的连线的方向可以是互换的,比如说,V1 顶点和 V2 顶点之间的边我们可以看做是以 V1 为起点, V2 为终点的一条边,也可以看做是以 V2 位起点, V1 位终点的一条边。由此,一个无向图的度的总数等于这个图中的边的总数的两倍,下面的那个图中一共有 7 条边,因为它是无向图,那么它的度的总数就是 14。
下面来看一下有向图:
有向图和无向图不同,图中的每一条边都是有方向的而且是唯一的,像下面的图中,V1 到 V2 中就只有一条边,方向是从 V1 到 V2 ,V2 到 V3 也只有一条边,方向是从 V2 到 V3。V1 和 V3 之间有两条边,分别是从 V1 到 V3 和 V3 到 V1 ,在这个有向图中度的总数为 4 。
接下来来看一下图的储存方式,我们用什么来储存一个图信息呢?最常用的方法就是通过图的邻接矩阵和邻接表来实现,邻接矩阵顾名思义就是用一个二维数组来储存图的信息,图的顶点数目为二维数组的下标最大值,如果两个顶点之间有边直接相连,那么对应的数组的值就为 1 , 否则为 0。对于上面的图来说,一共有 7 个顶点,那么我们可以设置一个二维数组 a[7][7],初始值全部设置为 0,之后根据边的信息将这个二维数组信息补全,比如:V1 顶点和 V2 顶点有一条边,那么 a[0][1] = a[1][0] = 1; (注意这里是无向图,所以正反都要储存),对于其余的边也是一样。那么邻接表呢?邻接表通过储存每一个点的度的信息来保存图的信息,我们先对图的边设置一个结构体来描述一条边(终点、下一条边的结构体信息指针),然后设置一个结构体数组来保存每个顶点的边的信息,比如下面的结构体:
struct Node { int end; struct node *next; };
那么只要 next 指针不为空,就证明这个顶点还有边。对于上面的图,我们可以设置一个 7 个元素的结构体数组:
Node node[7];
之后对每一个顶点储存边的信息。好了,对图有了基本的认识之后,我们来看一下图的遍历,所谓图的遍历,就是根据某种算法来将图中的顶点通过连接的边全部访问一遍。在遍历的算法方面,我们可以有两种选择:深度优先遍历和广度优先遍历,先来看看深度优先遍历:深度优先遍历是利用了栈的原理来对图的顶点进行访问,类似我们之前总结过的深度优先搜索,我们总是通过当前顶点的第一条出边(专业术语是:出度)(边的结束顶点下标最小并且这条边的结束顶点还未被访问过)来访问这条出边的结束顶点,之后对当前顶点做同样的处理,直到所有的顶点都被访问完成。
我们以上面第一张无向图为例, 首先,我们先从 V1 顶点开始访问,然后我们对 V1 顶点的度进行讨论,我们发现顶点 V1 的第一条边的结束顶点 V2 还没有被访问过, 这里为什么选择 V2 而不选择 V4 呢? 因为 V2 是第二个顶点,其作为数组下标肯定比第四个顶点小,而我们每次就是要找出还未被访问过的并且作为数组下标最小的顶点来进行访问。 好了,我们继续对 V2 进行讨论,我们发现 V3 也没被访问过,于是访问 V3 ,接下来是 V4 ,最后是 V5, 于是这个无向图的深度优先遍历的结果就是 V1 --> V2 --> V3 --> V4 --> V5。 来看一张图:
为了拍这张图也是不容易,寝室光线不好,在寝室拍了几次效果都不好,然后跑去阳台拍,结果还把纸弄湿了~
好了,小伙伴们能理解这个过程就可以了,根据这个原理我们可以写出伪代码:
// 对 n 顶点进行访问讨论 void dfs(int n) { cout << n << " "; for(int i = 0; i < n; i++) { if(e[n][i] == 1 && i 顶点还未被访问过) { 标记 i 顶点为已经被访问过 dfs(i); // 继续对 i 顶点进行访问讨论 } } }
下面我们来看一下广度优先遍历:广度优先遍历算法思想是借助队列来完成的,我们每次对当前顶点的所有的出边(出度)进行讨论,如果某条边的结束顶点还未被访问过,那么就把顶点加入到队列的队尾中,直到当前顶点的所有边都讨论完了,我们再从队列头部取出一个顶点,继续对这个顶点的出边进行讨论,重复这个过程,直到队列为空。
我们还是以上面那个无向图为例,来看一下广度优先遍历: 首先将 V1 顶点加入队列中,然后取出队列头元素,也就是 顶点 V1 ,然后对 V1 顶点的两条出边进行讨论, 我们发现这两条出边的结束顶点 V2 V4 都没有被访问过, 于是,我们把 顶点 V2 和 V4 加入队尾,并且将顶点 V1 出队列(因为已经把 V1 的所有出边都讨论完了), 接下来继续取出队列的头元素,也就是 V2 顶点,之后对它的出边进行讨论并且把没有访问过的对应的顶点加入队尾中, 重复这个过程,直到队列为空。
继续看一张笔者画的模拟图(不会 PS是硬伤。。。):
下面给出广度优先遍历的伪代码:
// 宽度优先遍历,n 为图的顶点个数 void bfs(int n) { que.push(0); // 将 V1 顶点入队 int s; while(!que.empty) { // 队列非空的时候继续循环 s = que.fornt; // 输出访问的顶点 cout << s; que.pop; // 队头元素出队列 for(int i = 0; i < n; i++) { // 对当前顶点的所有边进行讨论 if(e[s][i] == 1 && i 顶点未被访问过) { que.push(i); } } } }
好了,最后给出完整代码
#include <iostream> #include <queue> #include <cstring> using namespace std; const int N = 10010; // 图的顶点最大个数 int e[N][N]; // 储存图信息的邻接矩阵 int book[N]; // 标记顶点是否被访问 // 对第 n 个顶点进行深度优先遍历 void dfs(int n, int sum) { if(n != 0) { // 输出格式控制 cout << " "; } cout << n+1; // 输出顶点信息 for(int i = 0; i < sum; i++) { // 对当前所有的顶点进行讨论 // 如果顶点 i 和顶点 n 之间存在边直接相连,并且顶点 i 未被访问 if(e[n][i] == 1 && book[i] == 0) { book[i] = 1; // 标记这个顶点已经被访问 dfs(i, sum); // 对这个顶点继续进行深度优先遍历 } } } // 对图进行广度优先遍历 void bfs(int n) { queue<int> que; book[0] = 1; // 标记第一个顶点已经被访问 que.push(0); int s; while(!que.empty()) { s = que.front(); // 获取队头元素 que.pop(); // 队头元素出队 if(s != 0) { // 输出格式控制 cout << " "; } cout << s+1; // 输出顶点信息 for(int i = 0; i < n; i++) { // 如果顶点 i 和顶点 n 之间存在边直接相连,并且顶点 i 未被访问 if(e[s][i] == 1 && book[i] == 0) { book[i] = 1; // 标记这个顶点已经被访问 que.push(i); // 这个顶点入队尾 } } } } int main() { int n, m; // 图的顶点个数和边的条数 cin >> n >> m; int x, y; // 边的开始顶点和结束顶点 for(int i = 0; i < m; i++) { cin >> x >> y; e[--x][--y] = e[y][x] = 1; // 因为是无向图,所以要双向储存 } cout << "深度优先遍历结果:" << endl; book[0] = 1; // 标记第一个顶点已经被访问 dfs(0, n); // 从第一个顶点开始深度优先遍历 memset(book, 0, sizeof(book)); // 重置访问标记 cout << endl << "广度优先遍历结果:" << endl; bfs(n); return 0; }
测试数据和结果:
Good, 和我们模拟得到的结果一样。图的遍历算法是图的基础算法, 也是在很多其他图的算法中经常用得到的算法思想,比如图中两个顶点的最短路,图的最小生成树算法等等。
好了。如果博客中有什么不正确的地方,还请多多指点。如果觉得我写得不错,那么请点个赞支持我吧。
谢谢观看。。。
-
清华大学的计算机网络课件
2010-03-26 11:11:56问题4-15:什么叫做“星形总线(star-shaped bus)”或“盒中总线(bus-in-a-box)”? 问题4-16:以太网的覆盖范围受限的一个原因是:如果站点之间的距离太大,那么由于信号传输时会衰减得很多因而无法对信号进行可靠的... -
Web性能领域常见的专业术语
2021-01-08 14:45:51<p>FP与FCP这两个指标之间的主要区别是:FP是当浏览器开始绘制内容到屏幕上的时候,只要在视觉上开始发生变化,无论是什么内容触发的视觉变化,在这一刻,这个时间点,叫做FP。... -
分治思想—归并和快速排序
2020-11-06 13:22:26假如一个算法运算结束,在最终的序列里,保持两个元素之间初始位置不变,则属于稳定。 有木有以前看过《啊哈,算法》的小伙伴,来来来,交流交流思想 归并 思路: 1,归并老被叫做二路归并,为什么是二路,不是... -
让你的网页更丝滑(全)
2021-01-08 14:41:34需要先思考一个问题就是什么样的网页是流畅的? 这个问题我总结了一句话:在网页与用户产生交互的过程中,让用户感觉流畅。 <p><img alt="图片" src=... -
Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好
2011-01-28 17:02:08这个程序里我们实现了两类窗口打开的方式,一个是自身消失而 后打开另一个窗口,一个是打开另一个窗口而自身不消失。可以看到他们实现的 方法是不同的。 三、Qt Creator 登录对话框(原创) 实现功能: 在弹出对话框... -
POJ-1436 线段树 区间更新
2012-03-08 16:24:00所谓可见线段就是在给定的垂直与x轴的直线中,能够在两个直线之间连接一条平行线,并且这条平行线不与任何其他的直线相交。 WA一次,就是因为没有考虑到在建立点树的过程中会出现将 [1, 2] 和 [3, 4] 视为一条连接... -
计算机网络常见问题解答
2010-06-07 08:19:11问题3-21:什么叫做“星形总线(star-shaped bus)”或“盒中总线(bus-in-a-box)”? 问题3-22:以太网的覆盖范围受限的一个原因是:如果站点之间的距离太大,那么由于信号传输时会衰减得很多因而无法对信号进行可靠的... -
计算机图形学(OpenGL)第三版(带完整目录).pdf
2017-02-15 10:03:09计算机图形学中使用了大量的数学符号来表达线、面和视点之间的基本几何关系。虽然每个数学符号都很容易理解,但所需的符号数量却令人生畏。书中特别强调了使用每种符号或技术的原因,以及如何利用这些数学符号合理... -
分布式协调工具-ZooKeeper实现动态负载均衡
2019-12-13 21:40:02什么是Zookeeper Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group ... -
软件工程教程
2012-07-06 23:10:29表示在某一时刻类的具体实例和这些实例之间的具体连接关系 类 与 对象 关系 类 与 对象 关系 类图和对象图的区别 包 包 一种分组机制,把各种各样的模型元素通过内在的语义连在一起成为一个整体就叫做包 ... -
大话数据结构
2019-01-10 16:35:22现实中,人与人之间关系就非常复杂,比如我的认识的朋友,可能他们之间也互相认识,这就不是简单的一对一、一对多的关系了,那就是我们今天要研究的主题——图。 7.2.1各种图定义 214 7.2.2图的顶点与边间关系 217 ... -
大话数据结构 程杰
2018-09-01 10:06:43现实中,人与人之间关系就非常复杂,比如我的认识的朋友,可能他们之间也互相认识,这就不是简单的一对一、一对多的关系了,那就是我们今天要研究的主题——图。 7.2.1各种图定义 214 7.2.2图的顶点与边间关系 217 ... -
大话数据结构三个版本
2018-09-10 09:39:38于是商品房就出现了各种各样的户型,有几百平米的别墅,也有仅两平米的胶囊公寓…… 1.6.1数据类型 11 .1.6.2抽象数据类型 12 1.7总结回顾 14 1.8结尾语 15 最终的结果一定是,你对着别人很牛的说“数据结构——就... -
大话数据结构(中文高清版)
2017-04-19 11:57:097.2 图的定义 213 现实中,人与人之间关系就非常复杂,比如我的认识的朋友,可能他们之间也互相认识,这就不是简单的一对一、一对多的关系了,那就是我们今天要研究的主题--图。 7.2.1 各种图定义 214 7.2.2 图的... -
《大话数据结构》( 程杰 编著)
2018-02-15 10:00:21现实中,人与人之间关系就非常复杂,比如我的认识的朋友,可能他们之间也互相认识,这就不是简单的一对一、一对多的关系了,那就是我们今天要研究的主题——图。 7.2.1各种图定义 214 7.2.2图的顶点与边间关系 217 ... -
大话数据结构-程杰
2014-07-13 23:45:52现实中,人与人之间关系就非常复杂,比如我的认识的朋友,可能他们之间也互相认识,这就不是简单的一对一、一对多的关系了,那就是我们今天要研究的主题--图。 7.2.1 各种图定义 214 7.2.2 图的顶点与边间关系 217... -
c语言编写单片机技巧
2009-04-19 12:15:17MCU在射频控制时,MCU的时钟(晶振)、数据线会辐射基频或基频的倍频,被低噪放LNA放大后进入混频,出现带内的Spur,无法滤除。除了用layout、选择低辐射MCU的方法可以减少一些以外,还有什么别的方法? 答:在... -
小程序底层实现原理及一些思考
2021-01-08 14:32:16事情会变成一场官方和开发者之间持久的攻防战。 无论怎样,这个方案解决了目前遇到的所有问题,这也为我留下了非常多的时间去研究真正的小程序应该怎样做。 <h2>4. 回归双线程 最终,我发现双线程... -
汽车驾驶教程图解
2012-05-26 08:56:12选择适合自己的身材、容易操作的位置(在时钟上10点10分至9点15分之间)。 b.依靠手腕、肩部、手指的力量,轻揉协调地操控转向盘。 c.用食指到小手拇指四个手指握住转向盘,再加上拇指轻轻握住转向盘。 2.掌握... -
导致后期改项目为组件化的时候十分痛苦,不同模块之间的业务逻辑实在关联太多,但还是没办法,于是按照步骤一步步实践。终极目标是,告别结构臃肿,让各个业务变得相对独立,业务组件在组件模式下可以独立开发。 ...
-
2013年茂名电大地域文化(岭南文化)形成性考核册作业答案
2013-05-14 11:58:26福佬民系的形成,是由当地土著居民闽越族人与两晋以来移入该地区的中原汉人融会而成的。 广府民系的特点主要是不怀旧,不拘泥于历史,富于冒险,勇于开拓,容易接受外来的新事物,又善于融合,消化,吸取,商品意识... -
Activiti6.0教程例子下载
2017-11-08 14:36:55例如开发一个系统最关键的部分不是系统的界面,也不是和数据库之间的信息交换,而是如何根据业务逻辑开发出符合实际需要的程序逻辑并确保其稳定性、易维护性和弹性。 比如你的系统中有一个任务流程,一般情况下这个... -
为什么不用线性回归的代价函数表示,因为线性回归的代价函数可能是非凸的,对于分类问题,使用梯度下降很难得到最小值,上面的代价函数是凸函数 的图像如下,即y=1时: 可以看出,当趋于1,y=1,与预测值一致,...
-
黄冈中学高一数学教案
2010-09-04 23:16:101、数列除了按项数的有限与无限分类外,还可以按项与项之间的大小关系分类为:递增数列,递减数列,常数列,摆动数列. 2、等差数列{an}中,若m+n=p+q(m、n、p、q∈N*),则am+an=ap+aq. 3、2an=an+k+an-k(n>k...