row_number 和 cte 使用实例:考场监考安排
row_number 和 cte 使用实例:考场监考安排
- 考场监考安排
- 使用 cte 模拟两个表的原始数据
- 使用 master..spt_values 进行数据填充
- 优先安排时长较长的考试
- 使用 cte 安排第一个需要安排的科目
- 统计老师已有的监考时长
- 尝试使用 cte 递归,进行下一场考试安排(尝试了三个方向才成功)
- 第一个尝试,使用考试科目递归,失败
- 第二个尝试,使用老师数据及考试批次递归,失败
- 第三次尝试,用 for xml 继承数据
- 最后用字符串切割和列转行,排出监考排班表
- 小结
考场监考安排
问题出自问答区 python 频道的一个问答,原问答地址:https://ask.csdn.net/questions/7901104。
题主对提问的方式不太熟悉,他其实已经提了一系列关于监考安排这个问题的问答了,每次都略有遗漏,所以老顾把完整的需求从新描述一下。
有若干场不同科目的考试,每个科目的考试时长不同;有若干位不同科目的老师去监考,每个考试需要1名监考老师,监考老师不得监考同科目的考试。
请尽量安排老师所用的总监考时长为最平均的接近值。
题主这里给出了29位不同科目的老师,还有77场不同科目的考试。老顾用 python 通过编程的方式已经实现了这个需求,平均每位老师监考总时长在200至250之间。
但是,这个题目老顾觉得用数据库查询的方式也可以做,于是就拿来练练手。
使用 cte 模拟两个表的原始数据
with 考试 as (select '语文' 科目,13 场次,120 时长union all select '英语',16,100union all select '数学',16,100union all select '物理',8,60union all select '道法',8,60union all select '历史',8,50union all select '化学',8,50
),老师 as (select '语文' 科目,4 numunion all select '数学',5union all select '英语',6union all select '物理',3union all select '道法',3union all select '历史',3union all select '生物',3union all select '体育',2
)
select * from 考试


使用 master…spt_values 进行数据填充
因为题主给的数据就是这样的,所以,咱也不知道具体每个老师叫啥,每个科目啥时候举行,有没有时间冲突,咱就当他没有好了。但是,这样的汇总数据是无法进行计算的,我们需要把所有的汇总数据展开成单项。这里使用了mssql系统库中自带的一个数据表:master…spt_values,使用这个表可以很方便的扩展成单项,进行数据补全。相信看过我以前 sql 文章的小伙伴对这个已经很熟悉了。
with ... -- 前边的 with 不再重复
,teacher as (select 科目,number from 老师cross apply (select number from master..spt_valueswhere type='p' and number between 1 and num) b
)
select * from teacher

很容易就得到了单个老师的排列及科目了。
在这里,不得不说,cross/outer apply 很好用,可以直接引用前边查询表中的列,而 mysql 则未提供这种方式,写个关联查询为了引用前边的列,也很费劲。
优先安排时长较长的考试
这个是一个朴素的想法,先把废时间的安排出去,然后,谁的总时长少,谁就多安排一点,这样的话,平均时长就差不多了,所以我们对考试场次按时长做个倒序分配序号,来确定分配优先级,并作为 cte 递归的依据。
with ...
,exam as (select *,row_number() over(order by 时长 desc) sn from 考试
)
select * from exam

使用 cte 安排第一个需要安排的科目
第一个需要安排的科目自然是语文了,根据 sn 得出的结论嘛。
我们需要安排13个非语文科目的老师进行语文考试的监考,为了每次安排不那么一样,还要用 newid() 函数协助一下随机排序,那么大概得指令就是这样了。
with ...
,sc as (select b.*,a.科目 as 监考,时长,a.sn from exam across apply (select *,row_number() over(order by newid()) nidfrom teacherwhere 科目<>a.科目) bwhere sn = 1 and nid<=场次
)
select * from sc

