IT技术博客大学习 共学习 共进步

标签:图论

共 11 篇相关文章

IT 累计浏览 6

算法模式:并查集

并查集是一种用于解决动态连通性问题的数据结构,能够高效管理节点间的连接关系并快速判断任意两点是否属于同一连通分量。其核心操作包括`union`(合并两个节点所属的集合)和`connected`(查询两个节点是否连通)。初始化时每个节点自成一组,通过`parent`数组记录节点的父节点,最终形成树状结构。 判断连通性时需向上查找各自根节点并比较是否相同。为提升查询效率,可应用路径压缩技术:在查找根节点过程中,将路径上所有节点直接指向根节点,从而大幅降低后续操作的时间复杂度。文章通过图示和Java代码示例展示了并查集的基本实现,包括查找、合并、连通分量计数等功能,体现了其在处理动态集合合并与连通性查询场景下的实用性。

IT 累计浏览 3,926

用邻接表实现无向图

这篇讲的是作者在游戏管道系统扩展中,如何用邻接表实现一个无向图数据结构。作者从原有的液体管道系统(采用类似树的固定数组存储)出发,面对电线网络等新需求——节点无方向且可多邻接,决定重新设计。核心思路是将节点id与边关系分离,便于模块化复用。具体实现上,每条边用32位紧凑表示(16位端点id对,小id在低位确保唯一性),并设计了一个巧妙的结构:在边数据中加入两个链表指针,分别指向两端点所属的边集合,从而支持高效遍历。 更精巧的是,作者进一步压缩了存储:通过将其中一端点的边集合连续排列,另一端以链表链接,并用“反转端点id”来标志链表结束(通常小id在前),最终每条边只需48位。文章以九宫格网格图为例,完整演示了如何从节点索引开始,逐步追踪并找出顶点5的全部四条邻接边。作者坦言这种无向图实现并非日常工作所需,但经过半天编码,能写出这样紧凑高效的结构让他颇为满意,其压缩方案甚至可能具有一定的原创性。

IT 累计浏览 2,687

五个有趣的拓扑变换问题

这篇讲的是拓扑学里五个既直观又烧脑的变换谜题。文章从 V. V. Prasolov 的《直观拓扑》一书中选出了五个经典问题:比如两个套在一起的圆环能否不切断就解开?轮胎表面的圆环能否移到另一位置?轮胎内表面能否翻到外面?等等。规则很简单:所有物体都由“橡胶”制成,可随意拉伸弯曲,但不能切断或粘连。 作者不仅抛出问题,更直接展示了令人惊叹的答案与变形过程。比如,通过连续的拉伸和翻转,确实能将两个手指套成的圆环解开——这甚至被比喻成解开“橡胶手铐”。而最具颠覆性的,是对轮胎(环面)进行“内外翻转”的论证。文章通过一系列图像,清晰地将有洞的轮胎等效为两个粘合的纸圈,再通过对调纸圈来还原,从而在拓扑意义上实现了内表面的外翻。Wikipedia 上那个名为“Inside-out torus”的动画,更是将这个抽象过程可视化,极具观赏性和启发性。 这些问题背后,是拓扑学中“连续性”和“同胚”的核心思想。它告诉我们,在拓扑的视角下,形状的本质由其整体结构决定,而非局部外观。理解这一点,能彻底改变你对空间和形态的认知。

IT 累计浏览 2,766

12个经典的行程问题

从小学奥数课堂到公务员考场,再到大厂笔试面试,总有些经典行程问题会不期而遇——它们往往背景简单、人人能懂,但解题的巧思却让人拍案叫绝。 这篇文章正是由一位技术人整理,汇集了12道这样的经典题目。这些题目大多久经流传,堪称“熟面孔”,但作者并非简单罗列,而是着重呈现了它们“简单有趣”且“颇具启发性”的一面。每道题都像一个精巧的思维体操,考验着读者在路程、速度与时间之间转换与权衡的能力。 作者分享的初衷很朴素:希望大家至少能从中发现一道自己未曾见过的题目,从而重温那种被奇巧思路“难住”后豁然开朗的乐趣。无论是用来锻炼逻辑、辅导孩子,还是作为技术面试前的热身,这些经过时间检验的智力题,本身就是在分享一种解决问题的思考过程与纯粹快乐。

