系统二分查找实现
前言
二分查找不同变种和边界问题使得其在实际编程中难以实现,本文希望探索一种系统的二分查找实现,使在实际编程中应对各种变种能高效实现代码。本文无特殊情况会持续更新。
因左闭右开区间在编程中的优越性,现约定本文所有二分算法皆为左闭右开区间实现。
序列
特征下标(序列首、序列尾)
现有一序列A,各元素下标为 i,i+1,…,n-2,n-1,则称i为序列首,记为A0,n为序列尾,记为AN。
将序列首、序列尾统称为序列的特征下标。
序列的长度
序列长度为AN-A0,记为△A。
特殊地,A0=0的序列长度为AN。
合序列
定义
由两个及以上的序列不封闭的首尾相接构成合序列,用于构成合序列的序列称为分序列。
合序列的特征分序列
现有合序列A,将A的第一个分序列记为A0_,在合序列末尾构造一个长度任意的序列,记为AN_。
合序列的长度
合序列的长度为∑△Ai_(0<=i<N),记为△A。
特殊地,A0_0=0的序列长度为AN。
分序列之间特征下标的关系
Ai_N=A(i+1)_0
与△A(i+1)_=A(i+1)_N-A(i+1)_0联立得:
Ai_N=A(i+1)_N-△A(i+1)_(0<=i<N)