归并排序及其分析 归并排序 该排序的算法思想基于这样一个事实——不断将两个「小的」「有序的」的数组归并成一个「大的」「有序的」的数组,这是分治思想的一个典型应用 可以看到,该排序可以通过递归来实现,并且它一定会有两种基本实现:自顶向下、自底向上 原地归并的抽象方法 由于需要将两个小的、有序的数组合并成一个大的、有序的数组,那么我们就必须要一个 merge 函数来实现这个过程。通过递归地不断调用该函 Algorithm 4 #Algorithm 4
选择、插入、希尔排序及其分析 说明 本文当中的所有排序算法均以类的形式给出,这个类当中还定义了两个基础函数 less 和 exch ,前者用于判断两个数是否满足小于的关系,后者用于交换两个数 我们所有的算法的讨论基础为升序排列 在研究排序算法的成本时,对于会交换元素的算法,我们关注的是比较次数和交换次数,对于不交换元素的算法,我们关注的是数组的访问次数 选择排序 选择排序可以说是排序里面最朴素的一种 Algorithm 4 #Algorithm 4
Union-Find 算法 问题描述 问题的输入是一对整数对,其中每个整数都表示某种类型的对象,一对整数 p q 可以被理解为「p 和 q 是相连的」,我们假设「相连」是一种等价关系,那么有: 自反性:p 和 p 相连 对称性:p 和 q 相连,q 和 p 也相连 传递性:p 和 q 相连且 q 和 r 相连,那么 p 和 r 也相连 显而易见这是「等价关系」的三条性质,我们通过「等价关系」可以将集合划 Algorithm 4 #Algorithm 4
Linux basic 关机重启 123456shutdown -h now //立刻关机shutdown -h 1 //1 分钟后关机shutdown -r now //现在重启halt //关机,与上面一样reboot //现在重启,与上面一样sync //将内存的数据同步到磁盘 用户登录和注销 登录 一般最好不要用 root 登录,因为这东 Misc #Linux
RTTI 概述 RTTI 是运行阶段类型识别(Runtime Type Identification)的简称,其目的是为程序在运行阶段确定对象的类型提供一种标准 也就是说,RTTI 的用途就是为了在程序运行期间确定对象的类型 RTTI 只能用于包含虚函数的类层次结构,原因在于只有一个继承体系当中含义虚函数,将派生类对象赋值给基类指针这件事才有意义(话说回来,没有虚函数直接把派生类对象赋值给基类指 Misc #C++ Primer Plus
异常 异常 程序几乎不可避免地会出现异常,就比如你写了一个除法程序,保不齐会有人手贱非得去试一下分母为 0 会发生什么事情。因此应当异常就显得尤为重要。 异常应当的方式有三种,前两种分别是:调用 abort 强行退出、返回错误码。这两个,emmmm,说实话,没啥技术含量,我们跳过。 我们着重看通过异常机制来处理异常 异常机制 异常提供了将控制权从程序的一个部分传递到另一个部分的途径。C++ Misc #C++ Primer Plus
小林图解网络笔记 TCP/IP 网络模型有哪几层 由于设备的类型是多种多样的,因此在不同的设备间进行通信需要协商出一套通用的网络协议。 该网络协议是分层的,对于 TCP/IP 协议而言,从上到下分为:应用层、传输层、网络层、网络接口层。 这些分层都是理论模型,并不涉及具体的硬件实现 应用层 应用层为最上层,我们所使用的软件都是在应用层实现的。 当两台设备需要传输数据时,应用层只需要把数据传输给下一层, Misc #Computer network
C++ 类模板小结 模板具体化 类模板与函数模板很相似,都有隐式实例化,显示实例化、显示具体化,这些统称为具体化( implicit instantiation) 。类模板的声明用泛型的方式来描述类,而具体化则是以具体的类型来生成对应的类声明。 隐式实例化 在用类声明对象时,我们需要指定其类型,之后编译器会通过类模板来为该类型生成一个类定义(也就是类的具体化,类的模板参数变为已知),即: 1stack&l Misc #C++ Primer Plus
Effective C++ 1.尽量以 const, enum, inline 替换 #define 当我写出 1#define SIZE = 1.638; 记号 SIZE会在预编译阶段就被预处理器给替换掉,这使得SIZE这个名称不会被编译器看到,进而导致SIZE不会进入记号表(symbol table)。当我用此常量而获得一个错误的编译信息时,这个错误信息会提到 1.638 而不会提到 SIZE 。如果我将 Misc #Effective C++
C++ Primer Plus 笔记 函数 基础 函数是如何返回返回值的 通常,函数将返回值复制到指定的CPU寄存器或内存单元中。随后,调用该函数的程序查看该内存单元。函数原型(声明)告诉调用程序返回值的类型,函数定义命令被调用函数用什么类型的数据返回。即返回函数和调用函数必须就该内存单元的数据类型必须要达成一致 关于函数原型(声明) 为什么要用原型 函数原型将该函数的参数类型、数量和返回值类型告诉编译器,使得编译 Misc #C++ Primer Plus