IT 累计浏览 1,884

趣题:用最少的点挡住所有可能的反射路径

这篇讲的是一个迷人的数学趣题:如何在一个四面是镜的正方形房间里,用最少的“守卫点”来保护天使,使其永远无法被恶魔从任意方向发射的、可无限反射的激光击中。 问题的设定本身就很有趣。恶魔可以瞄准任何方向,激光在镜面墙壁间反弹的路径会形成极其复杂的分形曲线。天使的任务,就是在恶魔和自己之间,预先布下一些点(守卫),使得无论恶魔朝哪个角度开火,激光在第一次或某次反射后,总会先撞上其中一个守卫点。 文章的核心在于探讨“最少”的极限。直觉上,天使可以在自己周围放一圈密集的守卫形成屏障,但题目追求的是数学上的最小解:能否用可数个(甚至有限个)离散的点来完成这项几乎不可能的“封堵”?作者从这个生动的比喻出发,引导读者思考点集的拓扑性质、激光路径的测度,最终触及了点集拓扑学中关于“测度”与“覆盖”的深刻结论。 这篇文章巧妙地将一个看似游戏化的问题,转化为对数学本质的叩问。它告诉我们,有些看似可以无限细分的任务(用点挡线),在数学的严格审视下,其可行性却依赖于一个完全不同的、更宏大的维度。

IT 累计浏览 1,766

趣题:旋转桌子避免灯泡全亮

这篇介绍了一个来自CMU趣题集的数学谜题:有四个灯泡和一张可旋转的桌子,每次旋转会改变相邻灯泡的状态,目标是通过旋转操作让所有灯泡最终都关闭。作者从King Arthur的传说中提取出这个精简版本,展示了如何用对称性和群论思想来寻找优雅解法。 核心思路在于观察“旋转”操作的对称性——将问题转化为寻找特定旋转序列,使得每次操作的影响相互抵消。文章没有停留在暴力尝试,而是引导读者发现灯泡状态变化的数学规律,比如旋转90度、180度各自带来的不同效果。这种将现实问题抽象为数学结构的过程,正是算法思维的典型体现。 对于技术读者来说,这个题目巧妙演示了“状态机”与“操作序列”的关系:每个操作都是一次状态转换,而目标是找到从初始状态到目标状态的转换路径。虽然源自古老传说,但其背后的对称性分析与现代编程中的状态优化、路径规划问题有相通之处。

IT 累计浏览 2,483

UyHiP趣题:如果每个人都随大流,结果会怎样?

这篇讲的是一个有趣的思想实验:在一个由 n 个人组成的群体中,如果每个人都严格遵循“多数好友的选择”来改变自己的行为,整个系统会走向何方? 文章以公司员工选择茶或咖啡的日常场景切入,构建了一个离散的动力学模型。每个节点(员工)的决策规则简单而明确:观察邻居(好友),若喝茶者占优则次日喝茶,反之则喝咖啡;若人数均等则维持现状。这是一个典型的基于局部信息的迭代过程,其核心在于“多数”这个阈值如何驱动全局状态的演化。 作者实际上探讨的是一个经典的“多数投票”规则下的收敛性问题。文章揭示了一个关键点:即使每个个体的决策逻辑如此简单,且没有全局协调,系统也总能在有限步数内收敛到一个稳定的“全局一致”状态——要么所有人喝茶,要么所有人喝咖啡,不再变化。这背后的数学原理,涉及图论、动力系统与平衡点分析,将一个看似社会学的问题,清晰地抽象为可证明的计算过程。 因此,这篇文章为我们理解“从众行为”提供了一个精确的技术视角。它并非简单批判盲从,而是通过形式化分析表明:在特定连接结构与简单规则下,群体的趋同演化是一种内建的、必然的数学结果。这种从微观规则到宏观结局的必然性,或许比任何道德说教都更能让我们思考社会动态的深层逻辑。

IT 累计浏览 2,602

轻博客产品市场几问(二)

