获得徽章 0
#挑战每日一条沸点#
day14
线段树概念
线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,因此有时需要离散化让空间压缩。有了线段树,我们就可以在O(logn)的时间内进行修改和查询
day14
线段树概念
线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,因此有时需要离散化让空间压缩。有了线段树,我们就可以在O(logn)的时间内进行修改和查询
展开
评论
点赞
#挑战每日一条沸点#
day 9
go原子操作
一个高并发的go程序在执行过程中,同一时刻只会有很少的Goroutine处于运行状态。Go语言的任务调度器为了公平起见,Goroutine会频繁的被换上和换下,它们不断的来回切换,从而达到并发的效果。\n\n所以,一个Goroutine在执行某一个操作时很有可能会被中断,这就是非原子操作,也是并发不安全产生的原因。\n\n原子操作就是在执行过程中是不会被中断的。在底层,这会由 CPU 提供芯片级别的支持,所以绝对有效。即使在拥有多 CPU 核心,或者多 CPU 的计算机系统中,原子操作的保证也是不可撼动的。
day 9
go原子操作
一个高并发的go程序在执行过程中,同一时刻只会有很少的Goroutine处于运行状态。Go语言的任务调度器为了公平起见,Goroutine会频繁的被换上和换下,它们不断的来回切换,从而达到并发的效果。\n\n所以,一个Goroutine在执行某一个操作时很有可能会被中断,这就是非原子操作,也是并发不安全产生的原因。\n\n原子操作就是在执行过程中是不会被中断的。在底层,这会由 CPU 提供芯片级别的支持,所以绝对有效。即使在拥有多 CPU 核心,或者多 CPU 的计算机系统中,原子操作的保证也是不可撼动的。
展开
评论
点赞
![[流泪]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_6.dde0d83.png)
![[绿帽子]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_91.57fc147.png)
![[奋斗]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_29.2801857.png)