统计的力量——线段树全接触

by zkw, Jul 6, 2011, 5:40 PM

  主要内容是: 一种快速, 易编写的线段树, 标记永久化的思想, 线段树在统计上的应用, 使用条件, 以及部分取代其他数据结构如平衡树的讨论.

  下载幻灯片
This post has been edited 3 times. Last edited by zkw, Jun 21, 2014, 4:21 AM

BST 拓展与伸展树 (Splay) 一日通

by zkw, Jul 6, 2011, 5:34 PM

  BST (二分检索树) 是 OI 中一个常用的数据结构, 主要支持的操作是动态维护一个有序表, 从而支持字典, 前驱, 后继, 中序遍历, 优先队列等等多种操作. 如果在域中维护了子树的 size, 还可以支持查找第 k 大的数, 询问名次等等附加功能. 伸展树 (Sleator and Tarjan, 1985) 是 BST 的一个变种, 可以自调整以维护平衡, 并支持根据需要随时把任意节点旋转到根 (称为 splay 操作), 从而很好的支持了分裂合并等操作, 从某种意义上 (详见下文) 也简化了思维和编程的复杂度. 由于 splay 操作的迅速而优美, 伸展树不仅可以维护有序表, 还可以放弃关键字的有序性, 像块状链表一样维护一个一般的序列 (这是一般的 BST 甚至其他平衡二叉树难于做到的), 支持块状链表的大多数方法, 并拥有更低的理论复杂度和实际代码量. 另外, splay 是唯一支持稳定排序的平衡二叉树, 可以妥善处理关键字相同的元素 (按照插入顺序有序), 在输出时可以选择返回其中最近插入、最远插入的, 或是直接返回整个区间.

  1. 伸展树的基本操作与应用 点击阅读

  2. 自顶向下伸展树 点击阅读

  3. Code Trick 点击阅读

  4. 复杂度 点击阅读

  5. 应用 点击阅读

  6. C++ 实现 点击查看程序代码
This post has been edited 1 time. Last edited by zkw, Jul 6, 2011, 5:36 PM

SAP (Shortest Augmenting Paths) 最大流算法例程

by zkw, Jul 6, 2011, 5:17 PM

  偶然翻到还在用 Pascal 时写的 SAP 心得, 发现还有很多人关注, 既然现在我已经在用 C++ 了, 那么这里给出一个C++的版本, 已经加上了当前弧, GAP, 多路增广. 毕竟是C++, 程序比Pascal写出来要短一些.

  点击查看程序代码
This post has been edited 2 times. Last edited by zkw, Jul 6, 2011, 5:35 PM

SPFA 的两个优化

by zkw, Jul 6, 2011, 5:14 PM

  SPFA 与堆优化的 Dijkstra 的速度之争不是一天两天了, 不过从这次 USACO 月赛题来看, SPFA 用在分层图上会比较慢. 标程是堆优化的 Dijkstra, 我写了一个非常朴素的 SPFA, 只能过 6/11 个点. SPFA 是按照 FIFO 的原则更新距离的, 没有考虑到距离标号的作用. 实现中 SPFA 有两个非常著名的优化: SLF 和 LLL.

  SLF: Small Label First 策略.
  实现方法是, 设队首元素为 $i$, 队列中要加入节点 $j$,$d_j \le d_i$ 时加到队首而不是队尾, 否则和普通的 SPFA 一样加到队尾.

  LLL: Large Label Last 策略.
  实现方法是, 设队列 $Q$ 中的队首元素为 $i$, 距离标号的平均值为 $\overline d = \frac {\sum_{j \in Q} d_j }{\left| Q \right|}$, 每次出队时, 若 $d_i > \overline d$,$i$ 移到队列末尾, 如此反复, 直到找到一个 $i$ 使 $d_i \le \overline d$, 将其出队.

  加上 SLF 优化后程序多了一行, 过了 9/11 个点. 你问我怎么用 SPFA AC 这个题?利用分层图性质, 算完一层再算一层, 对每一层计算用 SPFA, 加上上面的优化, 程序飞快: 最强的优化要利用题目的特殊性质.
Quote:
大家怎么看?
This post has been edited 1 time. Last edited by zkw, Mar 22, 2014, 5:30 PM

从入门到精通: 最小费用流的“zkw算法”

by zkw, Jul 6, 2011, 4:48 PM

1. 网络流的一些基本概念 点击阅读

2. 最小费用流的各种转化 点击阅读

3. 费用流中的负边和负圈 点击阅读

4. 最小费用流的“zkw算法” 点击阅读

5. “zkw” 费用流算法在哪些图上慢 点击阅读

6. 最小费用流的原始对偶 (Primal-Dual) 算法 点击阅读
This post has been edited 8 times. Last edited by zkw, Jun 2, 2020, 8:15 AM
Reason: Typo

时光真疯狂, 我一路执迷于匆忙.

avatar

zkw
About Owner
  • Posts: 25
  • Joined: Jun 21, 2007
Blog Stats
  • Blog created: Aug 15, 2007
  • Total entries: 5
  • Total visits: 112344
  • Total comments: 1
Search Blog
a