《程序员的数学》读书笔记

Posted on February 21, 2016

这是我阅读程序员的数学后的读书笔记


一 0的故事

  • 基数转换

  • 10^0 10^-1 理解: 指数每减1, 数字就变为原来的10分之1

    2^0 2^-1 同上

    以简化规则为目标去定义值(这不是记忆力的问题, 而是想象力的问题)

  • 指数法则: N^a * N^b = N^(a+b)(N!=0)

二 逻辑

  • 在考虑规则时, 需要确认没有”遗漏”和”重复”

    没有”遗漏”, 即具备完整性

    没有”重复”, 即具备排他性 (如果重复, 但是规则一致, 也具备排他性)

  • if-else 兼具完整性和排他性

  • 逻辑从根本上说是对完整性和排他性的组合表达

  • 对异或的解释: 两个命题, 有且有一个是真, 则为真

    往往表示两种状态下必须处在其中一个状态, 比如老王要么活着, 要么死了

    编程语言貌似没有直接逻辑异或的运算符, 只能a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

  • 命题 (¬(a⊕b)) = (a=b) 是恒真命题

  • 蕴含 A=>B真值表

    A B A=>B
    true true true
    true false false
    false true true
    false false true

    理解: 只要求条件true时, 结论true, 蕴含关系就存在, 条件false是结论不管是什么, 都不能否认之前的定义, 所以还是true

    类似A是B的充分条件(非必要); 充分必要条件是A=B

    A=>B 等价于(¬A)VB

  • A=>B的逆命题是B=>A

    逆命题不一定是真(和原命题真值表没有关系)

  • A=>B的逆否命题是 (¬B)=>(¬A)

    逆否命题真值表同原命题

  • 摩根定律

    (¬A)V(¬B)=¬(A^B) (¬A)^(¬B)=¬(AVB)

  • 利用卡诺图抽象逻辑表达式

    两个因子的抽象

    其中打钩区域可以抽象为 (¬A) V B

    三个因子的抽象

    其中打钩区域可以抽象为 (¬A) V C

三 余数

问题一: 今天星期天, 100天后星期几?

问题二: 今天星期天, 10的100次方天后星期几?

  • 大数据问题求解: 找到状态重复的周期, 然后对大数去掉最大周期, 也就是求余数, 从而把大数问题简化为小数据问题
  • 奇偶校验