CMU15-445-Spring-2023-Project #0 - C++ Primer

前置任务。

Task #1 - Copy-On-Write Trie

Copy-on-write (COW) Trie 在进行修改时,不会立即复制整个数据结构。相反,它会在需要修改的节点被多个引用的时候才进行复制。当要对某个节点进行写操作(添加子节点或者继续向下insert)时,如果该节点不是唯一被引用的(即有子节点),那么会先进行复制,确保只有修改的那个副本被修改,而其他引用不受影响。这样做的好处是,可以节省内存并且减少不必要的复制操作,只有在需要的时候才进行实际的复制。
实现三种op:

  • Get(key)
    • 注意指针的转换:const auto *res = dynamic_cast<const TrieNodeWithValue<T> *>(cur.get());
  • Put(key, value)
    • 首先找到最后一个已有节点,这些节点用栈保存;
    • 创建TrieNodeWithValue,需要区分是否有children;
    • 从该节点向上创建不存在的节点;
    • 最后根据栈中信息,继续向上clone已有节点;
  • Delete(key)
    • 与Put类似的思想,只是不需要创建新节点;

Task #2 - Concurrent Key-Value Store

实现多线程下的COW Trie,支持多个读者,单个写者的模式,当修改trie时也能够读取trie,write_lock_锁全局。

Task #3 - Debugging

vscode中添加codelldb配置信息进行debug。
注意wsl环境的随机数设置与GradeScope不同,按照discord上说的修改test内容:

  auto trie = Trie();trie = trie.Put<uint32_t>("65", 25);trie = trie.Put<uint32_t>("61", 65);trie = trie.Put<uint32_t>("82", 84);trie = trie.Put<uint32_t>("2", 42);trie = trie.Put<uint32_t>("16", 67);trie = trie.Put<uint32_t>("94", 53);trie = trie.Put<uint32_t>("20", 35);trie = trie.Put<uint32_t>("3", 57);trie = trie.Put<uint32_t>("93", 30);trie = trie.Put<uint32_t>("75", 29);

Task #4 - SQL String Functions

需要实现upper和lower两个SQL函数。
(1)在string_expression.h中实现函数逻辑。
(2)在BusTub中注册函数,以便SQL框架可以在用户执行SQL时在plan_func_call.cpp中调用函数。

实验结果

image.png

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

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

相关文章

花了一小时,拿python手搓了一个考研背单词软件

听说没有好用的电脑端背单词软件&#xff1f;只好麻烦一下&#xff0c;花了一小时&#xff0c;拿python手搓了一个考研背单词软件。 代码已经开源在我的github上&#xff0c;欢迎大家STAR&#xff01; 其中&#xff0c;数据是存放在sqlite中&#xff0c;形近词跳转是根据jaro …

OpenHarmony源码转换器—多线程特性转换

本文讨论了如何将多线程的 Java 代码转换为 OpenHarmony ArkTS 代码​ 一、简介 Java 内存共享模型 以下示例伪代码和示意图展示了如何使用内存共享模型解决生产者消费者问题。 生产者消费者与共享内存间交互示意图 为了避免不同生产者或消费者同时访问一块共享内存的容器时…

【小程序开发】解决 HBuilder X “本项目类型无法运行到小程序模拟器”

今天遇到一个奇怪的问题&#xff0c;从git导入的微信小程序项目准备运行到小程序模拟器时菜单没有展示出模拟器工具列表&#xff0c;而是展示了这么一个子菜单“本项目类型无法运行到小程序模拟器&#xff0c;点击看详情”。如下图&#xff1a; 点击是跳转到一个web链接。 我通…

【零基础入门TypeScript】判断条件和循环

目录 定环 无限循环 示例&#xff1a;while 与 do..while 中断语句 句法 流程图 例子 继续语句 句法 流程图 例子 输出 无限循环 语法&#xff1a;使用 for 循环的无限循环 示例&#xff1a;使用 for 循环的无限循环 语法&#xff1a;使用 while 循环进行无限循…

使用生成式AI查询大型BI表

在拥有大量表格形式数据的组织中&#xff0c;数据分析师的工作是通过提取、转换和围绕数据构建故事来理解这些数据。 分析师访问数据的主要工具是 SQL。 鉴于大型语言模型 (LLM) 令人印象深刻的功能&#xff0c;我们很自然地想知道人工智能是否可以帮助我们将信息需求转化为格式…

优雅地展示20w单细胞热图|非Doheatmap 超大数据集 细胞数太多

单细胞超大数据集的热图怎么画&#xff1f;昨天刚做完展示20万单细胞的热图要这么画吗&#xff1f; 今天就有人发消息问我为啥他画出来的热图有问题。 问题起源 昨天分享完 20万单细胞的热图要这么画吗&#xff1f;&#xff0c;就有人问为啥他的数据会出错。我们先来看下他的…

sql | sql 语句中的case when

通过case when 进行更细致的分类 ################################################## ####### 参考 ####### 如果没有添加case when 最终的sql 语句 就只是查询表中的name 而且添加 case when [age] > 18 then 1 else 0 end as [AgeType] 记就表示找表中的两个字段 一个是…

智能编程助手!华为云CodeArts Snap免费公测:基于盘古研发大模型

近日&#xff0c;华为云CodeArts Snap正式开启公测。 这是一款基于华为云研发大模型的智能化编程助手&#xff0c;旨在为开发者提供高效且智能的编程体验&#xff0c;提升研发人员的单兵作战能力。 该服务公测期间免费&#xff0c;不向用户收取任何费用&#xff0c;商用后&am…

在 UEFI+GPT 模式下,使用Symantec_Ghost_12.0.0.8006备份统信UOS+Windows10系统,固态硬盘也顺利

在 UEFIGPT 模式下&#xff0c;使用Symantec_Ghost_12.0.0.8006备份统信UOSWindows10系统&#xff0c;安装时双系统不说了。 ipxe系统下载好 某桃系统中pe64.wim下载好&#xff08;这个要注意&#xff0c;因为某桃系统pe较新适合新一些的电脑&#xff09;&#xff0c;替换掉p…

Java数据结构:1. 数据结构前置知识

文章目录 一、初识数据结构二、初识集合框架1. 什么是集合框架2. 集合框架的重要性3. 背后所涉及的数据结构以及算法 三、时间复杂度空间复杂度1. 算法效率2. 时间复杂度&#xff08;1&#xff09;概念&#xff08;2&#xff09;大O的渐进表示法&#xff08;3&#xff09;推导大…

python实现巴特沃斯低通滤波器——数字图像处理

原理&#xff1a; 巴特沃斯低通滤波器&#xff08;Butterworth Low-Pass Filter&#xff09;是图像处理中常用的一种频率域滤波器&#xff0c;它相较于理想低通滤波器提供了更平滑的过渡&#xff0c;以减少图像处理时引入的振铃效应。 设计原理&#xff1a; 巴特沃斯低通滤波…

高防ip适合防御网站和游戏类的攻击吗?

​  作为站长&#xff0c;要学会并承受得住网站外来攻击的压力&#xff0c;尤其是所属为 DDoS 攻击高发行业的网站类业务及游戏行业&#xff0c;是很容易被竞争对手或者一些伪黑客爱好者盯上的。 加上&#xff0c;有些站长并没有提前了解&#xff0c;就盲目进军了这两个行业&…