当前位置: 首页 > news >正文

吴军《计算之魂》读后感

前言

断断续续,终于完成了这本书的第一次通读,记录下自己的一些想法。

先说一个小故事。前段时间家里买了一个小鱼缸,问我有没有办法让水自动循环,但不想用电。没有好的想法,去小某书上搜了下,好多案例教程。其中一个是借助于一些简单的工具(矿泉水瓶、导管),实现水的自动循环,效果如下图所示。思考了下,剔除了这个方案。没有外部能量的注入,将水从低处帮运到高处,违背物理常识(超出了这些工具的能力边界)。
在这里插入图片描述

正文

言归正传,《计算之魂》这本书,给我印象最深的一个点,是识别能力边界。书中讲了一个“12球问题”的案例,内容如下:有12个球外观一模一样,其中一球为假,所有真球重量一样,假球重量不同。现有一个天枰,只称3次,如何找出假球并判断其重量比真球小还是大?我自己思考许久未得齐法,作者(吴军老师)解答时讲了一个很重要的观点,先识别他是否有解。12个球,均有轻和重两种选择,共24种可能性;天平一次称重,可能有三种结果,3次称重,共有27种可能性,27>24,故此问题有解。无独有偶,近期工作中也遇到了类似的问题,基于这个思路,识别出问题已经超出了能力边界,减少了资源的无效投入。

其次,计算机思维的认知。递归、分治,是很重要的计算机思维。将大问题(逐步)转换为小问题,基于既定的规则做大量重复工作,是计算机所擅长的。以汉诺塔游戏为例,可以看到递归的美。
汉诺游戏规则如下:有三根相邻的柱子,标号为A、B、C;A柱子从下到上按金字塔状叠放着n个不同大小的圆盘;现在需要把所有盘子从A经由B移动到C,一次只能移动一个盘子且同一根柱子上都不能出现大盘子在小盘子上方,写出伪代码实现。
在这里插入图片描述

    递归伪代码实现如下:
function hanoi(起始柱source, 目标柱target, 帮助柱help, 盘子数量N) {// 将前N-1个盘子,从A经过C移到Bhanoi(source, help, target, N-1);// 将第N个盘子,从A移到Cmove 第N个盘,从source移到target;// 将前N-1个盘子,从B经过A移到Chanoi(help, target, source, N-1);
}hanoi(A, C, B, n);

递归,实现很简洁,不使用递归,其复杂度可想而知。

第三点,是作者通过一些简单的例子,将计算机的认知讲解的很透彻。
以计算机二进制信息编码为例,通过小白鼠试验进行讲解。有100瓶药水,其中一瓶有毒。用小白鼠来试药,喝到有毒的药,一天后会死掉,喝无毒(包括同时喝几种,各种药不会产生综合效应)的正常。现在只有一天时间需要找出毒药,一只小白鼠只能参与一次实验,请问需要多少只小白鼠。
简化问题,以8瓶药来说明,给药进行编号,对应0-7,其对应的二进制信息为3个bit。每只小白鼠吃药后只有两种结果:正常或死亡,即可以表示1个bit的信息,故需要3只小白鼠。
下表为分析过程,每个小白鼠对应一个bit位,1表示小白鼠喝对应的药水;假设小白鼠A、C死亡,则说明编号为5的药水有毒(二进制编码101)。
在这里插入图片描述

书中还有很多关于计算机科学和思维的知识点,如怎么寻找好的算法、计算机信息编码的理解、逆向思维、工程化实践等。借用作者的一句话,有助于提升计算机科学品味和认知。

第一遍读下来,虽然还有很多知识没有消化,但确实给了带来了很大的价值,新的知识点、新的思考方式、已有知识的深入理解等。

书不尽言。每个人阅读可能会有不同的收获,期待您的分享。

相关资料

  • 12球问题,在硅谷来信第三季第071封信中亦有介绍。

相关文章:

吴军《计算之魂》读后感

前言 断断续续,终于完成了这本书的第一次通读,记录下自己的一些想法。 先说一个小故事。前段时间家里买了一个小鱼缸,问我有没有办法让水自动循环,但不想用电。没有好的想法,去小某书上搜了下,好多案例教…...

CSS进阶

01-复合选择器 定义:由两个或多个基础选择器,通过不同的方式组合而成。 作用:更准确、更高效的选择目标元素(标签)。 后代选择器 后代选择器:选中某元素的后代元素。 选择器写法:父选择器 …...

金兰组织 | 2023金兰解决方案集经营管理篇正式发布

为助力企业创新管理、提质增效,人大金仓携手金兰组织成员单位,于近期发布多项经营管理领域的联合解决方案,共享创新应用成果。 /人大金仓高级副总裁宋瑞/ 人大金仓高级副总裁宋瑞在致辞中表示:“联合解决方案创新是指通过把不同领…...

【python】pytorch包:深度学习(序章)

今日听闻师姐说pytorch实现深度学习要比keras更好用一些,特此记录 Part 0. 机器学习 与 深度学习 的联系与区别 参考B站视频链接 联系 深度学习是机器学习的分支,人工神经网络为基础,对数据的特征进行学习的方法 区别 特征抽取 机器学…...

HTML <acronym> 标签

HTML5 中不支持 <acronym> 标签在 HTML 4 中用于定义首字母缩写词。 实例 标记一个首字母缩写&#xff1a; <acronym title"World Wide Web">WWW</acronym> 浏览器支持 IEFirefoxChromeSafariOpera 所有主流的浏览器均支持 <acronym> …...

