最新要闻
- 2023年上半年剧集报告发布:国产剧口碑上涨显著
- 微动态丨GDDR7显存明年就有了!RTX 50可能先吃螃蟹
- 800V高压架构+二代XNGP辅助驾驶上车!小鹏G6上市:20.99万起 滚动
- iGame人气王!七彩虹iGame RTX 4060 Ultra W OC显卡图赏
- 每日观察!《异世界》魔径—給异世界点颜色看看 楔子
- 【全球速看料】山东龙凤四胞胎同圆大学梦 网友:四倍辛苦 四倍幸福
- 当前信息:可以换电的纯电MPV来了!全新上汽大通大家MIFA 9车电分离版上市
- 旗袍发型教程_旗袍发型-天天即时看
- 阿斯巴甜将被世卫列为“可能致癌物质”:元气森林、奈雪火速回应
- 丫丫解锁新玩具竹笼:一刻也没闲着
- 无糖可乐不能喝了?或含致癌物阿斯巴甜
- 天天观焦点:Steam将AI作图游戏拒之门外!除非能证明拥有版权
- 环球热讯:红米Redmi Pad 2平板跑分曝光:配骁龙680 或近期发布
- 新市街道开展“健康无毒 喜迎大运”6.26禁毒宣传日活动
- 天天观点:内爆致5人遇难!美国泰坦号观光潜艇失事残骸打捞上岸
- 1200mAh锂电池+三档风力调节:佳格手持小风扇8.9元狂促_全球今日讯
手机
光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
- 搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 视点!美国首位女总统即将诞生?拜登恐怕要提前下岗,美政坛迎来变局?
- 当前速递!用理想仪器实现更好的颗粒 德国新帕泰克亮相CPHI & PMEC China获好评
- 微粒贷怎么申请开通 开通方法如下
- 焦点简讯:心疼!这位40岁的云南缉毒警,已是满头白发
家电
算法导论-第14章-数据结构的扩张-全球新消息
本章讨论通过扩展红黑树构造出的两种数据结构。14.1节介绍一种支持一般动态集合上顺序统计操作的数据结构。通过这种数据结构,我们可以快速地找到一个集合中的第 \(i\) 小的数,或给出一个指定元素在集合的全序中的位置。14.2节抽象出数据结构的扩张过程,并给出一个简化红黑树扩张的定理。14.3节使用这个定理来设计一种用于维护由区间(如时间区间)构成的动态集合的数据结构。给定一个要查询的区间,我们能快速地找到集合中一个能与其重叠的区间。
(相关资料图)
14.1 动态顺序统计
对于一个无序的集合,我们能够在 \(\Omicron(n)\) 的时间内确定任何的顺序统计量(order statistic)。本节将介绍如何修改红黑树,使得可以在 \(\Omicron(\log n)\) 时间内确定。我们还将看到如何在 \(\Omicron(\log n)\) 时间内计算一个元素的秩,即它在集合线性序中的位置。
在一个由 \(n\) 个元素组成的集合中,第 \(i\) 个顺序统计量(order statistic)是该集合中第 \(i\) 小的元素。
OS树的定义
OS树,又称顺序统计树(Order-Statistic tree),是一棵红黑树在每个结点上扩充一个 \(size\) 属性而得到的,如下图所示。在红黑树的结点 \(x\) 中,除了 \(x.key、x.color、x.left、x.right、x.p\) 之外,还包括 \(x.size\)属性,这个属性包含了以 \(x\) 为根的子树(包括 \(x\) 本身)的结点数,即这棵子树的大小。如果定义 \(T.nil=0\),即哨兵的大小为0,则有
\[x.size=x.left.size+x.right.size+1\]在一棵顺序统计树中,并不要求关键字各不相同。例如,上图中的树就包含了两个值为14的关键字和两个值为21的关键字。在有相等关键字的情况下,前面秩的定义就不再合适。为此,我们通过定义一个元素的秩为在中序遍历时输出的位置来消除原先定义的不确定性。如上图所示,存储在黑色结点的关键字14的秩为5,存储在红色结点的关键字14的秩为6。
选择问题及算法
选择问题:在以 \(x\) 为根的子树中,查找第 \(i\) 个最小元素。
OS-SELECT(x, i) r = x.left.size + 1 if i == r return x // 若i=r,则返回x elseif i < r return OS-SELECT(x.left, i) // 若ir,则递归地在x的右子树中继续寻找第i-r个元素
OS-SELECT
的运行时间为 \(\Omicron(\log n)\)。
求秩问题及算法
求秩问题:在OS树中,查找给定结点 \(x\) 的rank。
OS-RANK(T, x) r = x.left.size + 1 y = x while y != T.root if y == y.p.right r = r + y.p.left.size + 1 y = y.p return r
OS-RANK
的运行时间为 \(\Omicron(\log n)\)。
OS树的维护:插入
OS树的插入和红黑树相似,分两个阶段。第一阶段,从根开始沿树下降,将新结点插入到树的末梢;第二阶段,沿树上升,做一些变色和旋转操作维持红黑树性质。
第一阶段,为了维护子树的规模,对由根至叶子的路径上遍历的每一个结点 \(x\),\(x.size = x.size + 1\)。新增结点的的 \(size\) 置1。由于一条遍历的路径上共有 \(\Omicron(\log n)\) 个结点,故维护 \(size\) 属性的额外代价为 \(\Omicron(\log n)\)。
第二阶段,变色不改变 \(size\),旋转可能改变 \(size\)。由于旋转是局部操作,只有轴上的两个结点的 \(size\) 违反定义,只需在旋转操作后,对违反性质的结点 \(size\) 进行修改。参考13.2节的左旋代码,在下面增加两行
y.size = x.sizex.size = x.left.size + x.right.size + 1
因为在红黑树的插入过程中最多进行两次旋转,所以在第二阶段更新 \(size\) 属性只需要 \(\Omicron(1)\) 的额外时间。因此,对一棵有 \(n\) 个结点的OS树插入元素所需要的总时间为 \(\Omicron(\log n)\)。
OS树的维护:删除
Phase1:物理上删除 \(y\),在删除 \(y\) 时从 \(y\) 上溯至根,将所经历的节点的 \(size\) 均减1;
- 附加成本:\(\Omicron(\log n)\)。
Phase2:采用变色和旋转方法,从叶子向上调整一变色不改变 \(size\);一旋转可能改变 \(size\),至多有3个旋转;
- 附加成本:\(\Omicron(\log n)\)。
14.2 如何扩充数据结构
扩充一种数据结构可以分为4个步骤:
- 选择一种基础数据结构。
- 确定基础数据结构中要维护的附加信息。
- 检验基础数据结构上的基本修改操作能否维护附加信息。
- 设计一些新操作。
定理:红黑树的扩张设 \(f\) 是 \(n\) 个结点的红黑树 \(T\) 扩张的属性,且假设对任一结点 \(x\),\(f\) 的值仅依赖于结点 \(x、x.left\) 和 \(x.right\) 的信息,还可能包括 \(x.left.f\) 和 \(x.right.f\)。那么,我们可以在插入和删除操作期间对 \(T\) 的所有结点的 \(f\) 值进行维护,并且不影响这两个操作的\(\Omicron(\log n)\) 渐近时间性能。
14.3 区间树
基本概念
- 区间:一个事件占用的时间。
- 闭区间:实数的有序对 \([t_1, t_2]\),其中 \(t_1 \le t_2\)。
- 区间的对象表示:\([t_1, t_2]\)可以用对象 \(i\) 表示,有两个属性:
- \(low[i] = t_1\) // 起点或低点
- \(high[i] = t_2\) // 终点或高点
- 区间的重叠:\(i \bigcap i" \ne \varnothing \Leftrightarrow (low[i] \le high[i"]) and (low[i"] \le high[i])\)。
区间重叠的三分律
任何两个区间 \(i\) 和 \(i"\) 满足区间三分律(interval trichotomy),即下面三条性质之一成立:
- \(i\) 和 \(i"\) 重叠。
- \(i\) 在 \(i"\) 的左边(也就是 \(i.high \lt i’.low\))。
- \(i\) 在 \(i"\) 的右边(也就是 \(i".high \lt i.low\))。
红黑树的扩充:区间树
区间树(interval tree)是一种对动态集合进行维护的红黑树,其中每个元素 \(x\) 都包含一个区间 \(x.int\)。区间树支持下列操作:
INTERVAL-INSERT(T, x)
:将包含区间属性 \(int\) 的元素 \(x\) 插入到区间树 \(T\) 中。INTERVAL-DELETE(T, x)
:从区间树 \(T\) 中删除元素 \(x\)。INTERVAL-SEARCH(T, i)
:返回一个指向区间树 \(T\) 中元素 \(x\) 的指针,使 \(x.int\) 与 \(i\) 重叠;若此元素不存在,则返回 \(T.nil\)。
在上图的区间树中,每个结点 \(x\) 包含一个区间,显示在结点中上方;一个以 \(x\) 为根的子树中所包含的区间端点的最大值显示在结点中下方。这棵树的中序遍历得到按左端点顺序排列的各个结点。
下面按照14.2节中介绍的四个步骤设计区间树:
第一步:基础数据结构(Step1: Underlying data structure)
选择红黑树作为区间树的基础数据结构,每个结点 \(x\) 包含区间属性 \(x.int\),且 \(x\) 的关键字为 \(x.int.low\)。因此,该数据结构按中序遍历出的就是按低端点的次序排列的各区间。
第二步:附加信息(Step2: Additional information)
每个结点 \(x\) 中除了自身区间信息之外,还需要增加一个属性 \(x.max\),它是以 \(x\) 为根的子树中所有区间端点的最大值。
第三步:维护信息(Step3: Maintaining information)
我们必须验证有 \(n\) 个结点区间树上的插入和删除操作能否在 \(\Omicron(\log n)\) 时间内完成。通过给定区间 \(x.int\) 和结点 \(x\) 的子结点的 \(max\)值,可以确定 \(x.max\)值:
\[x.max=max\{x.int.high, x.left.max, x.right.max\}\]这样,根据红黑树的扩充定理可得,插入和删除操作的运行时间为 \(\Omicron(\log n)\)。
第四步:设计新操作(Step 4: Developing new operations)
我们只需要增加唯一的新操作INTERVAL-SEARCH(T, i)
,它是用来找出树 \(T\) 中与区间 \(i\) 重叠的那个结点。若树中与 \(i\) 重叠的结点不存在,则下面过程返回指向哨兵 \(T.nil\) 的指针。伪代码如下:
INTERVAL-SEARCH(T. i) x = T.root while x ≠ T.nil and i does not overlap x.int if x.left ≠ T.nil and x.left.max ≥ i.low x = x.left // overlap in left subtree or no overlap in right subtree else x = x.right // no overlap in left subtree return x
查找与 \(i\) 重叠的区间 \(x\) 的过程从 \(T.root\) 开始,逐步向下搜索。当找到一个重叠区间或者 \(x\) 指向 \(T.nil\) 时过程结束。由于基本循环每次迭代耗费 \(\Omicron(1)\) 时间,又因为 \(n\) 个结点的红黑树高度为 \(\Omicron(\log n)\),所以INTERVAL-SEARCH的运行时间为 \(\Omicron(\log n)\)。
区间树上重叠区间的查找算法
对红黑树进行修改,使其成为一颗区间树,并实现区间树上的重叠区间查找算法。
输入:生成区间树,文件名: insert.txt(文件如下)。文件格式:第一行为待插入数据的个数,第二行之后每一行表示一个区间。初始时树应为空,按顺序插入。
3018 2345 4630 342 1713 189 1832 4343 4521 246 1549 5014 2211 2238 4315 1619 2436 428 137 1442 5048 490 14 1524 2534 4310 1731 4017 1816 2533 37
输出:控制台直接打印查找结果。
import java.io.IOException;import java.nio.file.Files;import java.nio.file.Paths;import java.util.ArrayList;import java.util.List;import java.util.Scanner;/** * 区间类定义 */class Interval { int left; // 左端点 int right; // 右端点 public Interval(int left, int right) { this.left = left; this.right = right; }}/** * 红黑树颜色枚举类定义 */enum Color { RED, BLACK}/** * 区间树结点类 */class IntervalNode { Interval interval; // 区间 int max; // 区间端点的最大值 Color color; // 结点颜色 IntervalNode left; // 左孩子 IntervalNode right; // 右孩子 IntervalNode p; // 父结点 public IntervalNode(Interval interval) { this.interval = interval; this.max = interval.right; this.color = Color.RED; this.left = null; this.right = null; this.p = null; }}/** * 区间树 */public class IntervalTree { private IntervalNode root; private IntervalNode nil; // 哨兵 public IntervalTree() { this.nil = new IntervalNode(new Interval(-1, -1)); nil.color = Color.BLACK; root = nil; } public void insert(Interval interval) { IntervalNode intervalNode = new IntervalNode(interval); IntervalNode y = nil; IntervalNode x = root; while (x != nil) { y = x; if (intervalNode.interval.right > x.max) { x.max = intervalNode.interval.right; } if (intervalNode.interval.left < x.interval.left) { x = x.left; } else { x = x.right; } } intervalNode.p = y; if (y == nil) { root = intervalNode; } else if (intervalNode.interval.left < y.interval.left) { y.left = intervalNode; } else { y.right = intervalNode; } intervalNode.left = nil; intervalNode.right = nil; intervalNode.color = Color.RED; insertFix(intervalNode); } public void insertFix(IntervalNode z) { IntervalNode y; while (z.p.color == Color.RED) { if (z.p == z.p.p.left) { // z的父节点是一个左孩子? y = z.p.p.right; // y是z的叔结点 if (y.color == Color.RED) { // z的父结点和叔结点都是红色? z.p.color = Color.BLACK; // case 1 y.color = Color.BLACK; // case 1 z.p.p.color = Color.RED; // case 1 z = z.p.p; // case 1 //System.out.println("case 1: z的父结点是左孩子,z的父结点和叔结点都是红色"); } else { if (z == z.p.right) { // z的叔结点y是黑色且z是一个右孩子 z = z.p; // case 2 leftRotate(z); // case 2 //System.out.println("case 2: z的父结点是左孩子,z的父结点是红色,z的叔结点y是黑色,z是一个右孩子"); } // z的叔结点y是黑色且z是一个左孩子 z.p.color = Color.BLACK; // case 3 z.p.p.color = Color.RED; // case 3 rightRotate(z.p.p); // case 3 //System.out.println("case 3: z的父结点是左孩子,z的父结点是红色,z的叔结点y是黑色,z是一个左孩子"); } } else { // z的父节点是一个右孩子? y = z.p.p.left; // y是z的叔结点 if (y.color == Color.RED) { // z的父结点和叔结点都是红色? z.p.color = Color.BLACK; // case 4 y.color = Color.BLACK; // case 4 z.p.p.color = Color.RED; // case 4 z = z.p.p; // case 4 //System.out.println("case 4: z的父结点是右孩子,z的父结点和叔结点都是红色"); } else { if (z == z.p.left) { // z的叔结点y是黑色且z是一个左孩子 z = z.p; // case 5 rightRotate(z); // case 5 //System.out.println("case 5: z的父结点是右孩子,z的父结点是红色,z的叔结点y是黑色,z是一个左孩子"); } // z的叔结点y是黑色且z是一个左孩子 z.p.color = Color.BLACK; // case 6 z.p.p.color = Color.RED; // case 6 leftRotate(z.p.p); // case 6 //System.out.println("case 6: z的父结点是右孩子,z的父结点是红色,z的叔结点y是黑色,z是一个右孩子"); } } } root.color = Color.BLACK; } /** * 左旋 * * @param x 左旋 */ public void leftRotate(IntervalNode x) { IntervalNode y = x.right; x.right = y.left; if (y.left != nil) { y.left.p = x; } y.p = x.p; if (x.p == nil) { root = y; } else if (x == x.p.left) { x.p.left = y; } else { x.p.right = y; } y.left = x; x.p = y; // 计算结点以x和y为根的子树中所有区间端点的最大值 y.max = x.max; x.max = Math.max(x.interval.right, Math.max(x.left.max, x.right.max)); } /** * 右旋 * * @param x 右旋 */ public void rightRotate(IntervalNode x) { IntervalNode y = x.left; x.left = y.right; if (y.right != nil) { y.right.p = x; } y.p = x.p; if (x.p == nil) { root = y; } else if (x == x.p.right) { x.p.right = y; } else { x.p.left = y; } y.right = x; x.p = y; // 计算结点以x和y为根的子树中所有区间端点的最大值 y.max = x.max; x.max = Math.max(x.interval.right, Math.max(x.left.max, x.right.max)); } /** * 区间是否重叠 * * @param i1 区间1 * @param i2 区间2 * @return boolean */ public static boolean isOverLap(Interval i1, Interval i2) { return (i1.left <= i2.right) && (i1.right >= i2.left); } /** * 区间搜索 * * @param intervalTree 区间树 * @param interval 待搜索的区间 * @return IntervalNode */ public IntervalNode intervalSearch(IntervalTree intervalTree, Interval interval) { IntervalNode x = intervalTree.root; while (x != nil && !isOverLap(interval, x.interval)) { if (x.left != nil && x.left.max >= interval.left) { x = x.left; } else { x = x.right; } } return x; } /** * 中序遍历 * * @param node 区间树结点 * @param inList 返回集合 */ public void inOrder(IntervalNode node, List inList) { if (node == nil) return; inOrder(node.left, inList); inList.add(node); inOrder(node.right, inList); } public static void main(String[] args) throws IOException { // 读取insert.txt文件中的数据(第一行为数组长度, 第二行为数组(int类型)的内容) String path = "C:\\Projects\\IDEAProjects\\algorithms\\src\\main\\java\\ch14\\insert.txt"; List readAllLines = Files.readAllLines(Paths.get(path)); int count = Integer.parseInt(readAllLines.get(0)); IntervalTree intervalTree = new IntervalTree(); for (int i = 1; i < readAllLines.size(); i++) { String[] split = readAllLines.get(i).split("\\s+"); int left = Integer.parseInt(split[0]); int right = Integer.parseInt(split[1]); Interval interval = new Interval(left, right); intervalTree.insert(interval); } List list = new ArrayList<>(); intervalTree.inOrder(intervalTree.root, list); for (IntervalNode intervalNode : list) { System.out.println("interval-left: " + intervalNode.interval.left + "\t" + " interval-right: " + intervalNode.interval.right + "\t\t" + " max: " + intervalNode.max); } Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int left = scanner.nextInt(); int right = scanner.nextInt(); IntervalNode res = intervalTree.intervalSearch(intervalTree, new Interval(left, right)); if (res != intervalTree.nil) { System.out.println("查询结果:" + res.interval.left + "\t" + res.interval.right + "\t" + res.color); }else { System.out.println("查询结果:查不到重叠区间"); } } }}
运行代码,可以看到中序遍历的结果正确,查询[16, 17]这个区间。首先在区间树中查询根结点[30, 34]区间,不符合,然后查询左子树[13, 18]区间,是重叠区间,查询返回结果正确!
interval-left: 0 interval-right: 1 max: 1interval-left: 2 interval-right: 17 max: 17interval-left: 4 interval-right: 15 max: 15interval-left: 6 interval-right: 15 max: 22interval-left: 7 interval-right: 14 max: 14interval-left: 8 interval-right: 13 max: 14interval-left: 9 interval-right: 18 max: 22interval-left: 10 interval-right: 17 max: 17interval-left: 11 interval-right: 22 max: 22interval-left: 13 interval-right: 18 max: 25interval-left: 14 interval-right: 22 max: 22interval-left: 15 interval-right: 16 max: 25interval-left: 16 interval-right: 25 max: 25interval-left: 17 interval-right: 18 max: 25interval-left: 18 interval-right: 23 max: 25interval-left: 19 interval-right: 24 max: 24interval-left: 21 interval-right: 24 max: 25interval-left: 24 interval-right: 25 max: 25interval-left: 30 interval-right: 34 max: 50interval-left: 31 interval-right: 40 max: 40interval-left: 32 interval-right: 43 max: 43interval-left: 33 interval-right: 37 max: 37interval-left: 34 interval-right: 43 max: 43interval-left: 36 interval-right: 42 max: 50interval-left: 38 interval-right: 43 max: 50interval-left: 42 interval-right: 50 max: 50interval-left: 43 interval-right: 45 max: 50interval-left: 45 interval-right: 46 max: 46interval-left: 48 interval-right: 49 max: 50interval-left: 49 interval-right: 50 max: 50
关键词:
算法导论-第14章-数据结构的扩张-全球新消息
货币市场日报:6月29日
2023年上半年剧集报告发布:国产剧口碑上涨显著
微动态丨GDDR7显存明年就有了!RTX 50可能先吃螃蟹
800V高压架构+二代XNGP辅助驾驶上车!小鹏G6上市:20.99万起 滚动
iGame人气王!七彩虹iGame RTX 4060 Ultra W OC显卡图赏
文心一言 VS 讯飞星火 VS chatgpt (51)-- 算法导论6.2 3题|全球时讯
每日观察!《异世界》魔径—給异世界点颜色看看 楔子
世界看点:华为宣布2024年推出面向商用的5.5G全套网络设备
【全球速看料】山东龙凤四胞胎同圆大学梦 网友:四倍辛苦 四倍幸福
当前信息:可以换电的纯电MPV来了!全新上汽大通大家MIFA 9车电分离版上市
世界热推荐:Kubernetes 对象以及部署nginx服务示例(四)
记录--写一个高德地图巡航功能的小DEMO
旗袍发型教程_旗袍发型-天天即时看
世界实时:债市日报:6月29日
阿斯巴甜将被世卫列为“可能致癌物质”:元气森林、奈雪火速回应
丫丫解锁新玩具竹笼:一刻也没闲着
无糖可乐不能喝了?或含致癌物阿斯巴甜
天天观焦点:Steam将AI作图游戏拒之门外!除非能证明拥有版权
环球热讯:红米Redmi Pad 2平板跑分曝光:配骁龙680 或近期发布
新市街道开展“健康无毒 喜迎大运”6.26禁毒宣传日活动
天天观点:内爆致5人遇难!美国泰坦号观光潜艇失事残骸打捞上岸
1200mAh锂电池+三档风力调节:佳格手持小风扇8.9元狂促_全球今日讯
世界时讯:最好的Windows掌机!ROG Ally暴力魔改8TB SSD:容量陡增8倍
当前热讯:重要提醒!暴雪国服游戏退款申请明日将截止
【当前独家】张颂文北影毕业典礼演讲:希望你们每天都在进步
【世界速看料】不吝赐教的意思(赐教的意思)
Spring Cloud 如何引入云原生网关,创新微服务架构|天天最新
拈花云科基于 Apache DolphinScheduler 在文旅业态下的实践
.NET 个人博客-添加RSS订阅功能 世界快播
如何将视频文件.h264和音频文件.mp3复用为输出文件output.mp4?
天天热资讯!商品日报(6月29日):尿素再度拉涨超5% 供应利多刺激甲醇盘中涨超3%
联发科MT6825芯片组获上海MWC 2023亚洲突破性设备创新大奖!手机卫星可双向通信_焦点资讯
支持Type-C充电:英菲克F1无线鼠标24.9元抄底
天天热消息:做错N多年!央视科普:鸡蛋别再放到冰箱门上了
要求罚金30亿美元!Chatgpt涉嫌信息盗窃被起诉 全球视讯
官方辟谣激情誓师女生考508分:女生考了600多分 考得特别好 环球焦点
全球低水足迹倡议(LWFi)联盟扩容,伊利“双足迹”开启全链减碳新篇章_世界视点
IDA的使用-1_世界新消息
clop勒索软件攻击活动频发,西门子能源中招_世界观察
精彩看点:构建数字工厂丨数据分析与图表视图模型的配置用法
券商数字化创新场景数据中台实践
热门看点:C# 序列化大小写 序列化对象为大小写 JsonConvert.SerializeObject
新款2024MGCyberster泄露 当前热讯
第十四届夏季达沃斯论坛闭幕
天天快讯:暴露年龄!时隔16年 Office“大眼夹”回归Windows 11:功能焕然一新
16.5亿打造!《封神》妲己首次亮相引热议 网友称妆造诡异在拍画皮吗
苹果之后 三星被指侵犯加州理工Wi-Fi专利:索赔可达数十亿美元-世界新消息
“快乐水”不快乐了!阿斯巴甜将被定为可能致癌物质|天天热资讯
华为发布F5.5G智简全光联接四大创新:万兆时代来了
讯息:大宗交易:蓝色光标成交6967.8万元,折价1.96%(06-29)
解读 RocketMQ 5.0 全新的高可用设计
探秘华为云盘古大模型:AI for industries的身体力行_报道
天天速读:高铁踹老头底被曝
科创板收盘播报:科创50指数跌0.67% 新股时创能源较发行价涨63.91%|全球热闻
如何使用 iOS 17 将照片变成 iMessage 贴纸
多家高校下月起停用微信支付 微信团队致歉:即刻修正
鳄鱼独居16年产子 科学家:濒临灭绝物种的生存策略
南极人纯棉抗菌袜子8双14.9元:吸湿排汗 亲肤透气
【全球报资讯】多家高校下月起停用微信支付 腾讯回应网友不买账:专家称反垄断太有意义
Intel四代至强命运多舛:突曝严重Bug 部分停止出货
精彩看点:司法部出手!这项业务,有大变化!
【后端面经-Java】公平锁和加锁流程 全球简讯
讯息:玖章算术与百度智能云达成合作,「NineData SQL 开发」成为百度智能云主推的数据库工具
【高端访谈】中非经贸博览会将助力刚中贸易提质升级——访刚果(金)外贸部长布萨_当前视讯
央企改革三年重点任务考核结果出炉:三大运营商排名一一曝光
摩托骑手被汽车撞下高架 现场惨!官方通报:系被追尾 伤者暂无生命危险
立白洗衣液大促:山茶幽香、除菌除螨 10斤到手38元_每日简讯
MWC牌面!魅族Flyme Auto上央视:车机互联打通软硬件|当前快看
露牙媚眼羞涩笑主播圈粉中老年人:当当网李国庆在线求合作
每日消息!索尼ZV-E1“打鸡血”:免费升级4K 120p拍摄
年内8家“袖珍”IPO公司登陆港交所-天天观天下
鼎通科技(688668):该股换手率大于8%(06-29)_世界速讯
性能4倍于1060!RTX 4060今天开售:2399元 英伟达诚意感受到没-当前速读
世界即时看!疑因不满项目谈判被提前泄露:特斯拉或已放弃在西班牙建厂!
今日讯!内蒙古康巴什区:让“梧桐树”更加枝繁叶茂
环球播报:装机选500W电源就是万金油?你又错了
海南环岛旅游公路主线路基段即将完工:12月底通车 串联全省景点|独家
Windows自带杀软又出问题:Defender新版CPU占用过高|环球焦点
每部手机都有的出厂标签要改了!工信部:7月1日起正式启用新型进网许可标志
90后宝妈沙漠边缘送奶茶月入7000 我能赚钱生娃:直言男人除了赚钱还能干啥? 当前速递
卢卡申科:普京曾有意杀死普里戈任,我劝他不要鲁莽行事
数字经济催生的低代码开发浪潮,JNPF带你轻松实现应用程序拓展! 天天日报
直播平台源码功能分享:直播回放功能的实现_当前看点
【天天快播报】云顶新耀-B早盘持续走高涨近9% 中金维持跑赢行业评级
能在车上点外卖了!特斯拉或将推出应用商城 可支持第三方应用与服务 热点聚焦
法庭文件出纰漏 五星大饭店运营成本曝光|实时焦点
剑指比亚迪海豚 宝骏云朵外观细节图发布:全球顶级设计师操刀 环球观察
40度高温杀回马枪!南方多地加入高温群聊蒸桑拿
传奇女歌手麦当娜进ICU:因细菌感染_每日看点
宁德时代联合长安汽车等共设动力电池公司
js的Set数据类型
Linux_Centos 增加中文字体支持|环球视点
直播系统聊天技术(九):千万级实时直播弹幕的技术实践
天天看热讯:【Oracle】使用PL/SQL实现冒泡排序
BackboneJS教程_编程入门自学教程_菜鸟教程-免费教程分享 环球关注
环球快讯:智能合约在数字人民币中的应用与治理
2023年普通高校招生录取工作即将开始,教育部发出提醒——高校招生录取期间谨防受骗
世界速讯:47度高温!印度遭极端“烤验”:近期已造成多人死亡
网易游戏公布暑假未成年人限玩时间:大模型干预不理性消费_全球热头条