第一个科目很容易就安排出去了,现在准备攻坚了,递归之后的科目。
统计老师已有的监考时长
在递归之前,我们先考虑一下,对之后的安排我们需要做两件事:
1、对所有老师的已安排监考的时长进行统计,选择时长最短的老师进行下一场监考安排
2、递归数据需要排重,不能粗暴的直接用 sn = a.sn + 1 这样的方式了,因为我们已经有了13场 sn 等于1的安排了
先按老师的时长统计进行一下计算,我们修改下 select * from sc 的内容,看看这29位老师每个人的第一场考试后的时长。
select a.*,isnull(总时长,0) 总时长
from teacher a
left join (select 科目,number,sum(时长) 总时长 from scgroup by 科目,number
) b on a.科目=b.科目 and a.number=b.number

尝试使用 cte 递归,进行下一场考试安排(尝试了三个方向才成功)

由于在 cte 递归中,无法使用 top 或 offset 之类的运算,所以可以看到,我们刚才实现第一场的内容时,都是用的 row_number 做的变动,这里,我们同样使用 row_number 变通一下


变动过程中是各种报错啊。。。。嘿嘿
第一个尝试,使用考试科目递归,失败
,sc as (select convert(nvarchar(max),b.科目) 科目,number,时长,a.科目 as 监考,a.sn from exam across apply (select *,row_number() over(order by newid()) nidfrom teacherwhere 科目<>a.科目) bwhere sn = 1 and nid<=场次union allselect convert(nvarchar(max),'下一场'),0,场次,e.科目,e.snfrom (select *,row_number() over(order by sn desc) rid from sc) ainner join exam e on a.sn+1=e.snwhere rid=1)
select * from sc
order by sn

不出预料的,每个下一场都是13场,和语文一样的场次,老顾是没办法解决这个问题了,只好换个思路。
第二个尝试,使用老师数据及考试批次递归,失败
with ...
,sc as (select 科目,number,(case when nid<=场次 then 用时+时长 else 用时 end) 用时,(case when nid<=场次 then 监考 else null end) 监考,批次,场次,nidfrom (select t.*,时长,e.科目 监考,1 批次,场次,row_number() over(order by 场次 desc,newid()) nidfrom teacher tleft join exam e on t.科目<>e.科目 and e.sn=1) aunion allselect 科目,number,(case when nid<=场次 then 用时+时长 else 用时 end) 用时,(case when nid<=场次 then 监考 else null end) 监考,批次,场次,row_number() over(order by @@rowcount)from (select s.科目,number,用时,e.科目 监考,批次 + 1 批次,e.场次,时长,row_number() over(order by (case when s.科目=e.科目 then 1 else 0 end),用时,newid()) nidfrom sc s,exam ewhere s.批次+1 = e.sn) a
)
select * from sc
order by 批次,nid

结果发现。。。。cte 递归,原来是一行数据一行数据的递归下来的,不是整个表一起递归的,难怪不让用 join 之类的指令。由于是一行一行递归的,所以这里的 row_number 得不到1之外的序号了,如果再次引入 teacher 表,则无法继承考试用时了,只好再换个思路。
第三次尝试,用 for xml 继承数据
,sc as (select * from exam across apply (select convert(nvarchar(max),stuff((select ';' + 科目 + ':' + convert(varchar,number) + ':' + convert(varchar,(case when nid<=场次 then 时长 else 0 end))from (select t.*,时长,e.科目 监考,1 批次,场次,row_number() over(order by 场次 desc,newid()) nidfrom teacher tleft join exam e on t.科目<>e.科目 and e.sn=a.sn) a--where nid <= 场次for xml path('')),1,1,'')) z) bwhere a.sn=1union allselect b.*,convert(nvarchar(max),'')from sc a,exam bwhere a.sn + 1 = b.sn
)
select * from sc

可以看到,我们可以把所有老师的用时都放到组合数据了,然后用切割字符串方式再回复成表数据进行计算,这样就可以继续尝试了。
这里老顾就直接用正则了,毕竟切割的话还是比较麻烦的,需要好几次列转行,我用正则可以省略一次。。。。如果有小伙伴想在 mssql 里使用正则,可以看老顾以前的文章,或者直接下载老顾准备好的 clr 指令《mssql正则clr及函数,追加Group分组支持》,然后直接运行里边的指令就可以使用老顾下边的正则指令了。

