首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

并查集详解(原理+代码实现+应用+优化)

那我们来写写代码: 假设我们拿到的是一个名字的数组,个数为n 那我们如何存储这些数据并跟编号建立映射呢?...并查集实现 那上面我们讲了一下并查集的原理,下面我们就来实现一个并查集,实现完再给大家做总结。 3.1 结构定义 那我们这里就不搞的像上面那样复杂了,因为我们上面的例子直接按编号去搞就行了。...用并查集去搞其实就很简单,我们来分析一下: 那这里呢我们还是用一个并查集,当然不一定非得写一个完整的并查集,就可以像上一题第二种方法那样,用到什么接口自己简单实现一下就行了。...所以我们可以考虑做这样一个优化: 优化思路: 每次union合并构建新树的时候,尽可能让树不变高 那如何做到呢?...写一下代码,也很简单: 6.2 路径压缩(进一步优化) 然后另外一个优化就是压缩路径,这里也简单提一下: 其实我们平时写都不太需要考虑这个东西,除非数据量特别大的时候,可能有些路径会比较长,导致效率变慢

3K20

如何提升Web页面的性能,HTML和css代码优化!

怎么进步Web页面的功用,许多开发人员从多个方面来下手如JavaScript、图画优化、服务器配置,文件压缩或是调整CSS。...验证 优化网页的一种方法就是合法的HTML代码很容易调试,且占内存少,耗费资源少,易于解析和渲染运行起来更快。而非法的HTML代码让实现响应式设计变得异常艰难。...删除不必要的代码 ;没有必要为自关闭的元素添加结束标签;Boolean 属性不需要赋值,如果存在则为True; 代码格式 格式一致性使得HTML代码易于阅读,理解,优化,调试。...CSS 虽然本文讲解的是如何优化HTML,下面介绍了一些使用css的基本技能: 避免内联css 最多使用ID类 一次 当涉及多个元素时,可使用Class来实现。...如果你觉得文章不错,那就关注一下笔者的 “ 天码程序 ” 公众号吧,每天为你提供优质的文章!