这篇延续了作者对轻博客产品市场的深入观察,聚焦于此前未充分探讨的三个核心问题:用户关系、发展趋势与标签体系。作者从产品内在逻辑出发,指出轻博客的社交图谱不应简单复制传统社交网络,而需考虑内容兴趣的弱连接特性;在发展趋势上,分析了平台如何平衡创作者工具与社区生态;关于标签体系,则探讨了其作为内容组织与分发枢纽的关键作用。 文章并非提供标准答案,而是通过具体案例与推理,揭示了轻博客产品设计中容易被忽略的复杂性。例如,用户关系的构建如何影响内容消费效率,以及标签系统如何从“分类工具”演进为“算法推荐的基础结构”。这些讨论为从业者和观察者提供了一个审视同类产品的多维框架,尤其有助于理解为何一些看似微小的功能设计差异,最终会导致产品路径的分野。

IT 累计浏览 3,281

SNS背后的科学(4)―― 信息的传播

这篇文章继续SNS背后的科学系列,聚焦于信息在社交网络中的传播机制。作者从基础的传播模型入手,详细解释了信息如何沿着社交关系链扩散,以及不同网络结构(如小世界网络、无标度网络)对传播路径与速度的影响。 文章重点剖析了几个关键影响因素:用户活跃度与连接强弱决定了初始扩散的范围;内容的“社交吸引力”(如情感强度、实用价值)则影响其被转发和二次传播的可能性。通过具体的模拟数据和案例,作者指出,在强弱关系交织的复杂网络中,信息往往不是均匀扩散,而是依赖少数高连接度的节点实现“跳跃式”传播,这解释了为何某些话题能迅速引爆。 文中还对比了不同传播模型的适用场景,例如疾病传播模型(SIR)与信息扩散在机制上的异同。对于内容创作者或运营者而言,理解这些底层逻辑,有助于更有策略地设计内容与触达路径,而不仅仅是追逐表面的“爆款”。

IT 累计浏览 3,624

写在 0x20 岁之前

这篇讲的是一位年轻技术人在即将迈入“0x20”(即32岁)之际,对技术成长路径、社区参与和个人发展的一次真诚复盘与展望。作者的核心观点是,技术人的影响力不应局限于使用技术,更在于如何“反哺”技术生态。 文章从个人经历出发,提出了从技术“消费者”转变为“贡献者”的关键一步。这并不要求多么宏大的目标,而是始于具体行动:为常用开源项目提交一次代码补丁、参与一次社区讨论、甚至只是完善一次文档。作者以自身参与 Rust 和 Zig 等语言社区为例,分享了如何从“旁观者”真正融入一个小圈子,并在其中找到归属感与驱动力。 更深层的启发在于,这种“输出”不仅滋养社区,也反过来锤炼自身的思维与工程能力。作者指出,持续、公开的技术实践与分享,是构建个人技术品牌最扎实的路径。对于许多有心参与却不知从何开始的开发者而言,这篇文章没有提供高深方法论,而是描绘了一条从身边小事做起、自然融入社区的可行路径,这些朴素的行动指南或许正是最实用的“成人礼”。

IT 累计浏览 3,482

SNS背后的科学(1)从六度分隔到无尺度网络

这篇讲的是SNS背后的核心网络科学原理,从经典的“六度分隔”理论出发,延伸到更现代的“无尺度网络”模型。 作者首先带我们回顾了六度分隔:陌生人之间平均只需通过六个中间人就能建立联系,这描绘了社会关系的“小世界”特性。但现实远不止于此——文章接着揭示了另一个关键:大多数真实社会网络并非均匀分布,而是存在少数拥有海量连接的“超级节点”(比如社交达人或关键意见领袖),这正是无尺度网络的特征。 文章对比了这两种理论模型的差异:六度分隔强调路径的“短”,解释了信息快速扩散的可能性;而无尺度网络则关注连接分布的不均衡,解释了网络中心的形成与脆弱性。作者结合SNS平台的实例,指出理解后者对于把握信息传播规律、社区结构乃至平台韧性都至关重要,为我们观察社交媒体生态提供了一个更立体、更接近真实的科学视角。