【杂谈】初赛知识点

参考资料

CSP初赛知识点梳理 | 蔡勒公式及其推导 | 三种方式求递归时间复杂度 | 常用算法时间复杂度

1. 基础数论

  • 计算日期

可以用可爱的蔡勒公式,首先给出定义:

c 是已经经过的世纪数,y 是世纪内的年份,m 是月份,d 是日期数,w 是星期。

比如:2022.9.14 中 c=20,y=22,m=9,d=14,而 w 就是我们要求的。

于是蔡勒公式给出了一个求 w 的好方法:w=(c42c+y+y4+13(m+1)5+d1)mod7

特殊地,如果月份是 1 月或者 2 月,那么它要当成去年的 13 月或 14 月来计算。

例:计算 1976.1.17 是星期几?
将 1976 年 1 月转化成 1975 年 13 月,则 w=438+75+18+36+171=1116(mod7),求出是星期六。

  • 排列组合

Anm=n!(nm)!:n 个元素中选出 m 个元素按顺序排列的方案数。

Cnm=n!m!(nm)!:n 个元素中选出 m 个元素的方案数(也就是不考虑顺序)。

2. 时间复杂度计算

  • 主定理

目前我看到的有两种版本,参考资料里都有,我就不讲了(逃)

  • 常见时间复杂度

邻接表和邻接矩阵遍历

下列情况对于 n 个点,m 条边的图。

邻接矩阵:O(n2),对于每个点,都要将所有点访问一次。

邻接表:O(n+m),先访问所有 head 数组,再访问边。

Dijsktra

朴素:O(m+n2)

二叉堆/优先队列优化:O((n+m)logn)

斐波那契堆优化:O(m+n logn)

SPFA

平均:O(km),其中 k 为每个节点平均入队次数,一般为 4。

最坏:O(nm) 关于SPFA,它死了

posted @   Cloote  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示