WC2017 Day4

WC2017 Day4

计算机架构和程序底层优化

  • 卡常!卡常!
  • 好像就是洛可强论文内容

0x00 信息的表示和处理

  • 二进制

整数的表示

  • 位向量
  • 16进制

字长?

  • NOI Linux:32位
  • 这导致NOI Linux系统处理64位整数很慢
  • 大多数操作系统:64位

字节顺序?

  • 小端法
  • 大端法
  • 绝大多数个人计算机使用小端法

有符号数

  • 取反加一

四则运算

  • 除法向零取整(c++)

位运算与逻辑运算

  • 逻辑运算是短路的,1||i++并不会使i+1
  • 负数的移位运算并不好使,可能和你想象的不一样
  • 移位超过字长是未定义的,可能会出错

浮点数

  • 没什么好讲的

编程技巧

  • 整数当作位向量使用
  • 求1的个数?
  • 查表
  • 求后缀0的个数?
  • 二分法
  • 查表法
  • LOWBIT?
  • x & -x
  • bitset!
  • 用整数表示集合
  • 优化状压DP

0x01 程序的底层表示

机器指令

  • 汇编语言 第三版

  • 好书

  • 加减乘很快

  • 除法很慢

  • 跳转很不稳定

除法优化

  • 少取模
  • 除以常数的优化
  • 《论程序底层优化的一些方法和技巧》 洛可强 2009

0x02 CPU基础知识

数字逻辑电路

组合逻辑电路

CPU的实现

  • 线性
  • 流水线,会出问题
  • 解决方案:加Bubble,转发(Forwarding),分支预测
  • 现代CPU:超标量(多核),乱序执行

编程技巧

  • 用三元运算符(a>b?a:b)取代条件跳转,消除分支预测错误
  • 四路归并

0x03 层次存储方式

  • 磁盘(HDD)
  • 随机访问储存器(RAM)
  • 固态硬盘(SSD)
  • 寄存器 (Register)

局部性

  • 时间局部性
  • 空间局部性

编写高速缓存友好的代码

  • 优化局部性
  • 避免使用步长为$ 2^n $的访问方式

线性代数

矩阵的转置

  • 沿对角线翻折

行列式

  • 消元后主对角线乘积,或者递归求解

  • |A||B|=|AB|

  • 交换两行,行列式取反

  • 把一行乘以c加到另一行上,行列式不变

  • 下面都是什么玩意

数据压缩算法和通信问题

0x01 一些通信题

0x02 数据压缩算法

无损压缩

  • 主要用于文本压缩
  • 基于文本结构的压缩
  • 基于信息熵的算法

有损压缩

  • 主要用于图片压缩

信息熵

  • $ H=sum -p_{i}log{p_{i}} $
  • pi为每种字符出现的频率
  • aaaaaab与ab
  • 英语与汉语

压缩算法?

  • 游程编码
  • BWT
  • 哈弗曼编码
  • 算数编码
  • RAR
  • ZIP

图片压缩算法?

  • DFT
  • DCT
  • SVD

总结

  • 明天WC2017
  • gtmd
  • rp++
许愿弥生改二
原文地址:https://www.cnblogs.com/LoveYayoi/p/6745472.html