python基本数据类型 - 字典集合

引入 在内存中存储的数据可以是不同的数据类型。比如名字可以使用字符串存储&#xff0c;年龄可以使用数字存储&#xff0c;python有6种基本数据类型&#xff0c;用于各种数据的存储&#xff0c;分别是&#xff1a;numbers(数字类型)、string(字符串)、List(列表)、Tuple(元组…...

python数据类型总结

标准数据类型 Python 有以下几种标准数据类型&#xff1a; 整数&#xff08;int&#xff09;&#xff1a;表示整数值&#xff0c;如 1, -5, 0 等。浮点数&#xff08;float&#xff09;&#xff1a;表示小数值&#xff0c;如 3.14, -0.01, 1.0 等。字符串&#xff08;str&…...

TS内置类型总结

typeof 取对象身上的类型 const person {name: ,job: ,age:18 } type p typeof person ->> type p {name: string;job: string;age: number; }keyof取一个类型的属性明作为一个联合类型 const person {name: ,job: ,age: 18 } type p typeof person type k keyof p…...

Spring Cloud Alibaba: Gateway 网关过滤器 GatewayGatewayFilter factory (记录)

目录 AddRequestHeader GatewayFilter factory AddRequestHeadersIfNotPresent GatewayFilter factory AddRequestParameter GatewayFilter Factory AddResponseHeader GatewayFilter Factory CircuitBreaker GatewayFilter factory circuit breaker based on the status…...

Windows Server 2016版本说明

Windows Server 2016 Essentials edition Windows Server 2016 Essentials版是专为小型企业而设计的。它对应于Windows Server的早期版本中的Windows Small Business Server。此版本最多可容纳25个用户和50台设备。它支持两个处理器内核和高达64GB的RAM。它不支持Windows Serve…...

车载红外夜视「升温」

红外夜视赛道&#xff0c;正在升温。 本周&#xff0c;全球车载后视镜头部供应商Gentex宣布&#xff0c;领投以色列热成像技术初创公司ADASKY&#xff0c;后者在B轮融资中拿到了3000万美元。按照计划&#xff0c;Gentex将协助ADASKY将红外夜视技术推向汽车市场。 事实上&#x…...

ext3 文件系统的特点、优缺点以及使用场景

ext3&#xff08;Third Extended File System&#xff09;是 ext2 文件系统的后续版本&#xff0c;它在 ext2 文件系统的基础上增加了日志功能&#xff0c;以提高文件系统的可靠性和稳定性。下面是 ext3 文件系统的特点、优缺点以及使用场景&#xff1a; 特点&#xff1a; ext…...

rk3568 修改开机logo

rk3568 修改开机显示logo Android 显示 logo 的作用是为了标识应用程序或设备的品牌和身份。在应用程序中&#xff0c;logo 可以帮助用户快速识别应用程序&#xff0c;并与其他应用程序区分开来。在设备中&#xff0c;logo 可以帮助用户识别设备的品牌和型号&#xff0c;以及与…...

golang实现关键路径算法

关键路径算法&#xff08;Critical Path Method&#xff0c;简称CPM&#xff09;是一种用于项目管理的技术&#xff0c;主要用于计算项目中的关键路径和关键活动。关键路径是指项目中的最长路径&#xff0c;决定了项目的最短完成时间。关键活动是指在关键路径上的活动&#xff…...

Overcoming catastrophic forgetting in neural networks

目录 预备知识&#xff1a; 论文笔记 1. Introduction 2. Elastic weight consolidation 2.1 EWC allows continual learning in a supervised learning context 2.2 EWC allows continual learning in a reinforcement learning context 3. Conclusion 文章链接&#x…...

[Linux] Linux文件系统

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【LINUX】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 文章目录 一、Linux文件系统1.1 磁盘1.2 inode1.3 软硬…...

有仰拍相机和俯拍相机时,俯拍相机中心和吸嘴中心的标定

俯拍相机中心和吸嘴中心的标定 文章目录 俯拍相机中心和吸嘴中心的标定 前言适用模型如下&#xff1a;一、使用一个标定片进行标定1.关键注意&#xff1a;2.标定步骤&#xff1a; 二、使用一个L型的工件1.关键注意&#xff1a;2.标定步骤&#xff1a; 总结 前言 在自动化设备领…...

【Vue学习笔记5】Vue3中的响应式:ref和reactive、watchEffect和watch

所谓响应式就是界面和数据同步&#xff0c;能实现实时更新。 Vue 中用过三种响应式解决方案&#xff0c;分别是 defineProperty、Proxy 和 value setter。Vue 2 使用的方案是 defineProperty API。Vue3中使用的方案是Proxy和value setter。 1. ref和reactive vue3中实现响应…...

自动化测试工具的基本原理以及应用场景

自动化测试工具是现代软件开发流程中必不可少的组成部分&#xff0c;它可以通过编写脚本或使用图形用户界面工具自动化测试过程&#xff0c;提高测试的效率和准确性。本文将介绍自动化测试工具的基本原理以及应用场景。 自动化测试工具的基本原理 自动化测试工具通常采用的原理…...

《Java虚拟机学习》 java代码的运行过程

1. Java文件转换 当我们保存java文件后&#xff0c;首先由编译器编译成class文件&#xff0c;然后通过Java虚拟机将class文件转换成字节码文件 2.Java虚拟机是怎么运行Java文件 首先将java文件加载到java虚拟机中&#xff0c;然后由虚拟机将类元信息存储在 虚拟机的方法区中。…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...