2.4K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    高并下如何做变量的自增与自减

    1变量的自增与自减 变量的自增自减相信大家都会,一般情况下直接++或--就可以了。但是实际情况我们可能需要考虑并发问题,多线程情况下,如果我们直接计算。计算结果可能就会不准确。...Java的原子类主要采用CAS + 自旋实现,但是在高并发情况下,还是存在一些性能问题的: 高并发量的情况下,由于真正更新成功的线程占少数,容易导致循环次数过多,浪费时间,并且浪费线程资源。...由于需要保证变量真正的共享,**「缓存一致性」**开销变大。 之前我写了一篇关于如何手写Atomic原子类的文章,有兴趣的同学可以看看: 没用过Java原子类?...但是实际上我们的系统可能有多个实列,上面的LongAdder只是JVM级别的,在自己的实列中获取可以实现安全的自增。...100); } long value = atomicVar.incrementAndGet(); // 多线程调用该方法,不会造成数据丢失 return value; } 上面的代码就实现了在分布式系统中的原子自增

    77210

    复杂业务场景下,如何优雅的使用设计模式来优化代码?

    1、引言 本文以一个实际案例来介绍在解决业务需求的路上,如何通过常用的设计模式来逐级优化我们的代码,以把我们所了解的到设计模式真实的应用于实战。...2、背景 假定我们现在有一个订单流程管理系统,这个系统对于用户发起的一笔订单,需要你编写代码按照以下环节进行依次处理 “注:本文不会对每个环节的实现细节进行描述,读者也不必了解这每个环节的实现,我们只需要关注代码架构设计...union网关也就是并集网关,也就是说代理的处理器全部都执行成功才继续传递责任链,需要注意的是这个类也是BizOrderHandler的一个实现,只不过它的内部没有逻辑,只是对proxyHandlers...    private String nextFlow; } 这个事件可以在订单流发起的时候丢到消息队列里面,然后就可以进行订单流的流转了,下面我们来看消息处理逻辑,咱们使用模板方法再次进行一次代码优化...6、总结 本文通过一次简单的需求演进分别讲述了责任链、模板方法、策略模式、工厂模式、代理模式、观察者模式的使用,通过实际场景介绍下不同需求下如何通过适合的设计模式来解决问题。 最后说一句(求关注!

    34810

    代码优化艺术:如何通过设计模式实现高效的功能模块

    目录前言单例模式工厂方法模式策略模式观察者模式结束语前言在软件工程中,代码优化是一个永恒的话题,也是我们在程序开发中必须面对的命题,尤其是在日常开发中的软件维护的时候,更是如此。...那么本文就来探讨几种常用的设计模式,并展示如何将它们应用于实际开发中,以实现代码优化。...; subject.removeObserver(observer); }}番外篇:设计模式接下来再来分享一下关于设计模式相关的内容,不用多说就知道设计模式在实现高效功能模块方面起着非常重要的作用...,是软件工程中的经验总结,也是前任开发者们在长期的实践中提炼出的解决特定问题的通用模板,关于如何利用设计模式来实现高效功能模块的优势,这里分享几个有代表性的点。...上面介绍了几种常用的设计模式,并提供了具体的源码示例,深入理解了它们在实际开发中的应用,希望能帮助大家在实际开发中实现代码优化。

    13921

    如何移植并使用Linux内核的通用链表(附完整代码实现)

    本篇文章详细介绍了Linux内核的通用链表是如何实现的,对于经常使用的函数都给出了详细的说明和测试用例,并且移植了Linux内核的链表结构,在任意平台都可以方便的调用内核已经写好的函数。...但是 Linux内核的链表实现可以说比较特殊,只有前驱和后继指针,而没有数据域。链表的头文件是在include/list.h(Linux2.6内核)下。...下面看具体的代码。 ?   ...链表删除并插入节点 内核实现 /** * list_move - delete from one list and add as another's head * @list: the entry...使用该宏替代前面的方法。这个时候就要用到container_of这个宏了。(再一次感叹内核设计者的伟大)。   关于container_of宏将在下一篇文章详细介绍,这里先知道如何使用就可以。

    1.5K20

    项目不知道如何做性能优化?不妨试一下代码分割

    二、如何查看代码利用率 也许你注意到了,我们上一节最后提到的一个指标是「代码利用率」,你可能是第一次听说这个概念,这里我解释一下它的计算方式: 代码利用率 = 你页面中实际被执行的代码 / 你页面中引入的代码...* 100% 你可能会困惑在实际开发中如何得到这个值,别担心,通过使用 Chrome 开发者工具(很遗憾,目前只有 Chrome 支持这一功能),你就可以迅速对你的 Web 应用进行分析,得到当前页面下的代码利用率状态...,步骤如下: 打开 Chrome Dev Tool; 按下 Cmd + Shift + P or Ctrl + Shift + P ; 输入 Coverage,并选择第一个出现的选项; ?...的代码说明了它具体是如何被实现的: const getTheme = (themeName) => import(`....五、小结 至此,我们讲解了所有有关 Code Splitting 的知识,并告诉你了一些神奇的「魔法注释」让你对分割后的代码有更多的掌控,希望你能将上面的技术灵活运用在你的项目中,开发出更加激动人心,如丝般顺滑的应用

    90110

    什么是热点代码,Java编译器如何利用它来实现性能优化

    什么是热点代码热点代码指的是在程序运行时被频繁执行的代码段。这些代码段通常是程序的关键部分,对性能有较大影响。热点代码的识别和优化在Java编译器中被广泛使用,以提高程序的执行效率。...Java编译器通过JIT(即时编译器)优化热点代码。JIT编译器会对热点代码进行动态编译,将其转换为本地机器指令,从而提高执行速度。...以下是Java编译器利用热点代码进行优化的一般流程:Profiling(性能分析):Java虚拟机(JVM)会跟踪应用程序的执行信息,收集有关代码执行频度和执行时间的数据。...编译优化:对于被识别为热点代码的方法或循环,JIT编译器会将其编译成高性能的本地机器码。编译过程中,优化技术如内联函数、循环展开、死代码删除等也会被应用。...通过以上优化,JIT编译器实现了即时编译和动态优化,使得热点代码的执行速度大大提高,从而提升整个应用程序的性能。这种优化技术在现代的Java虚拟机中得到了广泛应用。

    68381

    patch-package 实现原理:如何保存恢复 node_modules 下的代码改动?

    有时候我们需要修改 node_modules 下的一些代码,但是 node_modules 不会提交到 git 仓库,改动保存不下来,怎么办呢? 这时候可以用 patch-package 这个工具。...比如我对 node_modules 下的 acorn 代码做了一些修改: 加了一个 a.js 的文件: 在项目目录下执行 npx patch-package acorn 之后,就会生成这样一个目录:...这样能保证每次拉取下来的代码都包含了对 node_modules 的改动。 如何使用我们学会了,那它是怎么实现的呢?...那应用 patches 的内容是怎么实现的呢? patches 如何被应用的?...总结 当我们需要对 node_modules 下的代码做改动的时候,可以通过 patch-package xxx 生成 patches 文件,它可以被提交到 git 仓库,然后再拉下来的代码就可以通过

    2.7K20

    如何在 SCSS 中实现复杂的嵌套选择器并确保代码的可维护性?

    在 SCSS 中实现复杂的嵌套选择器时,可以遵循以下几个原则以确保代码的可维护性: 限制嵌套层级:避免层级过深的嵌套,最好不要超过三级。...过多的嵌套会增加代码的复杂性和选择器的特异性,降低代码的可读性和维护性。 使用父元素选择器:尽量使用父元素选择器 & 来限定样式的作用范围,避免使用全局选择器或依赖于特定的 HTML 结构。...利用 SCSS 的特性:SCSS 提供了许多方便的特性,如变量、函数、混合器等,可以帮助简化和优化代码。...例如,可以使用变量来存储复杂选择器的重复部分,使用函数来计算样式值,使用混合器来组合多个选择器等。...综上所述,通过限制嵌套层级、使用父元素选择器、提取共用样式、使用 BEM 命名规范和利用 SCSS 的特性,可以在 SCSS 中实现复杂的嵌套选择器并确保代码的可维护性。

    8800

    如何利用 SCSS 的变量和混合(Mixin)功能来创建可复用的样式组件,并确保在不同场景下的兼容性?

    使用 SCSS 的变量和混合功能可以方便地创建可复用的样式组件,并确保在不同场景下的兼容性。下面是具体的步骤: 创建变量:使用 符号定义变量,例如 primary-color: #005500;。...使用变量和混合:在需要使用变量和混合的地方,使用 符号引用变量,例如 color: primary-color;;使用 @include 关键字引用混合,例如 @include bordered-box...这样可以方便地重用变量和混合,并确保样式的一致性。 兼容性处理:在项目中使用 SCSS 的变量和混合时,需要考虑不同浏览器和设备的兼容性。...border-radius: 4px; } @else { border-radius: 50%; } } 在使用该混合时,可以根据需要设置 $legacy-support 变量的值...通过使用 SCSS 的变量和混合功能,并结合条件语句来处理兼容性,可以方便地创建可复用的样式组件,并确保在不同场景下的兼容性。这样可以提高代码的可维护性和可重用性,减少样式冗余,提高开发效率。

    24310

    在Vue中如何不影响业务代码的情况下实现页面埋点

    实现思路 我们的目的是在不引入外部SDK,业务代码方完全无感知的情况下实现页面的日志采集功能。...由于在Vue中每一次的页面跳转都会进入路由的beforeEach和afterEach钩子函数,因此我们将借助路由实现业务代码无感知的埋点功能。...,但是用户在每个页面的停留时间我们将很难统计到。...因此考虑在离开页面时发送日志信息,并且在页面跳转时将上一个页面的一些信息也一并加入日志信息中。 客户端日志发送 在Vue中我们将在router.afterEach钩子函数里做这个操作。...优化 我们是在假设用户每一次的操作都会发送一次请求来实现的,但在实际环境中用户的操作大部分都不会给后台发送请求。此时我们可以考虑在主页面是加点击事件记录下当前页面的信息,鼠标位置等。

    1.7K31

    如何用2 KB代码实现3D赛车游戏?2kPlus Jam大赛了解一下

    本文作者 Frank 是一名资深游戏开发者,在本文中,他详细介绍了如何灵活运用代码压缩、编译、随机数生成、代码复用、设计模式等十八般武艺仅仅通过 2KB 的代码就能实现一款强大的 3D 赛车游戏。...这个编译器会删掉所有空白,把变量重命名为 1 个字母的字符,并且做了一些简单的优化。你可以通过下面的链接使用这个编译器:https://clocompiler.appspot.com/home。...通常,在代码写一个超大的函数并不是一个好习惯,我们需要将其分解成子函数。因此,为了方便理解,下面的叙述将其分为几部分。 首先我们需要了解玩家所在位置的道路信息。...此外,还有一个很好的优化方法,可以在道路变得很细时按距离缩小道路分辨率。这样就在没有明显的质量损失的情况下,将绘图次数减少了一半以上,从而获得了巨大的性能提升。 ?...这是我非常自豪的部分——能够显示游戏标题并使用粗体的「impact」字体。如果我面临的空间上的要求更紧一些,这些东西会是第一个被我删掉的。 按下鼠标后,游戏就会开始,HUD 显示剩余的时间和当前距离。

    1.2K30

    开发 | 如何利用 TVM 优化深度学习GPU op?教你用几十行Python代码实现2-3倍提升

    来自图森未来的胡玉炜写了一个教程介绍了如何利用 TVM 来优化深度学习的 gpu op,通过几十行 python 代码获得比已有 tf 实现两三倍的提升。」...这篇文章提供了一个很好的参考,教会开发者如何在 TVM 的帮助下编写高性能 GPU 运算符内核。...团队采用的是 Depthwise Convolution(即 topi.nn.depthwise_conv2d_nchw)作为示例,并演示了如何可以改进已经手动优化的 TensorFlow 中的 CUDA...不平铺情况下,每个线程计算 1 个输出元素并加载 3x3 输入数据。16 线程共有 9x16 个负载。 ? 平铺情况下,每个线程分别计算 2x2 个输出元素并加载 4x4 输入数据。...线程数调参 在一个 cuda 块中实现 32 x 32 的线程,如下: ? num_thread_y 和 num_thread_x 这两个参数如何调才能得到最优解?

    1.8K80
    领券