当前位置: 首页 > news >正文

后缀数组~

子串:在字符串s中,取任意i<=j,那么在s中截取从i到j的这一段就叫做s的一个子串。

后缀:后缀就是从字符串的某个位置i到字符串末尾的子串,我们定义以s的第i个字符为第一个元素的后缀为suff(i)。

suff(1)就是从第一个字符到最后一个字符。

 

后缀数组的定义

把s的每个后缀按照字典序排序,

后缀数组sa[i]表示排名为i的后缀的起始位置的下标;

而它的映射数组rak[i]就表示起始位置的下标为i的后缀的排名;

简单来说,sa[i]表示排名为i的是啥,rak[i]标是第i个的排名是啥。

例如,ababa,他的后缀有ababa,baba,aba,ba,a。进行排序['a', 'aba', 'ababa', 'ba', 'baba'],则s[3]表示排名为3的后缀的起始位置的下标就是1;rak[3]就表示起始位置的下标为3的后缀的排名=2。

LCP:

LCP(i:j)biaoshi suff(sa[i])与suffer(sa[j])的最长公共前缀。

LCP(I,J)=LCP(J,I).

LCP(I,I)=len(sa[i])=n-sa[i]+1

Height:表示LCP(I,I-1)

 

快速排序

1、在数组中选择一个基准元素(pivot)

2、分区,把所有小于或等于pivot的元素放在pivot的左边

3、把所有大于或等于pivot的元素放在pivot的右边

4、递归的排序pivot的左边和右边的子数组

 

import java.util.Arrays;public class QuickSort {public static void main(String[] args) {
int[]arr={3,5,2,1,4};
quickSort(arr,0,arr.length-1);System.out.println(Arrays.toString(arr));}public static void quickSort(int[] arr, int low, int high){if (arr==null||arr.length==0||low>=high) return;//选择基准元素int middle=low+(high-low)/2;int pivot=arr[middle];//分区操作int i=low,j=high;while (i<=j){//从左往右找,找到左边第一个>=pivot的元素while (arr[i]<pivot) i++;//从右往左找,找到右边第一个<pivot的元素while (arr[j]>pivot) j--;//交换这两个元素if (i<=j){int temp=arr[i];arr[i]=arr[j];arr[j]=temp;i++;j--;}}//递归处理左右子数组if (low<j) quickSort(arr,low,j);if (high>i) quickSort(arr,i,high);}
}

 

1、选择中间元素作为基准,避免在已排序数组中出现最坏的时间复杂度

2、分区,使用双指针i和j从两端向中间扫描

3、递归终止条件,当low>=high时停止递归

4、时间复杂度,如果每次分区都能将数组均匀分成两半,那么递归的深度是O(log n),每一层的总工作量是O(n),所以平均时间复杂度是O(n log n)。但是,如果分区不均匀,比如总是分成一个很小的部分和一个很大的部分,递归深度会接近O(n),导致最坏时间复杂度O(n²)。

相关文章:

  • 区块链vs实体经济:一场金融、医疗、政务与物流的“效率革命”
  • 优化问题中变量分类与作用分析
  • JavaWeb学习打卡-Day5-Spring事务管理、SpringAOP
  • 系统传输慢,多路复用还不行,加多物理链路buff
  • 同时安装多个版本的golang
  • 账户解封无望?3步高效申诉取回亚马逊冻结资金
  • 【计网】计算机网络的类别与性能
  • LM393比较器的比较翻转电压不对
  • 微信小程序-van-uploader的preview-size
  • 品融天猫代运营服务内容详解:专业化体系驱动品牌增长
  • 策略模式:灵活的算法封装与切换
  • 从灰色地带走向阳光监管的漏洞产业
  • [蓝桥杯刷题]---模拟法[2]日期问题
  • 【Nginx】 使用least_conn负载均衡算法是否能将客户端的长连接分散到不同的服务器上demo
  • 行政区划代码
  • 需要掌握的前端安全概念以及实操
  • 第8讲:坐标轴与刻度优化指南(字体、角度、格式处理)
  • 【C到Java的深度跃迁:从指针到对象,从过程到生态】第四模块·Java特性专精 —— 第十六章 多线程:从pthread到JMM的升维
  • OpenResty技术深度解析:原理、应用与生态对比-优雅草卓伊凡
  • 深入理解同源策略与跨域资源共享(CORS)
  • 华侨城A:一季度营收53.63亿元,净利润亏损14.19亿元
  • 洗冤录·巴县档案|道咸年间一起家暴案
  • 利用AI捏造“天价骨灰盒”谣言,内蒙古包头一网民被行政处罚
  • 李彦宏:DeepSeek不是万能,多模态将是未来基础模型的标配
  • 调查丨当节气出现“时差”,陕西的果农们经历着什么?
  • 马上评丨一些影视剧的片名,越来越让人看不懂