吴军《计算之魂》读后感

news2024/11/24 4:06:22

前言

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

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

正文

言归正传,《计算之魂》这本书,给我印象最深的一个点,是识别能力边界。书中讲了一个“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移到B
   hanoi(source, help, target, N-1);
    // 将第N个盘子,从A移到C
   move 第N个盘,从source移到target;
    // 将前N-1个盘子,从B经过A移到C
   hanoi(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封信中亦有介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【哈士奇赠书活动 - 18期】-〖Flask Web全栈开发实战〗

文章目录 ⭐️ 赠书活动 - 《Flask Web全栈开发实战》⭐️ 编辑推荐⭐️ 内容提要⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书活动 - 《Flask Web全栈开发实战》 内容简介: 《Flask Web全栈开发实战》围绕 Flask 框架,详细地讲解了使用 Flask 开发网站的各项技…

vue2项目中使用本机图片的一些问题

前后端分离项目,(vue2springboot2.6.3) 前端上传图片,后端将图片保存在本地。当前端使用上传的图片时出现的一些问题说明。 前端上传图片文件,后端接收到图片文件后将图片保存到vue项目的src/assets/club目录下,如下…

VMware vSphere Replication 8.7 (for vSphere 8.0U1) - 虚拟机复制和数据保护

请访问原文链接:https://sysin.org/blog/vmware-vsphere-replication-8/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 新增功能 vSphere Replication 8.7 | 2023 年 4 月 18 日 | 内部版本 21591677 vSphere Re…

GPT4.0+Midjourney=最佳组合,简单玩法

以下是我设计的一个简单的组合玩法,操作如下: 问gpt4: Here is a MidJourney Prompt Formula: A detailed image of [Subject] [doing something interesting] during [time of day], taken with a [type of camera], using [type of lens] with cinema…

ChatGPT会对我们日常生活带来什么影响?这些技术会改变我们学习阅读工作方式吗?

ChatGPT会对我们日常生活带来什么影响?这些技术会改变我们学习阅读工作方式吗? AI 这个话题很火,我也一直在关注着,很多人甚至觉得 AI 会改变世界,也许你会好奇:ChatGPT 会在三年内终结编程吗?A…

基于gitlab搭建Drone CI

drone简介: drone官方文档:https://docs.drone.io/ drone跟Jenkins一样,可实现持续集成,就是可以帮助我们解决重复的代码构建,自动化测试,发布等重复劳动,通过简单一个提交代码的动作&#xff…

Text-to-3D 任务论文笔记: Latent NeRF

文章目录 概述相关工作3D形状合成使用2D监督的text-to-3D 任务 方法前置知识LDMScore Distillation Latent NeRF文本引导RGB refinementSketch-Shape Guidance对于显式形状的Latent-Paint 实验实验细节文本引导的生成RGB RefinementTextual-Inversion Sketch-Shape GuidanceLat…

使用Handler创建一个Android秒表应用

0、应用是一个有活动、布局和其他资源组成的集合。其中一个活动是应用的主活动。每个应用都有一个主活动,在文件AndroidManifest.xml中指定。 1、默认地,每个应用都在自己的进程中运行。这样有助于保证应用安全。 2、但是可以使用startActivity(intent)传…

信息安全支撑技术

信息安全支撑技术 密码学密码学发展古典密码近代密码学现代密码学 基本保密通信模型密码系统的安全性密码学技术在信息安全中的应用对称密码算法非对称密码算法其他密码服务哈希函数消息认证码数字签名 公钥基础设施(PKI)CA:认证权威RA&#…

九耶丨阁瑞钛伦特-SpringCloud(六)

Spring Cloud Config 是一个基于 Spring Boot 实现的分布式配置管理工具,它专注于管理各种环境中的应用程序配置,例如开发环境、测试环境和生产环境等。它提供了一个集中的配置服务器,允许在运行时动态地管理和更新应用程序的配置信息&#x…

10 个超赞的 C 语言开源项目

今天给大家分享10个超赞的C语言开源项目,希望这些内容能对大家有所帮助! 01 Webbench Webbench是一个在 Linux 下使用的非常简单的网站压测工具。 它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能。 最多可以…

Unity版本使用情况统计(更新至2023年4月)

本期UWA发布的内容是第十二期Unity版本使用统计,统计周期为2022年11月至2023年4月,数据来源于UWA网站(www.uwa4d.com)性能诊断提测的项目。希望给Unity开发者提供相关的行业趋势,了解近半年来哪些Unity版本的使用概率更…

Java经典笔试题—day05

Java经典笔试题—day05 🔎选择题🔎编程题🥝统计回文🥝连续子数组最大和 🔎结尾 🔎选择题 (1)下面的程序 编译运行后,在屏幕上显示的结果是() public class Test {publi…

使用敏捷开发工具做敏捷需求管理流程

上一篇我们介绍了如何管理产品路线图,这一篇我们介绍下如何管理产品Backlog。 史诗故事通常都是比较大的故事,所以我们需要将史诗故事规划到产品Backlog中,以便让团队在产品Backlog中对史诗故事进行拆分,将其拆解为更小的用户故事…

Kubernetes对象之PersistentVolume,PersistentVolumeClaim和StorageClass

前面我们学习了Kubernetes中的Volume,我们可以发现前文中的Volume(无论何种类型)和使用它的Pod都是一种静态绑定关系,在Pod定义文件中,同时定义了它使用的Volume。在这种情况下,Volume是Pod的附属品&#x…

linux安装redis服务

linux环境采用centos7 1.下载redis安装包 官网下载地址:https://redis.io/download/ 2.安装redis依赖 yum install -y gcc tcl3.上传安装包并解压 tar -xzf redis-6.2.12.tar.gz4.编译安装 进入目录下并安装 cd redis-6.2.12 make && make install默认…

Python 密码破解指南:15~19

协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【OpenDocCN 饱和式翻译计划】,采用译后编辑(MTPE)流程来尽可能提升效率。 收割 SB 的人会被 SB 们封神,试图唤醒 SB 的人是 SB 眼中的 SB。——SB 第三定律 十五、…

基于springboot会员制医疗预约服务管理信息系统

开发技术介绍 Java语言简介 Java是由SUN公司推出,该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称,也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的优势和广阔的前景&#xff…

APP多版本并行更新方案

目录 App为什么要更新版本更新类型分析应该如何解决升级样式的收集表结构 App为什么要更新版本 任何一款APP都不可能完美,功能也不可能完善,需要不断迭代更新完善APP。例如:随着业务的不断发展而叠加的功能、产品发展到一定程度需要大改版提升…

【源码解析】Redisson分布式限流器RRateLimiter源码分析

前面已经写了一篇Redisson的分布式限流的使用,Redisson分布式限流的简单实践,对其中的原理很好奇。 一、使用 // 1、 声明一个限流器 RRateLimiter rateLimiter redissonClient.getRateLimiter(key);// 2、 设置速率,5秒中产生3个令牌 rat…