Hello 算法 1.0.0b1 Golang版堆化操作用于修复堆的特性,在入堆和出堆操作中都会使用到。 ‧ 输入 ? 个元素并建堆的时间复杂度可以被优化至 ?(?) ,非常高效。 135 9. 图 9.1. 图 「图 Graph」是一种非线性数据结构,由「顶点 Vertex」和「边 Edge」组成。我们可将图 ? 抽象地表示为一 组顶点 ? 和一组边 ? 的集合。例如,以下表示一个包含 5 个顶点和 7 条边的图 ? = {1, 2, 3, 4, 5} ? = 我们在邻接表中使用 Vertex 结点类来表示顶点, 这样做的原因是: ‧ 如果我们选择通过顶点值来区分不同顶点,那么值重复的顶点将无法被区分。 ‧ 如果类似邻接矩阵那样,使用顶点列表索引来区分不同顶点。那么,假设我们想要删除索引为 ? 的顶点, 则需要遍历整个邻接表,将其中 > ? 的索引全部执行 −1 ,这样操作效率太低。 ‧ 因此我们考虑引入顶点类 Vertex ,使得每个顶点都是 顶点,value:该顶点的所有邻接顶点 adjList map[Vertex][]Vertex } /* 构造方法 */ func newGraphAdjList(edges [][]Vertex) *graphAdjList { g := &graphAdjList{ adjList: make(map[Vertex][]Vertex), } // 添加所有顶点和边 for _, edge0 码力 | 190 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 Golang版堆化操作用于修复堆的特性,在入堆和出堆操作中都会使用到。 ‧ 输入 ? 个元素并建堆的时间复杂度可以被优化至 ?(?) ,非常高效。 138 9. 图 9.1. 图 「图 Graph」是一种非线性数据结构,由「顶点 Vertex」和「边 Edge」组成。我们可将图 ? 抽象地表示为一 组顶点 ? 和一组边 ? 的集合。例如,以下表示一个包含 5 个顶点和 7 条边的图 ? = {1, 2, 3, 4, 5} ? = 我们在邻接表中使用 Vertex 结点类来表示顶点, 这样做的原因是: ‧ 如果我们选择通过顶点值来区分不同顶点,那么值重复的顶点将无法被区分。 ‧ 如果类似邻接矩阵那样,使用顶点列表索引来区分不同顶点。那么,假设我们想要删除索引为 ? 的顶点, 则需要遍历整个邻接表,将其中 > ? 的索引全部执行 −1 ,这样操作效率太低。 ‧ 因此我们考虑引入顶点类 Vertex ,使得每个顶点都是 顶点,value:该顶点的所有邻接顶点 adjList map[Vertex][]Vertex } /* 构造方法 */ func newGraphAdjList(edges [][]Vertex) *graphAdjList { g := &graphAdjList{ adjList: make(map[Vertex][]Vertex), } // 添加所有顶点和边 for _, edge0 码力 | 202 页 | 15.73 MB | 1 年前3
Hello 算法 1.0.0b4 Golang版存泄露。相较于栈内 存,堆内存的管理和使用需要更谨慎,不恰当的使用可能会导致内存泄露和野指针等问题。 164 9. 图 9.1. 图 「图 Graph」是一种非线性数据结构,由「顶点 Vertex」和「边 Edge」组成。我们可以将图 ? 抽象地表示 为一组顶点 ? 和一组边 ? 的集合。以下示例展示了一个包含 5 个顶点和 7 条边的图。 ? = {1, 2, 3, 4, 5} ,我们在邻接表中使用 Vertex 节点类来表示 顶点,这样做的原因有: ‧ 如果我们选择通过顶点值来区分不同顶点,那么值重复的顶点将无法被区分。 ‧ 如果类似邻接矩阵那样,使用顶点列表索引来区分不同顶点。那么,假设我们想要删除索引为 ? 的顶 点,则需要遍历整个邻接表,将其中 > ? 的索引全部减 1 ,这样操作效率较低。 ‧ 因此我们考虑引入顶点类 Vertex ,使得每个顶点都是唯 顶点,value:该顶点的所有邻接顶点 adjList map[Vertex][]Vertex } /* 构造函数 */ func newGraphAdjList(edges [][]Vertex) *graphAdjList { g := &graphAdjList{ adjList: make(map[Vertex][]Vertex), } // 添加所有顶点和边 for _, edge0 码力 | 347 页 | 27.40 MB | 1 年前3
Hello 算法 1.1.0 Go版见的边相连。 每一次的相识与相离,都在这张巨大的网络图中留下独特的印记。 第 9 章 图 hello‑algo.com 190 9.1 图 图(graph)是一种非线性数据结构,由顶点(vertex)和边(edge)组成。我们可以将图 ? 抽象地表示为一 组顶点 ? 和一组边 ? 的集合。以下示例展示了一个包含 5 个顶点和 7 条边的图。 ? = {1, 2, 3, 4, 5} ? 为顶点实例,value 为该顶点的邻接顶点列表(链表)。 另外,我们在邻接表中使用 Vertex 类来表示顶点,这样做的原因是:如果与邻接矩阵一样,用列表索引来区 分不同顶点,那么假设要删除索引为 ? 的顶点,则需遍历整个邻接表,将所有大于 ? 的索引全部减 1 ,效率 很低。而如果每个顶点都是唯一的 Vertex 实例,删除某一顶点之后就无须改动其他顶点了。 // === File: graph_adjacency_list 邻接表,key:顶点,value:该顶点的所有邻接顶点 adjList map[Vertex][]Vertex } /* 构造函数 */ func newGraphAdjList(edges [][]Vertex) *graphAdjList { g := &graphAdjList{ adjList: make(map[Vertex][]Vertex), } // 添加所有顶点和边 for _, edge0 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.0.0 Golang版边相连。 每一次的相识与相离,都在这张巨大的网络图中留下独特的印记。 第 9 章 图 hello‑algo.com 190 9.1 图 「图 graph」是一种非线性数据结构,由「顶点 vertex」和「边 edge」组成。我们可以将图 ? 抽象地表示为 一组顶点 ? 和一组边 ? 的集合。以下示例展示了一个包含 5 个顶点和 7 条边的图。 ? = {1, 2, 3, 4, 5} 为顶点实例,value 为该顶点的邻接顶点列表(链表)。 另外,我们在邻接表中使用 Vertex 类来表示顶点,这样做的原因是:如果与邻接矩阵一样,用列表索引来区 分不同顶点,那么假设要删除索引为 ? 的顶点,则需遍历整个邻接表,将所有大于 ? 的索引全部减 1 ,效率 很低。而如果每个顶点都是唯一的 Vertex 实例,删除某一顶点之后就无须改动其他顶点了。 // === File: graph_adjacency_list 点 adjList map[Vertex][]Vertex 第 9 章 图 hello‑algo.com 199 } /* 构造函数 */ func newGraphAdjList(edges [][]Vertex) *graphAdjList { g := &graphAdjList{ adjList: make(map[Vertex][]Vertex), } // 添加所有顶点和边0 码力 | 382 页 | 17.60 MB | 1 年前3
Hello 算法 1.0.0b5 Golang版边相连。 每一次的相识与相离,都在这张巨大的网络图中留下独特的印记。 第 9 章 图 hello‑algo.com 184 9.1 图 「图 graph」是一种非线性数据结构,由「顶点 vertex」和「边 edge」组成。我们可以将图 ? 抽象地表示为 一组顶点 ? 和一组边 ? 的集合。以下示例展示了一个包含 5 个顶点和 7 条边的图。 ? = {1, 2, 3, 4, 5} 在邻接表中使用 Vertex 节点类来表示 顶点,而这样做是有原因的。 1. 如果我们选择通过顶点值来区分不同顶点,那么值重复的顶点将无法被区分。 2. 如果类似邻接矩阵那样,使用顶点列表索引来区分不同顶点。那么,假设我们想要删除索引为 ? 的顶 点,则需要遍历整个邻接表,将其中 > ? 的索引全部减 1 ,这样操作效率较低。 3. 因此我们考虑引入顶点类 Vertex ,使得每个顶点都 顶点,value:该顶点的所有邻接顶点 adjList map[Vertex][]Vertex } /* 构造函数 */ func newGraphAdjList(edges [][]Vertex) *graphAdjList { g := &graphAdjList{ adjList: make(map[Vertex][]Vertex), } // 添加所有顶点和边 for _, edge0 码力 | 379 页 | 30.70 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Go 版连。 每一次的相识与相离,都在这张巨大的网络图中留下独特的印记。 第 9 章 图 www.hello‑algo.com 190 9.1 图 图(graph)是一种非线性数据结构,由顶点(vertex)和边(edge)组成。我们可以将图 ? 抽象地表示为一 组顶点 ? 和一组边 ? 的集合。以下示例展示了一个包含 5 个顶点和 7 条边的图。 ? = {1, 2, 3, 4, 5} ? 为顶点实例,value 为该顶点的邻接顶点列表(链表)。 另外,我们在邻接表中使用 Vertex 类来表示顶点,这样做的原因是:如果与邻接矩阵一样,用列表索引来区 分不同顶点,那么假设要删除索引为 ? 的顶点,则需遍历整个邻接表,将所有大于 ? 的索引全部减 1 ,效率 很低。而如果每个顶点都是唯一的 Vertex 实例,删除某一顶点之后就无须改动其他顶点了。 // === File: graph_adjacency_list 邻接表,key:顶点,value:该顶点的所有邻接顶点 adjList map[Vertex][]Vertex } /* 构造函数 */ func newGraphAdjList(edges [][]Vertex) *graphAdjList { g := &graphAdjList{ adjList: make(map[Vertex][]Vertex), } // 添加所有顶点和边 for _, edge0 码力 | 384 页 | 18.49 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 Go 版連。 每一次的相識與相離,都在這張巨大的網路圖中留下獨特的印記。 第 9 章 圖 www.hello‑algo.com 190 9.1 圖 圖(graph)是一種非線性資料結構,由頂點(vertex)和邊(edge)組成。我們可以將圖 ? 抽象地表示為一 組頂點 ? 和一組邊 ? 的集合。以下示例展示了一個包含 5 個頂點和 7 條邊的圖。 ? = {1, 2, 3, 4, 5} ? 為頂點例項,value 為該頂點的鄰接頂點串列(鏈結串列)。 另外,我們在鄰接表中使用 Vertex 類別來表示頂點,這樣做的原因是:如果與鄰接矩陣一樣,用串列索引來 區分不同頂點,那麼假設要刪除索引為 ? 的頂點,則需走訪整個鄰接表,將所有大於 ? 的索引全部減 1 ,效 率很低。而如果每個頂點都是唯一的 Vertex 例項,刪除某一頂點之後就無須改動其他頂點了。 // === File: graph_adjacency_list 鄰接表,key:頂點,value:該頂點的所有鄰接頂點 adjList map[Vertex][]Vertex } /* 建構子 */ func newGraphAdjList(edges [][]Vertex) *graphAdjList { g := &graphAdjList{ adjList: make(map[Vertex][]Vertex), } // 新增所有頂點和邊 for _, edge0 码力 | 385 页 | 18.80 MB | 10 月前3
Go on GPU
GopherChina 2023. Session "Foundational Toolchains" Graphics Rendering Pipeline Vertex Generation Vertex Processing (via Vertex Shader) Primitive Generation Primitive Processing Rasterization (Fragment (Fragment Generation) Pixel Processing (via Pixel Shader) Frame Buffer Operations GPU Memory Vertex Buffer Frame Buffer Index Buffer Depth Buffer ... Vertices in 3D space as input Vertices positioned0 码力 | 57 页 | 4.62 MB | 1 年前3
5 How to integrate Graph mode into RDBMS smoothly TiDB PD 天下大势,合久必分,分久必合 《三国演义》 图 + 关系型多模实现 01. 副标题 g_prefix Vertex_ID Tag_ID g_prefix src_Vertex_ID Edge_Type Edge_ID dst_Vertex_ID SELECT * FROM people WHERE name="Henry" # 从名字为0 码力 | 26 页 | 1.14 MB | 1 年前3
共 10 条
- 1