竟然还有这么多不让用的,pivot 也不能用就有点麻烦了,好在老顾的正则不错,可以单独提取数据,不用 pivot 也可以。
with ...
,sc as (select * from exam across apply (select convert(nvarchar(max),stuff((select ';' + 科目 + ':' + convert(varchar,number) + ':' + convert(varchar,时长)from (select t.*,时长,e.科目 监考,1 批次,场次,row_number() over(order by 场次 desc,newid()) nidfrom teacher tleft join exam e on t.科目<>e.科目 and e.sn=a.sn) awhere nid <= 场次for xml path('')),1,1,'')) curr) bcross apply (select convert(nvarchar(max),stuff((select ';' + 科目 + ':' + convert(varchar,number) + ':' + convert(varchar,(case when nid<= 场次 then 时长 else 0 end))from (select t.*,时长,e.科目 监考,1 批次,场次,row_number() over(order by 场次 desc,newid()) nidfrom teacher tleft join exam e on t.科目<>e.科目 and e.sn=a.sn) afor xml path('')),1,1,'')) sc) cwhere a.sn=1union allselect 科目,场次,时长,sn,c,z from (select b.*,a.scfrom sc a,exam bwhere a.sn + 1 = b.sn) across apply (select stuff((select ';' + tn + ':' + tsn + ':' + convert(varchar,(case when nid<=场次 then 用时+时长 else 用时 end))from (select *,row_number() over(order by 用时,newid()) nid from (select master.dbo.RegexMatch(match,'[^:]+') tn,master.dbo.RegexMatch(match,'(?<=:)\d+(?=:)') tsn,convert(int,master.dbo.RegexMatch(match,'(?<=:)\d+(?=$)')) 用时from master.dbo.RegexMatches(sc,'([^;:]+):(\d+):(\d+)')) a) afor xml path('')),1,1,'') z) bcross apply (select stuff((select ';' + tn + ':' + tsn + ':' + convert(varchar,用时)from (select *,row_number() over(order by 用时,newid()) nid from (select master.dbo.RegexMatch(match,'[^:]+') tn,master.dbo.RegexMatch(match,'(?<=:)\d+(?=:)') tsn,convert(int,master.dbo.RegexMatch(match,'(?<=:)\d+(?=$)')) 用时from master.dbo.RegexMatches(sc,'([^;:]+):(\d+):(\d+)')) a) awhere nid<=场次for xml path('')),1,1,'') c) c
)
select * from sc

