状压DP算法
状压DP使用状压DP的原因我们知道状态压缩,顾名思义,就是需要考虑的状态非常多,我们如果用平常的思想去表示状态,那是非常不现实的,在时间和空间上都不允许,我们使用某种方法,以最小的代价表示某种状态。 那么,这通常是用进制来表示状态的,而选择几进制则根据要求使用的对象的点的状态有几种。一般来说,只有0和1,我们则是用二进制来表示,当然也有其他进制的题,在例题中会列举,需要我们灵活变通,主要谈二进制。
那么如何用二进制表示状态呢?我们发现,二进制上是按位分的,那么我们每一位可以看成一个点,而点上的取值则为该点的状态或者选择。例如00001001这个状态则表示第一个点和第四个点状态为1,其余的点状态为0。所以按照这种思想,能抽象的表示出一个很复杂的状态,实现了时间和空间的优化。
状压DP的适用条件状态压缩其实是有适用环境的:
状态需要有一定的状态单元。 即一个状态应该是保存一个集合,其中的元素值对应着0或1,例如我们常见的棋盘,我们可以用0或1来表示棋子的放置状态。而整个集合即是一个01串,即二进制数,我们通常用十进制表示。那么我们再进行状态转移或者判断的时候,需要先将十进制转化为二进制, ...
Rust中的错误处理
Rust中的错误处理如果你使用过其他编程语言,那么就会知道Rust中的错误处理是完全不同的方法。像Java,JS,Python等你常常会使用throw处理异常,以及return成功的值。但在Rust中,你会返回给调用者一个Result
Result<T, E>是一个拥有两个值的枚举类型,其中Ok(T)用来返回成功值,Err(E)用来返回错误值
1234enum Result<T, E> { Ok(T), Err(E),}
返回错误而不是抛出错误,这是一种编程习惯的转变。所以如果你是Rust的初学者,可能刚开始学习起来觉得很麻烦,因为这需要你用去思考在不同的场景,应该使用什么样的方法去处理错误。
在这篇博客中会有错误处理的一些范式,以及它们在Rust中是如何体现的:
忽略错误
直接结束程序
使用默认值处理
传递错误
传递多个错误
模式匹配Boxed错误
使用库 or 应用
创建自定义错误
传递自定义错误
模式匹配自定义错误
忽略错误(unwrap())(如果出现错误会触发panic,让该线程退出)
最简单的处理方法就是直接忽略 ...
Rust构建自己的第一个项目
Rust构建自己的第一个项目几个核心命令:
cargo new xxx:用于新建项目
cargo build:用于在Cargo.toml中添加dependencies进行依赖的下载和编译
cargo run:用于运行
新建项目在目录下输入下列指令,例如要构建一个叫做hello-rust的项目
1cargo new hello-rust
Cargo 已经帮我们创建好默认项目了,还创建了个git的本地仓库,还有一些配置文件, src/main.rs 为编写应用代码的地方。
运行项目使用cargo run命令运行
1cargo run
可以看到会经历一个编译的过程后,打印出Hello,world!信息
编写Hello-RustCargo.toml文件是一个管理项目配置的文件,包括项目依赖等相关配置
添加配置在dependencies中:
在命令行中运行:
1cargo build
可以看到除了我们自定义添加的ferris-say版本的依赖,还会自动添加好依赖的依赖
接下来就在 src/main.rs 中写入以下内容:
123456789101112use ferris_says ...
Java八股
Java八股2024年 Java 面试八股文(20w字)_java八股文2023-CSDN博客
Spring面试被问了几百遍的 IOC 和 AOP ,一篇文章带你搞清楚!!!_ioc和aop的原理面试-CSDN博客
Sentinelsentinel (史上最全)-CSDN博客
Gradle&Mavengradle中的build script详解_gradle buildscript-CSDN博客
[Gradle和Maven的区别-CSDN博客](https://blog.csdn.net/weixin_45626288/article/details/131973787?ops_request_misc=%7B%22request%5Fid%22%3A%22172024305816800185819613%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=172024305816800185819613&biz_id=0&utm_medium=distribute.pc_search_re ...
后端微服务-programmer-club项目的设计与实现
程序员社区项目
开发模式前后端分离,后端负责所有的设计、接口的定义,后端先行,前端协同,通过接口文档,采用apifox的文档进行对接。
敏捷开发,版本上线迭代,需求分析->功能设计->详细设计->编码实现。
开发工具后端:IDEA
前端:VSCode
项目管理:giteazycode
包依赖管理:Maven3.6.0
数据库:Mysql5.7
数据库连接池和监控库:Druid
框架:Springboot 2.4.2
数据库图形化:Navicat
接口管理工具:APIPost7
Redis桌面工具:RedisDesktop
表建模:PDManager
原型设计:axure8
原型组件库: antdesign
代码生成器:easycode(idea的plugin市场)
一些插件:mybatis(类->dao->数据库),easycode(由数据库表生成相应代码), preconditions(参数校验)
node.js
架构设计传统项目[SpringMVC框架(详解)-CSDN博客](https://blog.csdn.net/H20031011/articl ...
Rust异步编程
Rust异步编程123456789101112let mut handles = Vec::new();for index in 1..=100 { let handle = tokio::spawn( async_http_client.get(format!("www.example.com/items/{}", index)) ); handles.push(handle);}for handle in handles { let result = handle.await;}
比较使用异步编写的示例与同步编写的相同示例 - 对于大量并发 Web 请求,异步版本比同步请求快约 60%
Rust基础学习
Rust基础学习Learn Rust - Rust Programming Language (rust-lang.org)
【一起学Rust】Rust介绍与开发环境搭建_rust开发-CSDN博客
包管理工具:cargo
命令行:
cargo new [name]:创建一个新的Rust项目cargo build:构建项目cargo run:运行项目cargo test:运行测试cargo doc:生成文档cargo update:更新依赖项cargo clean:清除构建输出cargo publish:将软件包发布到crates.io上cargo install [package]: 安装指定软件包cargo uninstall [package]: 卸载指定软件包
Rust 全面指南:从基础到高级,一网打尽 Rust 的编程知识_rust语言-CSDN博客
语法变量声明1234567//定义变量可以使用let关键字,例如:let x = 10; //会被自动推断为i32类型let y: i32 = 20;//上述默认为不可变变量,若要可变变量需要加入mut关键字let mut ...
MIT 6.824 Lecture2-RPC and Threads
Lecture2-RPC and Threads2.1 GO语言❓ why we use go in this class
1️⃣ go提供类许多便捷的工具,如threads、锁以及线程间同步。此外,还有RPC包也十分重要。
2️⃣ go是type safe 以及memory safe的,其垃圾回收机制(garbage collected)十分有效
3️⃣ threads + GC 是十分具有吸引力的
2.2 threads2.2.1 为什么要关注多线程📖 多线程是在本课程中实现并发的一个重要工具,在分布式系统中,并发十分有趣。比较常见的情况是:一个程序需要同时和多台计算机(a bunch of other computers)通信,客户端可能会同时和多台服务器通信,一台服务器可能会同时响应来自不同客户端的多条请求。假如我的程序同时有 7 件不同的事情在进行,我想要一种简单的方式实现它能同时做 7 件不同的事情,多线程就能很好的解决它。
在 Go 的文档中,它把线程称为 goroutine,goroutine 真的很像大家所说的线程。
2.2.2 如何理解多线程假设有一个程序,用一个 ...
MIT 6.824 Lecture3-GFS
Lecture 3-GFS[(289条消息) 谷歌文件系统GFS理解_小炮车的博客-CSDN博客_google文件系统gfs](https://blog.csdn.net/SwjtuPC/article/details/123652626?ops_request_misc=&request_id=&biz_id=102&utm_term=GFS PRIMARY&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-123652626.142^v47^pc_rank_34_ctr25,201^v3^add_ask&spm=1018.2226.3001.4187)
这门课程的主要内容是“大型存储”,GFS是这门课里有关如何构建大型存储系统的众多案例学习的第一篇。存储是一种关键的抽象,很多系统要么是设计的简单易用的存储接口,要么是基于底层存储进而构建。在分布式系统中,可能有各种各样重要的抽象可以应用在分布式系统中,但是实际上,简单 ...
CoRE-learning:Learnability with Time-Sharing Computational Resource Concerns
CoRE-learning:Learnability with Time-Sharing Computational Resource Concernshttps://doi.org/10.1093/nsr/nwae204
一般认为,人工智能机器学习技术应用涉及算法、数据、算力“三要素”。经典机器学习理论关注算法与数据对学习性能的影响,推导出的机器学习泛化误差界所包含的重要项通常涉及假设类复杂度和样本复杂度,两者分别与算法和数据有关,而对“三要素”中的算力缺乏考虑,尽管现实场景中算力资源的供给分配直接影响到最终学习性能。
在近期发表于《国家科学评论》(National Science Review, NSR)的Perspective文章中,南京大学周志华教授提出了“计算资源高效学习(CoRE-learning)”理论框架,这是第一个考虑了算力资源供给调度对机器学习性能影响的学习理论框架。
CoRE理论框架:
作者定义了“机器学习吞吐率”并引入了对资源动态分配调度策略的考虑,使得算力资源的供给分配对机器学习泛化性能的影响可以被抽象地在学习理论中进行研究,不仅有助于指导设计出高效使用 ...