0%

前言: 二分查找虽然并不是什么很难的东西, 但因为我始终背不下来, 每次要用的时候都得现场小心翼翼地推导细节, 十分苦恼。因此希望通过写一篇笔记总结, 把它刻入我的记忆。

基本概念

不再赘述, 引用维基百科: > 在计算机科学中,二分查找算法(英语:binary search algorithm),也称折半搜索算法(英语:half-interval search algorithm)[1]、对数搜索算法(英语:logarithmic search algorithm)[2],是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

阅读全文 »

理论基础

字符串哈希, 即把一个字符串映射为一个整数, 这个整数称之为hash code。在理想状态下, 只有两个字符串完全相等, hash code才会相等。 因此可以用两个字符串的hash code来判断字符串是否相等。

将字符串转化为整数的函数也叫做哈希函数。

字符串前缀哈希

字符串前缀哈希是前缀思想在哈希中的应用, 一般用来解决多次查询子串哈希的问题。

单次计算一个字符串的哈希值复杂度是 O(n),其中n为串长,与暴力匹配没有区别,如果需要多次询问一个字符串的子串的哈希值,每次重新计算效率非常低下。

阅读全文 »

前言

c++拥有强大的STL, 在对复杂的数据结构排序时只需要自定义去比较函数, 然后放到容器内调用api即可。

本该是很简单的东西, 但我之前一直无法记住升序以及降序两种方向该分别怎么写,总是会搞混, 每次都得现场Google。终于下定决心要在今天把它彻底搞定。

自定义排序的三种比较器形式

比较函数

STL中的sort函数已经为我们提供了排序算法的框架,我们唯一要做的决定就是对于两个元素ab, 谁在前、谁在后?

阅读全文 »

什么是缩进风格

缩进风格是代码风格的一部分, 是自发形成的一种约定, 用控制代码块缩进的方式传达程序的结构。

缩进风格可以分为两个方面:缩进大小大括号位置

缩进大小

缩进在大部分语言中并不是强制要求, 但合理的缩进有利于人类理解程序的结构, 即提高了代码的清晰性。

1983年在PASCAL代码上进行的一项实验发现,缩进大小显着影响了可理解性。2 到 4 个字符之间的缩进大小被证明是最佳的。

在大部分的程序语言中, 默认使用四个空格或一个tab键(制表符可以与空格互相转换, 一个'等于4个空格)

阅读全文 »