🐶位运算 & 数学
00 min
Jul 2, 2021
Oct 21, 2023
type
status
date
slug
summary
tags
category
icon
password

组合数学

求组合的时候,要防止两个int相乘溢出! 所以不能把算式的分子都算出来,分母都算出来再做除法。而是需要在计算分子的时候,不断除以分母。
这个代码不行:
这个代码可以:
 
题目
集合和位运算结合
位运算「并行计算」

位运算

进制

转十进制

每个数位的加权和

转非十进制

对整数部分和小数部分分别转换
整数部分每次除以X直到变成0,反向遍历每次的余数
一开始的,不能整除的,余留的部分,说明是bits最末尾的残留
每一次整除都是提升权重
小数部分的转换方式是将十进制数的小数部分每次乘以X直到变成0,正序遍历每次的整数部分
每一次乘法都是提升权重

原码、反码和补码

正数是三个都一样
负数符号位都是不动的
两个方向都是 取反 + 1
反码的引入,解决了原码的减法运算结果错误的问题,但是仍然没有解决同时存在+0和−0的问题
notion image

位运算符

左移

注意溢出
将一个数左移k位,等价于将这个数乘以
当乘数不是2的整数次幂时,可以将乘数拆成若干项2的整数次幂之和

右移

向下取整
对于负数,(-50)>>2 == -13,而(-50)/4 ==12(向0取整或者舍弃小数点),是不等价的

位运算的性质

notion image
一个数是2的幂次,那就仅有一个bit是1
计算机内部天然用二进制、十六进制表示数值
 
notion image
m可以是任何数,比如这题的12345

数学

数学在算法中的常见应用有以下几点:
  1. 有些算法需要通过数学证明其正确性,例如贪心算法需要证明贪心策略可以得到最优解,动态规划算法使用最优子结构的性质,部分情况下也需要证明动态规划算法的正确性;
  1. 有些算法问题本身就是数学问题,例如概率、几何、数论、组合等问题;
  1. 博弈问题经常需要用到数学知识。
知识点列举:
  • 幂运算;——快速幂
  • 概率;——递归、推导公式、模拟
  • 几何;——模拟
  • 数论;——prime、最大公约数gcd(辗转相除)
  • 组合数学;
  • 博弈。
notion image
notion image

Comments