中国建设银行官方网站 认证网站运营和seo的区别

news/2025/9/24 17:41:40/文章来源:
中国建设银行官方网站 认证,网站运营和seo的区别,WordPress恶意扫描,河北省建设局网站大家想必都知道#xff0c;数组和链表的搜索操作的时间复杂度都是O(N)的#xff0c;在数据量大的时候是非常耗时的。对于数组来说#xff0c;我们可以先排序#xff0c;然后使用二分搜索#xff0c;就能够将时间复杂度降低到O(logN)#xff0c;但是有序数组的插入是一个O…大家想必都知道数组和链表的搜索操作的时间复杂度都是O(N)的在数据量大的时候是非常耗时的。对于数组来说我们可以先排序然后使用二分搜索就能够将时间复杂度降低到O(logN)但是有序数组的插入是一个O(N)级别的操作。而链表的插入性能相对优秀却不能使用二分搜索快速查询。那么是否有一种数据结构即能够像链表一样快速插入数据又支持类似于二分搜索这样的查询算法呢答案是肯定的。William Pugh教授在1990发表的论文《Skip Lists: A Probabilistic Alternative to Balanced Trees》中提出的跳表就是这样一种有趣的数据结构。 跳表的结构 跳表的核心思想是通过建立索引层来缩短链表的搜索路径以达到快速搜索的目的。 假设我们从链表中的每两个节点中提取出一个建立一级索引然后再从每两个一级索引中提取一个建立二级索引以此类推就可以得到如下图所示的结构其中绿色节点表示索引。 在William Pugh的论文中使用了数组加链表的组合来实现跳表就如上图所示每一列索引具有相同的key使用一个数组来表示。还可以使用纯链表的形式来实现跳表我觉得这种方式更有助于理解跳表的原理如下图所示。 跳表的搜索 跳表的搜索需要从高层索引开始向下逐层搜索每一层的搜索方式和普通链表是一样的当后继节点的关键字大于搜索关键字时结束本层的搜索进入下一层继续搜索。下图展示了跳表搜索关键字 22 的过程其中红色部分就是搜索的路径。 从上图可以很直观的看出跳表的搜索和二分搜索是一样的其时间复杂度也是O(logN)的我们不妨简单证明一下。 假设跳表中有N个数据节点关键字每m个低级索引或数据节点中提取出一个作为高级索引那么 一级索引的数量 二级索引的数量 三级索引的数量 以此类推第i级索引的数量 最高级索引的数量 所以索引的最大层级 每一层的搜索次数 所以跳表的搜索次数 因为m是一个常量因此跳表的搜索时间复杂度是O(logN)的 跳表的多层索引结构使它的搜索方式非常灵活且强大 比如我们可能有这样的需求如果key不存在我们需要知道这个key邻近的nearKey是什么这用跳表很容易实现 搜索比key小且最接近key的关键字lowerKey如上图所示后继节点大于等于key时直接返回当前节点即可搜索比key大且最接近key的关键字higherKey如上图所示后继节点大于key时直接返回后继节点即可跳表还可以很容易的搜索一个关键字区间[fromKey, toKey]这点和B树很类似先搜索fromKey然后向后遍历链表取出所有小于等于toKey的数据即可 跳表的插入 到现在为止本文描述的都是理想状态下的跳表事实上我们不会严格的为跳表的每m个低级索引建立高级索引因为这样做复杂而且低效。所以William Pugh在他的论文中采用一种随机算法来为每个新增的节点随机建立索引下面是我用Java实现的版本。 int randomLevel(int m, int maxLevel) {ThreadLocalRandom r ThreadLocalRandom.current();int level 1;while (r.nextInt(m) 0 level maxLevel)level;return level; } 复制代码通过这种随机算法生成第i级索引的概率为 所以能够保证每一层索引的数量都接近于 这正好符合我们前面提到的索引层的性质。 Doug Lea大佬在Java的ConcurrentSkipListMap中使用了另外一种更加炫酷的随机算法的实现方式使用随机数末尾连续为1的位数作为索引的等级显然这种方式生成第i级索引的概率为 代码如下所示。 int rn ThreadLocalRandom.current().nextInt(); // 只有最高位和最低位都为0时才建立索引相当于为4个node建立一个索引 if ((rn 0x80000001) 0) {int level 1;// 建立索引的等级等于rn末尾连续为1的位数while (((rn 1) 1) ! 0)level; } 复制代码通过随机函数生成一个随机的索引等级之后创建一个新的索引列并将每一层的新索引链接到它的前驱索引的后面如果生成的随机等级大于当前跳表的最大索引等级需要添加一层新的索引。如下图所示其中红色虚线箭头表示重新建立的链接。 跳表的删除 跳表的删除操作比较简单先查询删除的关键字如果在索引层匹配到了关键字就向下删除所有的索引和数据节点如果没有匹配到索引只需要删除数据节点即可。其中有一点需要注意的是在删除索引后需要检测一下如果当前层的HEAD索引的后继索引为NIL则表示这一层已经没有索引了需要删除这个索引层。如下图所示红色箭头表示重新建立的链接。 跳表的实现 跳表的实现相对AVL树、红黑树等平衡二叉树来说简单了很多William Pugh的论文《Skip Lists: A Probabilistic Alternative to Balanced Trees》中提供了使用数组加链表实现跳表的伪代码我写了一个Java版本的纯链表实现的跳表并上传到了我的GitHub上有兴趣的朋友可以看一下。如果你需要在开发中使用跳表的话java.util.concurrent.ConcurrentSkipListMap是一个强大的实现而且它还是线程安全的。 转载于:https://juejin.im/post/5cdc38236fb9a0322d04ac7b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/916032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS 5 动画开发实战:从基础动效到高级交互动画