嗯,最后一行 sc 是所有老师的用时情况,每一行的 curr 是该科目考试所安排的老师,我们先看看总用时情况:
历史:1:230;生物:3:230;数学:4:250;道法:3:250;语文:3:250;数学:2:250;生物:1:250;数学:1:250;体育:1:200;道法:2:200;语文:1:200;物理:3:200;英语:2:200;历史:2:200;语文:4:200;语文:2:200;英语:3:200;物理:1:200;英语:4:230;英语:5:230;英语:1:230;体育:2:230;历史:3:230;数学:5:230;物理:2:230;数学:3:230;英语:6:240;道法:1:240;生物:2:240
一共 29 个老师,每个老师200到250的用时,结果验证正确,真不容易,为了绕过限制,这次的指令写的很复杂,如果有小伙伴想了解详细内容,可以在评论区扣我。
最后用字符串切割和列转行,排出监考排班表
with 考试 as (select '语文' 科目,13 场次,120 时长union all select '英语',16,100union all select '数学',16,100union all select '物理',8,60union all select '道法',8,60union all select '历史',8,50union all select '化学',8,50
),老师 as (select '语文' 科目,4 numunion all select '数学',5union all select '英语',6union all select '物理',3union all select '道法',3union all select '历史',3union all select '生物',3union all select '体育',2
),teacher as (select 科目,numberfrom 老师cross apply (select number from master..spt_valueswhere type='p' and number between 1 and num) b
),exam as (select *,row_number() over(order by 时长 desc) sn from 考试
),sc as (select * from exam across apply (select convert(nvarchar(max),stuff((select ';' + 科目 + ':' + convert(varchar,number) + ':' + convert(varchar,时长)from (select t.*,时长,e.科目 监考,1 批次,场次,row_number() over(order by 场次 desc,t.科目,number) nidfrom teacher tleft join exam e on t.科目<>e.科目 and e.sn=a.sn) awhere nid <= 场次for xml path('')),1,1,'')) curr) bcross apply (select convert(nvarchar(max),stuff((select ';' + 科目 + ':' + convert(varchar,number) + ':' + convert(varchar,(case when nid<= 场次 then 时长 else 0 end))from (select t.*,时长,e.科目 监考,1 批次,场次,row_number() over(order by 场次 desc,t.科目,number) nidfrom teacher tleft join exam e on t.科目<>e.科目 and e.sn=a.sn) afor xml path('')),1,1,'')) sc) cwhere a.sn=1union allselect 科目,场次,时长,sn,c,z from (select b.*,a.scfrom sc a,exam bwhere a.sn + 1 = b.sn) across apply (select stuff((select ';' + tn + ':' + tsn + ':' + convert(varchar,(case when nid<=场次 then 用时+时长 else 用时 end))from (select *,row_number() over(order by (case when tn=科目 then 1 else 0 end),用时,tn,tsn) nid from (select master.dbo.RegexMatch(match,'[^:]+') tn,master.dbo.RegexMatch(match,'(?<=:)\d+(?=:)') tsn,convert(int,master.dbo.RegexMatch(match,'(?<=:)\d+(?=$)')) 用时from master.dbo.RegexMatches(sc,'([^;:]+):(\d+):(\d+)')) a) afor xml path('')),1,1,'') z) bcross apply (select stuff((select ';' + tn + ':' + tsn + ':' + convert(varchar,时长)from (select *,row_number() over(order by (case when tn=科目 then 1 else 0 end),用时,tn,tsn) nid from (select master.dbo.RegexMatch(match,'[^:]+') tn,master.dbo.RegexMatch(match,'(?<=:)\d+(?=:)') tsn,convert(int,master.dbo.RegexMatch(match,'(?<=:)\d+(?=$)')) 用时from master.dbo.RegexMatches(sc,'([^;:]+):(\d+):(\d+)')) a) awhere nid<=场次for xml path('')),1,1,'') c) c
)select tn 科目,tsn,isnull(语文,0) 语文 ,isnull(数学,0) 数学,isnull(英语,0) 英语,isnull(物理,0) 物理,isnull(道法,0) 道法,isnull(历史,0) 历史,isnull(化学,0) 化学,isnull(语文,0) + isnull(数学,0) + isnull(英语,0) + isnull(物理,0) + isnull(道法,0) + isnull(历史,0) + isnull(化学,0) 总用时
from (select 科目,b.* from sccross apply (select master.dbo.RegexMatch(match,'[^:]+') tn,master.dbo.RegexMatch(match,'(?<=:)\d+(?=:)') tsn,convert(int,master.dbo.RegexMatch(match,'(?<=:)\d+(?=$)')) 用时from master.dbo.RegexMatches(curr,'([^;:]+):(\d+):(\d+)')) b
) a
pivot(max(用时) for 科目 in (语文,英语,数学,物理,道法,历史,化学)) p
order by 1 desc,2
----------------------
科目 tsn 语文 数学 英语 物理 道法 历史 化学 总用时
---- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
语文 1 0 100 100 0 0 50 0 250
语文 2 0 100 100 0 0 0 0 200
语文 3 0 100 100 0 0 0 0 200
语文 4 0 100 100 0 0 0 0 200
英语 1 0 100 0 60 60 0 0 220
英语 2 0 100 0 60 60 0 0 220
英语 3 0 100 0 0 60 0 50 210
英语 4 0 100 0 0 60 0 50 210
英语 5 0 100 0 0 60 0 50 210
英语 6 0 100 0 0 60 0 50 210
物理 1 0 100 100 0 0 50 0 250
物理 2 0 100 100 0 0 50 0 250
物理 3 0 100 100 0 0 50 0 250
体育 1 0 100 100 0 0 50 0 250
体育 2 0 100 100 0 0 50 0 250
数学 1 120 0 0 60 0 0 50 230
数学 2 120 0 0 60 0 0 50 230
数学 3 120 0 0 60 0 50 0 230
数学 4 120 0 0 60 0 50 0 230
数学 5 0 0 100 60 60 0 0 220
生物 1 120 0 100 0 0 0 0 220
生物 2 120 0 0 0 60 0 50 230
生物 3 120 0 0 60 0 0 50 230
历史 1 120 0 100 0 0 0 0 220
历史 2 120 0 100 0 0 0 0 220
历史 3 120 0 100 0 0 0 0 220
道法 1 120 100 0 0 0 0 0 220
道法 2 120 0 100 0 0 0 0 220
道法 3 120 0 100 0 0 0 0 220(29 行受影响)
由于每个递归里,使用了两个 cross ,所以,暂时把 order by newid 去掉了,否则两个 cross 里的结果会造成不一致,不过,结果总算出来了。
小结
这一次老顾也是拼尽全力去搞了次数据库查询指令实现,嗯也是闲的。好在经过这一次实现,发现了以前很多没有注意到的细节,并且,最终解决掉了一些限制。
最后 sc cte 表里的 cross 其实可以合并成1个切割数据,然后再附加两个 cross 就可以使用 newid() 进行随机排序了,不过老顾折腾这半天才实现出来,暂时真的没心力去继续搞了。
说实话,这个需求,用代码来实现其实很简单,不管是我已经用 python 实现的,还是其他编程语言,都不复杂, 那怕是 mssql 本身,加上流程控制,也很简单的。老顾是执拗劲上来了,非要用查询指令本身进行实现。大家大可不必学老顾这么拧哦。

