Hello 算法 1.2.0 繁体中文 Go 版語言版 作者:靳宇棟(@krahets) 程式碼審閱:劉代富(@Reanon) Release 1.2.0 2024‑12‑06 序 兩年前,我在力扣上分享了“劍指 Offer”系列題解,受到了許多讀者的鼓勵與支持。在與讀者交流期間,我 最常被問到的一個問題是“如何入門演算法”。漸漸地,我對這個問題產生了濃厚的興趣。 兩眼一抹黑地刷題似乎是最受歡迎的方法,簡單、直接且有效。然而刷題就如同玩“踩地雷”遊戲,自學能 ”從這個意義上看,這本 書並非完全“免費”。為了不辜負你為本書所付出的寶貴“注意力”,我會竭盡所能,投入最大的“注意力” 來完成本書的創作。 本人自知學疏才淺,書中內容雖然已經過一段時間的打磨,但一定仍有許多錯誤,懇請各位老師與同學批評 指正。 本書中的程式碼附有可一鍵執行的原始檔,託管於 github.com/krahets/hello‑algo 倉庫。 動畫在 PDF 內的展示效果有限,可訪問 www 從巧奪天工的匠人 技藝、到解放生產力的工業產品、再到宇宙運行的科學規律,幾乎每一件平凡或令人驚嘆的事物背後,都隱 藏著精妙的演算法思想。 同樣,資料結構無處不在:大到社會網絡,小到地鐵路線,許多系統都可以建模為“圖”;大到一個國家,小 到一個家庭,社會的主要組織形式呈現出“樹”的特徵;冬天的衣服就像“堆疊”,最先穿上的最後才能脫下; 羽毛球筒則如同“佇列”,一端放入、一端取出;字典就像一個“雜湊表”,能夠快速查找目標詞條。0 码力 | 385 页 | 18.80 MB | 10 月前3
大规模高性能区块链架构设计模式与测试框架-李世敬©2016-2021 6 趣链科技 版权所有 ©2016-2021 6 趣链科技 版权所有 ©2016-2021 6 区块链技术定义 区块链是由分布式数据存储、点对点传输、共识机制、加密算法等计算机技术构成的多中心 化系统 不可篡改(可信存证) ü 可对存储的文件、数据进行真实性校验 ü 可信追溯历史数据 去中心化共识(协作共享) ü 多方业务系统数据共享 ü 跨机构业务协作 核心特性 7 数据状态发生变化的 一次操作请求,如一 笔转账交易 将一段时间内发生的 所有交易和状态打包 成为一个区块 区块以时间顺序前后相 连,组成一种块链式数 据结构,即“区块链” 一词的由来 多参与方各自部署,互 联互通,每个区块链节 点均会保存相同的链式 数据,通过冗余存储的 方式使数据难以被篡改 区块链技术定义 9 趣链科技 版权所有 ©2016-2021 9 趣链科技 版权所有 公路、越野等具体场景 公有链基础架构⾃下⽽上分为六层:数据层、⽹络层、共识层、激励层、合约层与应⽤层。如果将区块链⽐作⼀ 辆汽车,那么各层分别对应汽车的各个组成部分(下图所⽰),各层之间协同合作,形成多中⼼化可信系统 12 趣链科技 版权所有 ©2016-2021 12 趣链科技 版权所有 ©2016-2021 12 趣链科技 版权所有 ©2016-2021 12 �盟�(�可�架构) 基 础0 码力 | 39 页 | 56.58 MB | 1 年前3
03. Golang 在隐私计算平台建设中的实践 - 刘敬开他⼈人个⼈人信息。该法⾃自2021年年11⽉月1⽇日起施⾏行行。 趣链科技版权所有©2016 – 2021 6 隐私计算历史 1982年年姚期智提 出 百 万 富 翁 问 题 , 安 全 多 ⽅方 计 算概念被提出 1986年年姚期智提出 基于混淆电路路的通 ⽤用解决⽅方案 2016年年⾕谷歌提出联 邦学习,解决安卓 ⼿手机终端⽤用户的联 合模型训练 2009年年Gentry⾸首 算研究范畴及发展趋势》 ⾸首次提出了了隐私计算概念 2021年年国内正式提 出了了隐私计算+区 块链,并达成业内 共识 趣链科技版权所有©2016 – 2021 7 隐私计算技术分类 • 安全多⽅方计算 纯密码学技术实现数据的可 ⽤用不不可⻅见 • 可信执⾏行行环境 基于TEE硬件保障计算环境安全 可信,提供计算模型及数据双维 度安全 • 联邦学习 结合机器器学习和密码学算 多节点通过p2p组⽹网,并基于安 全多⽅方计算、联邦学习、可信执 ⾏行行环境按照数据隐私密级进⾏行行价 值共享 • 业务应⽤用层 基于SDK接⼊入上层业务系统 趣链科技版权所有©2016 – 2021 10 隐私计算流程 • 通过区块链进⾏行行数据使⽤用权限 的控制以及隐私计算任务的协 作 • 链下节点间基于隐私计算算 法,使⽤用多⽅方数据进⾏行行密态计 算,利利⽤用密码学算法达到“明0 码力 | 37 页 | 6.20 MB | 1 年前3
使用Go与redis构建有趣的应用• 丰富的附加功能:事务、Lua 脚本、键过期机制、键淘汰机制、多种持久化⽅方式(AOF、RDB、 RDB+AOF 混合) • 强⼤大的多机功能⽀支持:主从复制(单主多从)、Sentinel(⾼高可⽤用)、集群(基于 Raft 算法,多 主多从,内建⾼高可⽤用) 特点 • 具有多种不不同的数据结构可⽤用,其中包括:字符串串、散列列、列列表、集合、有序集合、位图 (bitmap)、 • 丰富的附加功能:事务、Lua 脚本、键过期机制、键淘汰机制、多种持久化⽅方式(AOF、RDB、 RDB+AOF 混合) • 强⼤大的多机功能⽀支持:主从复制(单主多从)、Sentinel(⾼高可⽤用)、集群(基于 Raft 算法,多 主多从,内建⾼高可⽤用) • 拥有⽆无限可能性的扩展模块系统:神经⽹网络、全⽂文搜索、JSON 数据结构等等。 数据结构 data structures0 码力 | 176 页 | 2.34 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.aTheChalice和zonesan等。 特别感谢白凯同学帮助我翻译了《细节101》、《问答101》和《技巧101》三篇 文章。 我很抱歉如果上述列表遗漏了某个曾经给予我帮助的成员。 Go社区有如此多友 善和富有创造性的成员,以至于上述列表肯定遗漏了某些成员。 感谢所有曾经 直接或者间接,有意或者无意帮助过我完成这本书的Go社区成员。 另外也要感谢Bootstrap CSS框架 、jQuery /code 1.18开始)。 除了以上特性,Go还有如下亮点: Go的语法很简洁并且和其它流行语言相似。 这使得具有一定编程经验的程 序员很容易上手Go编程。 当然,对于没有编程经验的初学者,Go也比很 多其它流行编程语言更容易上手一些。 Go拥有一个比较齐全的标准库。这个标准库提供了很多常用的功能。 Go拥有一个活跃和回应快速的社区。 社区贡献了大量高质量的第三方库包 和应用 。 Go程序员常常被称为地鼠(gopher)。 作符(operator)运算来完成的。 大多数高级编程语言都支持一些条件和循环 控制语句。 这些条件和循环控制语句可以看作是特殊的操作。 它们的语法接近 于人类语言,因此一个人写的代码很容易被其他人理解。 在 大 多 数 高 级 编 程 语 言 中 , 数 据 通 常 被 抽 象 为 各 种 类 型 ( type ) 和 值 (value)。 一个类型可以看作是值的模板。一个值可以看作是某个类型的实 例。 大多数0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.aTheChalice和zonesan等。 特别感谢白凯同学帮助我翻译了《细节101》、《问答101》和《技巧101》三 篇文章。 我很抱歉如果上述列表遗漏了某个曾经给予我帮助的成员。 Go社区有如此多 友善和富有创造性的成员,以至于上述列表肯定遗漏了某些成员。 感谢所有 曾经直接或者间接,有意或者无意帮助过我完成这本书的Go社区成员。 另外也要感谢Bootstrap CSS框架 ? 、jQuery 据库开发和区块链开发。 随着从Go 1.18开始支持自定义泛型,预期Go会在更 多开发领域流行起来,比如图形界面、游戏、大数据和人工智能等。 最后,我们应该知道,没有一门语言是完美的。Go也一样。Go的设计中有很 多折衷和各种权衡。Go 1确实有一些不足。 比如,目前Go不支持任意类型的 不变量。这导致很多标准库中一些希望永不被更改的值目前被声明为变量。这 是Go程序中的一个潜在安全隐患。 本书由老貘 ? 历 或者国内官网 ? 下载Go官方工具链, 并按照下载页面中的说 明安装Go官方工具链。 我们也可以使用工具[GoTV](https://go101.org/apps-and-libs/gotv.html)来安装多 个Go工具链版本,并方便和谐地使用它们。 Go官方工具链的版本和其所支持的最高Go语言版本是一致的。 比如,Go官方 工具链1.21.x版本支持从1.0到1.21的所有Go语言版本。 为了从任意0 码力 | 821 页 | 956.82 KB | 1 年前3
Go 入门指南(The way to Go)strings 和 strconv 包 4.8 时间和日期 4.9 指针 - 2 - 本文档使用 书栈(BookStack.CN) 构建 第5章:控制结构 5.1 if-else 结构 5.2 测试多返回值函数的错误 5.3 switch 结构 5.4 for 结构 5.5 Break 与 continue 5.6 标签与 goto 第6章:函数(function) 6.1 介绍 6 涉及到的概念和技巧进行彻底的讲解,你可以下载这些 代码到你的电脑上运行,从而加深对概念的理解。 本书会尽可能地将前后章节的内容联系起来,当然这也同时要求你通过学习不同的知识来对一个问题提出尽可能多的 解决方案。记住,学习一门新语言的最佳方式就是实践,运行它的代码,修改并尝试更多的方案。因此,你绝对不可 以忽略书中的 130 个代码练习,这将对你学习好 Go 语言有很大的帮助。比如,我们就为斐波那契算法提供了 ,他们的值会和本地机器( $GOOS 和 $GOARCH )一样。 $GOPATH 默认采用和 $GOROOT 一样的值,但从 Go 1.1 版本开始,你必须修改为其它路径。它可以包含多 个包含 Go 语言源码文件、包文件和可执行文件的路径,而这些路径下又必须分别包含三个规定的目 录: src 、 pkg 和 bin ,这三个目录分别用于存放源码文件、包文件和可执行文件。0 码力 | 466 页 | 4.44 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.aTheChalice和zonesan等。 第1章:致谢 7 特别感谢白凯同学帮助我翻译了《细节101》、《问答101》和《技巧101》三篇文 章。 我很抱歉如果上述列表遗漏了某个曾经给予我帮助的成员。 Go社区有如此多友善和 富有创造性的成员,以至于上述列表肯定遗漏了某些成员。 感谢所有曾经直接或者 间接,有意或者无意帮助过我完成这本书的Go社区成员。 另外也要感谢Bootstrap CSS框架(https://getbootstrap 第4章:程序源代码基本元素介绍 16 须是标识符。 尽管高级编程语言代码比底层机器指令友好和易懂,我们还是需要一些注释来帮助 自己和其他程序员理解我们所写的代码。 在下一节的程序示例中,我们可以看到很 多注释。 一个简单的Go示例程序 为了对各种代码元素有一个更清楚的认识,让我们来看一个简短的Go示例程序。 和 很多其流行语言一样,Go使用//来起始一个行注释,使用一个/*和*/对来包裹一 个块注释。 类型转换。 非常量数字值的类型转换中,溢出是允许的。 另外当将一个浮点数非 常量值(比如一个变量)转换为一个整数类型的时候,舍入(或者精度丢失)也是 允许的。 具体规则如下: 当从一个比特位数多的整数类型的非常量整数值向一个比特位数少的整数类型 转换的时候,高位的比特将被舍弃,低位的比特将被保留。我们称这种处理方 式为截断(truncated)。 当从一个非常量的浮点数向一个整数类型转换的时候,浮点数的小数部分将被0 码力 | 591 页 | 21.40 MB | 1 年前3
Go Web编程如果出现Go的Usage信息,那么说明Go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境 变中是否包含了Go的安装目录。 第三方工具安装 第三方工具安装 GVM GVM gvm是第三方开发的Go多版本管理工具,类似ruby里面的rvm工具。使用起来相当的方便,安装gvm使用如下命令: bash < <(curl -s https://raw.github.com/moovweb/gvm/m IntelliJ IDEA IntelliJ IDEA 熟悉Java的读者应该对于idea不陌生,idea是通过一个插件来支持go语言的高亮语法,代码提示和重构实现。 1. 先下载idea,idea支持多平台:win,mac,linux,如果有钱就买个正式版,如果不行就使用社区免费版,对于 只是开发Go语言来说免费版足够用了 33 2. 安装Go插件,点击菜单File中的Setting,找到Plugins 类似)来组织代码。main.main()函数(这个函数主要位于主包)是每一个独立 的可运行程序的入口点。Go使用UTF-8字符串和标识符(因为UTF-8的发明者也就是Go的发明者),所以它天生就具有多 语言的支持。 links links 目录 40 上一节: Go语言基础 下一节: Go基础 41 2.2 Go基础 2.2 Go基础 这小节我们将要介绍如何定义变量、常量、G0 码力 | 295 页 | 5.91 MB | 1 年前3
Hello 算法 1.0.0b4 Golang版靳宇栋(Krahets) Release 1.0.0b4 2023‑07‑26 序 两年前,我在力扣上分享了《剑指 Offer》系列题解,受到了许多朋友的喜爱与支持。在此期间,我回答了众 多读者的评论问题,其中最常见的一个问题是“如何入门学习算法”。我逐渐也对这个问题产生了浓厚的兴 趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单直接且有效。然而,刷题就如同玩“扫雷”游戏,自学能力 轮的重复后,就能将其牢记在心。 3. 搭建知识体系。在学习方面,我们可以阅读算法专栏文章、解题框架和算法教材,以不断丰富知识体 系。在刷题方面,可以尝试采用进阶刷题策略,如按专题分类、一题多解、一解多题等,相关的刷题心 得可以在各个社区找到。 作为一本入门教程,本书内容主要涵盖“第一阶段”,旨在帮助你更高效地展开第二和第三阶段的学习。 Figure 0‑7. 算法学习路线 0.3. 小结 对数阶 ?(log ?) 与指数阶相反,对数阶反映了“每轮缩减到一半的情况”。对数阶仅次于常数阶,时间增长缓慢,是理想的时 间复杂度。 对数阶常出现于「二分查找」和「分治算法」中,体现了“一分为多”和“化繁为简”的算法思想。 设输入数据大小为 ? ,由于每轮缩减到一半,因此循环次数是 log2 ? ,即 2? 的反函数。 // === File: time_complexity.go ===0 码力 | 347 页 | 27.40 MB | 1 年前3
共 49 条
- 1
- 2
- 3
- 4
- 5