🎯 一、HarmonyOS动画系统概述 HarmonyOS提供了强大而灵活的动画系统,支持多种动画类型和交互效果:动画类型 适用场景 核心API属性动画 组件尺寸、位置、透明度等属性变化 animateTo(), Animation()转场动画 组件出…

HarmonyOS 5 高级动效实战:粒子系统、路径动画与物理动效开发

一、粒子系统动画开发 粒子动画通过大量微小元素的运动创造复杂视觉效果,如雨雪、火焰、爆炸等自然现象。 1. 基础粒子系统实现 import particle from @ohos.graphics.particle; import { BusinessError } from @ohos…

从范德蒙德矩阵聊开去.

范德蒙德矩阵 : \(\bm{V}=\left[ \begin{array}{ccc}1 & x_0 & x_0^2 & \cdots & x_0^{n-1} \\1 & x_1 & x_1^2 & \cdots & x_1^{n-1} \\1 & x_2 & x_2^2 & \cdots &…

全新 CloudPilot AI:嵌入 Kubernetes 的 SRE Agent,降本与韧性双提升!

全新 CloudPilot AI:嵌入 Kubernetes 的 SRE Agent,降本与韧性双提升!在生成式 AI 的浪潮下,计算资源,尤其是支撑所有服务运行与调度的 CPU 资源,已经从单纯的成本项目,升级为驱动创新速度与竞争力的底层基石。…

HarmonyOS 5 动画性能优化深度解析:从原理到实践

一、HarmonyOS动画系统架构与渲染原理 1. 动画系统核心架构 HarmonyOS的动画系统采用分层设计,包含三个关键层级:UI组件层:基于ArkUI的声明式动画API(如animateTo) 动画引擎层:负责插值计算和时间轴管理 渲染管线…

容桂网站制作公司系统类小说

类ReentrantLock具有完全互斥排他的效果,即同一时间只有一个线程在执行ReentrantLock.lock()后面的代码。这样虽然保证了线程的安全性,但是效率低下。JDK提供了ReentrantReadWriteLock读写锁,使用它可以加快效率,在某些不需要操作…

vue3 + antd +ts cron 选择器使用

https://github.com/shiyzhang/shiyzhang-cron shiyzhang-cron组件 使用方法:npm i shiyzhangcron 或 pnpm i shiyzhangcron 给ts添加类型声明文件在项目根目录下创建 types 文件夹 在 types 文件夹中创建 shiyzhangc…

HarmonyOS 5 性能优化全攻略:从启动加速到内存管理

🚀 一、启动速度优化 应用启动是用户体验的第一印象,优化启动速度至关重要。 1. 冷启动时延优化 通过精简初始化流程和资源预加载,可将启动时间缩短30%-50%。 // LaunchOptimization.ets import TaskPool from @oh…

#字符串执行函数——eval()、exec()和compile()详解

字符串执行函数——eval()、exec()和compile()详解 字符串类型代码的执行函数有三个,都是Python的内置函数。 eval() 执行字符串类型的代码,并返回最终结果。 exec() 执行字符串类型的代码。 #### compile() 将字符…

HarmonyOS 5 网络编程与数据存储实战:从RESTful API到本地持久化

🌐 一、网络编程基础与权限配置 HarmonyOS提供了强大的网络能力,支持HTTP/HTTPS、WebSocket、Socket等协议。 1. 权限声明与配置 在 module.json5中声明网络权限和加密通信权限: {"module": {"requ…

视觉传达设计网站深圳 德 网站建设

主要内容 自定义函数式接口函数式编程常用函数式接口 第一章 函数式接口 概念 函数式接口在java中指的是:有且只有一个抽象方法的接口 函数式接口,即适用于函数式编程场景的接口.而java中共的函数式编程体现就是Lambda,所以函数式接口就是可以适用于lambda使用的接口.只有…

OceanBase 向量数据库使用指南

OceanBase 向量数据库使用指南为了大家更好地使用 OceanBase 向量数据库, OceanBase 中负责研发向量能力的一众研发同学共同为大家写了这篇《OceanBase 向量数据库使用指南》,推荐各位老师收藏本文,以备不时之需。A…

【光照】[环境光ambient]以UnityURP为例

【从UnityURP开始探索游戏渲染】专栏-直达环境光的基本处理流程 $Cambient$‌环境光采集‌:获取场景环境光照信息 ‌环境光遮蔽‌:计算环境光遮挡关系 ‌环境光反射‌:根据材质属性反射环境光 ‌环境光混合‌:与其…

浅谈当前时代下大学生的就业择业及人生规划

浅谈当前时代下大学生的就业择业及人生规划: 叠甲阶段: 我不是专业的人生规划师,也不是手握各大厂资源和offer的人脉大佬。我只是一个在芸芸大学生中的其中一个小透明。眼界与资源都具有局限性。各位佬,同学权当汲…

网站备案一般要多久pr免费模板网站

转载自Thrift在Windows及Linux平台下的安装和使用示例 thrift介绍 Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的RPC(远程服务调用)框架。 本文主要目的是分别介绍在Windows及Linux平台下的Thrift安装步骤,以及实现一个简单的demo演示Thrif…

手把手教你做网站做网站设计的都转行干啥了

一、前言 spring为开发人员提供了两个搜索注解的工具类,分别是AnnotatedElementUtils和AnnotationUtils。在使用的时候,总是傻傻分不清,什么情况下使用哪一个。于是我做了如下的整理和总结。 二、AnnotationUtils官方解释 功能 用于处理注解&…

唐山网站专业制作网站的整体规划怎么写

重要: schema-defined aspects只支持singleton model,即 基于配置文件的aspects只支持单例模式 转载于:https://www.cnblogs.com/JsonShare/p/4638475.html

上传图片做网站维护微信公众号网页授权登录wordpress

题目:从一个由N个整数排列组成的整数序列中,自左向右不连续的选出一组整数,可以组成一个单调减小的子序列(如从{68 69 54 64 68 64 70 67 78 62 98 87}中我们可以选取出{69 68 64 62}这个子序列;当然,这里还有很多其他…

实用指南:玳瑁的嵌入式日记---0923(ARM)

实用指南:玳瑁的嵌入式日记---0923(ARM)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

个人博客搭建记录【hexo】

安装hexo 部署环境Node.js GitNode.js 部署,建议版本大于 12.0Node.js 安装中步骤中需要注意其中两处:Add to PATH 选上,使其集成到系统环境中: ​此处勾选会安装各种编程环境和软件,这对于安装hexo是不必要的: …