排序算法总结笔记
排序简介
排序算法(英语:Sorting algorithm)是一种将一组特定的数据按某种顺序进行排列的算法。排序算法多种多样,性质也大多不同。
性质
稳定性
稳定性是指相等的元素经过排序之后相对顺序是否发生了改变。
拥有稳定性这一特性的算法会让原本有相等键值的纪录维持相对次序,即如果一个排序算法是稳定的,当有两个相等键值的纪录 RRR 和 SSS,且在原本的列表中 RRR 出现在 SSS 之前,在排序过的列表中 RRR 也将会是在 SSS 之前。
基数排序、计数排序、插入排序、冒泡排序、归并排序是稳定排序。
选择排序、堆排序、快速排序不是稳定排序。
时间复杂度
时间复杂度用来衡量一个算法的运行时间和输入规模的关系,通常用 OOO 表示。
简单计算复杂度的方法一般是统计“简单操作”的执行次数,有时候也可以直接数循环的层数来近似估计。
时间复杂度分为最优时间复杂度、平均时间复杂度和最坏时间复杂度。OI 竞赛中要考虑的一般是最坏时间复杂度,因为它代表的是算法运行水平的下界,在评测中不会出现更差的结果了。
基于比较的排序算法的时间复杂度下限是 O(nlogn)O(n\log n)O(nlo ...
CPP Primer 知识点笔记
CPP Primer 知识点笔记
第1章 开始
最简单的main函数:
123int main() { return 0;}
C++包含两种注释,注释界定符/**/通常用于多行注释,而双斜杠//通常用于单行或半行注释。
123456789101112131415#include <iostream>/** Simple main function:* Read two numbers and write their sum*/int main() { int sum = 0, val = 1; // keep executing the while as long as val is less than or equal to 10 while (val <= 10) { sum += val; // assigns sum + val to sum ++val; // add 1 to val } std::cout << &q ...
C++11 新特性相关知识
C++11 Features
01 auto & decltype
auto 和 decltype用于自动推导类型,区别在于auto只能用于对变量的类型推导,而decltype用于实体或者表达式的类型推导,例如
123456auto var1 = 10; //int auto var2 = 10.0; //double auto var3 = &var1; //int * decltype(var1) var4 = 1; // var4 is int decltype(10.8) var5 = 5.5; // var5 is double decltype(var5 + 100) var6; // var6 is double
某些情况下,我们不需要知道某个函数的返回值,或者返回值有可能发生变动的情况下,可以使用decltype来表示,如
1decltype(f()) a = f();
auto 可以实现类似迭代器的功能,如
12map<int, string> map1; for(auto &item : map1 ) { ...
C++ 虚函数表
一、概述
为了实现 C++ 的多态,C++ 使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。
二、类的虚表
“多态” 的关键在于通过基类指针或引用调用一个虚函数时,编译时不确定到底调用的是基类还是派生类的函数,运行时才确定。这是如何实现的呢?
请看下面的程序,该程序演示了多态类对象存储空间的大小。
12345678910111213141516171819#include <iostream>using namespace std;class A{public: int i; virtual void func() {} virtual void func2() {}};class B : public A{ int j; void func() {}};int main(){ cout << sizeof(A) << ", " ...
Typora 破解教程
Typora 破解
一、配置环境,下载破解工具
破解需要有 python 环境,需要提前配置好。可以下载 miniconda 配置 python 环境。
访问 https://github.com/Mas0nShi/typoraCracker.git 下载破解需要的压缩包并且解压缩
二、执行破解
进入 typoraCracker-master 文件夹
打开 powershell 或其他终端
运行如下代码安装依赖项
1pip install -r requirements.txt
如果提示没有pip则按提示安装pip即可
执行解包命名:
1python typora.py "{installRoot}/Typora/resources/app.asar" workstation/outfile/
其中 installRoot 用 Typora 的安装目录替换,默认是 C:/Program Files,使用示例如下:
1python typora.py "C:/Program Files/Typora/resour ...
多模式串匹配 | AC自动机、Trie图
AC 自动机、Trie 图
C++代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100// 指针版class Trie {public: struct Node { bool isEnd = false; int cnt = 0; int len = 0; string s = ""; Node *son[26] = {nullptr}; Node *fail = nullptr; }*root; Trie() { root = new Node; ...
数学知识 | 博弈论之SG函数
博弈论之 SG 函数
NIM 游戏
在许多地方曾经流行过这样一个小游戏: 摆出三堆硬币, 分别包含 3 枚、5 枚、7 枚。两人轮流行动, 每次可以任选一堆, 从中取走任意多枚硬币, 可把一堆取光, 但不能不取。取走最后一枚硬币者获得胜利。
这类游戏可以推广为更加一般的形式:
给定 nnn 堆物品, 第 iii 堆物品有 AiA_{i}Ai 个。两名玩家轮流行动, 每次可以任选一堆, 取走任意多个物品, 可把一堆取光, 但不能不取。取走最后一件物品者获胜。两人都采取最优策略, 问先手能否必胜。
我们把这种游戏称为 NIM 博亦。把游戏过程中面临的状态称为局面。整局游戏第一个行动的称为先手, 第二个行动的称为后手。若在某一局面下无论采取何种行动, 都会输掉游戏, 则称该局面必败。所谓采取最优策略是指, 若在某一局面下存在某种行动, 使得行动后对手面临必败局面, 则优先采取该行动。同时, 这样的局面被称为必胜。我 们讨论的博恋问题一般都只考虑理想情况, 即两人均无失误, 都采取最优策略行动时游 戏的结果。NIM 博亦不存在平局, 只有先手必胜和先手必败两种情况。
定理: NIM 博亦先 ...
Makefile介绍
来源:跟我一起写Makefile — 跟我一起写Makefile 1.0 文档
Makefile
什么是makefile?或许很多Windows的程序员都不知道这个东西,因为那些Windows的集成开发环境(integrated development environment,IDE)都为你做了这个工作,但我觉得要作一个好的和专业的程序员,makefile还是要懂。这就好像现在有这么多的HTML编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标签的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。
因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计其数,并且按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
makefile带来的好处就是——“自动化编译”,一 ...
一文搞定异地同步看剧看电影难题!
一文搞定异地同步看剧看电影难题!
一、自带资源库的一些手机App、会议软件共享屏幕
U哩
同娱
bind
微光
窝窝
微距影厅
恋爱记
这些App其实都差不多,里面有一些影视库直接可以看,也可以看支持的影视网站资源如腾讯、B站等(一般得是非vip资源)。这些软件主打恋爱交友,里面乱七八糟的东西比较多,自己辨别就好。影视库资源可能不太全,可以多试几个App来互补使用。
或者使用会议软件如腾讯会议、Zoom等共享屏幕,实测有延迟,画质也不太行,如果对时延和画质要求不高的,可以尝试。注意:可能会被软件检测到在播放涉及版权问题的影视资源,画面直接黑屏。
二、与你App(手机端,可以上传资源多人一起在线看)
下载地址:与你科技 ,各大手机应用商店
优点:可以上传任意资源,不受资源库版权匮乏困扰(切勿用于非法途径( •̀ .̫ •́ )✧)
软件里面有内置网盘,可以把视频资源上传到与你网盘里面,然后建立一个群聊,再点➕号开启个一起看应用,就可以同步看电影看剧啦~实时同步,暂停,快进都可以!
三、Coplay(两人,浏览器插件,适用各大视频网站)
Chrome 扩展:Coplay - Chro ...
基本数据结构 | 字符串
字符串
KMP 模式匹配
KMP\mathrm{KMP}KMP 算法, 又称模式匹配算法, 能够在线性时间内判定字符串 A[1∼N]A[1 \sim N]A[1∼N] 是否为字符串 B[1∼M]B[1 \sim M]B[1∼M] 的子串, 并求出字符串 AAA 在字符串 BBB 中各次出现的位置。
首先, 一个 O(NM)\mathrm{O}(N M)O(NM) 的朴素做法是, 尝试枚举字符串 BBB 中的每个位置 iii, 把字符串 AAA 与字符串 BBB 的后缀 B[i∼M]B[i \sim M]B[i∼M] 对齐, 向后扫描逐一比较 A[1]A[1]A[1] 与 B[i],A[2]B[i], A[2]B[i],A[2] 与 B[i+1]⋯B[i+1] \cdotsB[i+1]⋯ 是否相等。我们把这种比较过程称为 AAA 与 BBB 尝试进行 “匹配”。
其次, 这个问题使用字符串 Hash 也能在线性时间内求解。通过《Hash》一文中的 “兔子与兔子” 这道例题, 我们已经知道: 可以在 O(N)O(N)O(N) 的时间内预处理一个字符串的所有前缀 Hash 值, 并在 O(1 ...