相关文章:
row_number 和 cte 使用实例:考场监考安排
row_number 和 cte 使用实例:考场监考安排 考场监考安排使用 cte 模拟两个表的原始数据使用 master..spt_values 进行数据填充优先安排时长较长的考试使用 cte 安排第一个需要安排的科目统计老师已有的监考时长尝试使用 cte 递归,进行下一场考试安排&…...
2023天梯赛记录
文章目录 L2-001 紧急救援L2-002 链表去重L2-004 这是二叉搜索树吗?L2-005 集合相似度L2-006 树的遍历L2-007 家庭房产L2-010 排座位L2-011 玩转二叉树L2-012 关于堆的判断L2-013 红色警报L2-014 列车调度L2-016 愿天下有情人都是失散多年的兄妹L2-019 悄悄关注L2-0…...
被吐槽 GitHub仓 库太大,直接 600M 瘦身到 6M,这下舒服了
大家好,我是小富~ 前言 忙里偷闲学习了点技术写了点demo代码,打算提交到我那 2000Star 的Github仓库上,居然发现有5个Issues,最近的一条日期已经是2022/8/1了,以前我还真没留意过这些,我这人懒…...
OpenGL(三)——着色器
目录 一、前言 二、Shader 2 Shader 2.1 顶点着色器 2.2 片段着色器 三、APP 2 Shader 四、顶点颜色属性 五、着色器类C 一、前言 着色器Shader是运行在GPU上的小程序,为图形渲染管线的某个特定部分而运行。各阶段着色器之间无法通信,只有输入和输…...
【MySQL】单表查询
一、表的准备 查询操作的SQL演示将基于下面这四张表进行,我们先创建好这四张数据表,并为其添加数据。 1、第一张表为部门表,名称为包含三个字段:部门编号(deptno),部门名称(dname&…...
第一章 安装Unity
使用Unity开发游戏的话,首先要安装Unity Hub和Unity Editor两个软件。大家可以去官方地址下载:https://unity.cn/releases/full/2020 (这里我们选择的是2020版本) Unity Hub 是安装 Unity Editor、创建项目、管理帐户和许可证的主…...
20230425----重返学习-vue项目-vue自定义指令-vue-cli的配置
day-057-fifty-seven-20230425-vue项目-vue自定义指令-vue-cli的配置 vue项目 vuex版 普通版纯axios:切换页面,就会重新发送一次ajax请求普通版升级:vuex版vuex的常用功能 vuex 数据通信vuex 缓存数据 前进后退,切换页面&#…...
el-input 只能输入整数(包括正数、负数、0)或者只能输入整数(包括正数、负数、0)和小数
使用el-input-number标签 也可以使用typenumbe和v-model.number属性,两者结合使用,能满足大多数需求,如果还不满足,可以再结合正则表达式过滤 <el-input v-model.number"value" type"number" /> el-i…...
Docker Compose的常用命令与docker-compose.yml脚本属性配置
Docker Compose的常用命令与配置 常见命令ps:列出所有运行容器logs:查看服务日志输出port:打印绑定的公共端口build:构建或者重新构建服务start:启动指定服务已存在的容器stop:停止已运行的服务的容器&…...
with语句和上下文管理器(py编程)
1. with语句的使用 基础班向文件中写入数据的示例代码: # 1、以写的方式打开文件f open("1.txt", "w")# 2、写入文件内容f.write("hello world")# 3、关闭文件f.close()代码说明: 文件使用完后必须关闭,因为文件对象会占用操作系统…...
《JavaEE初阶》HTTP协议和HTTPS
《JavaEE初阶》HTTP协议和HTTPS 文章目录 《JavaEE初阶》HTTP协议和HTTPSHTTP协议是应用层协议:使用Fiddler抓取HTTP请求和响应:Fiddler的下载和基本使用:Fiddler的中间代理人身份:其他抓包工具: 先简单认识HTTP请求与HTTP响应:HTTP请求:HTTP响应: HTTP请求详解:首行࿱…...
微信小程序 | 基于高德地图+ChatGPT实现旅游规划小程序
🎈🎈效果预览🎈🎈 ❤ 路劲规划 ❤ 功能总览 ❤ ChatGPT交互 一、需求背景 五一假期即即将到来,在大家都阳过之后,截止到目前这应该是最安全的一个假期。所以出去旅游想必是大多数人的选择。 然后&#x…...
Excel技能之实用技巧,高手私藏
今天来讲一下Excel技巧,工作常用,高手私藏。能帮到你是我最大的荣幸。 与其加班熬夜赶进度,不如下班学习提效率。能力有成长,效率提上去,自然不用加班。 消化吸收,工作中立马使用,感觉真不错。…...
黑马程序员Java零基础视频教程笔记-运算符
文章目录 一、算数运算符详解和综合练习二、隐式转换和强制转换三、字符串和字符的加操作四、自增自减运算符五、赋值运算符和关系运算符六、四种逻辑运算符七、短路逻辑运算符八、三元运算符 一、算数运算符详解和综合练习 1. 运算符和表达式 ① 运算符:对字面量…...
Microsoft Data Loss Prevention(DLP)部署方案
目录 一、前言 二、部署流程 步骤一:确定数据需求 步骤二:规划信息保护策略...
win系统使用frp端口映射实现内网穿透,配置“任务计划程序”提高稳定性
Github下载最新版frp: https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_windows_amd64.zip 解压把frpc.exe和frpc.ini放到D:\program\frp目录下,修改frpc.ini内容如下: [common] server_addr 服务器域名或IP,假设…...
python工具方法 39 大图裁剪为小图|小图还原成大图(含生成大图伪标签)
在进行遥感影像的处理中,通常都是几万x几万的大型影像,这给数据标注(图像尺寸过大使标注软件不能正常打开或过大给标注带来困难)、训练模型(只能使用小图)、测试图片(在小图上预测需要还原成大图)、生成伪标签(需要大图的伪标签,而不是小图的)都带来了困难。针对此进…...
MUSIC算法仿真
MUSIC算法原理及仿真 DOA波达方向估计MUSIC算法概述MUSIC算法原理MUSIC算法MATLB仿真 DOA波达方向估计 DOA(Direction Of Arrival)波达方向是指通过阵列信号处理来估计来波的方向,这里的信源可能是多个,角度也有多个。DOA技术主要…...
redis 数据类型详解 以及 redis适用场景场合
1. MySqlMemcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇…...
python基于轻量级YOLOv5的生猪检测+状态识别分析系统
在我之前的一篇文章中有过生猪检测盒状态识别相关的项目实践,如下: 《Python基于yolov4实现生猪检测及状态识》 感兴趣的话可以自行移步阅读,这里主要是基于同样的技术思想,将原始体积较大的yolov4模型做无缝替换,使…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
