后缀自动机 学习笔记


我还是也写个吧,方便复习,太容易忘了我。。

构造

why if(len[q]!=len[p]+1) nq=++tot
\(q\)\(p\)之间还有更短的串,\(q\)不是第一个能接\(nowc\)的串,所以新建一个节点\(nq\)\(nowc\)连上。
从后缀树角度:原先\(nq\)相当于只有一个子节点,可以被压缩,而加入了\(nowc\)后就有两个孩子了。

性质

1.每个状态(节点)代表的所有串在原串中的出现次数和每次出现的右端点集合相同;节点p所代表字符串的长度为依次取 \((\ len[fa[p]],len[p]\ ]\) 中每一个数;\(len_{min}[p]=len_{max}[fa[p]]+1\)
(每个节点代表的串即根节点到达该点的任意一条路径形成的串。这个串与其他路径形成的串不同。 )
2.\(SAM\)的点数不超过\(2n-2\),边数不超过\(3n-3\)
3.parent树,就是翻转字符串\(s\)后建立的后缀树(也是原串的反向前缀树)。
4.两个串的最长公共后缀的状态,位于这两个串状态在parent树上的LCA处。
5.从根节点按字典序遍历可以得到原串的所有子串。
6.每个点的 \(right\) 是其子树所有点的 \(right\) 的并集。即 \(right(p)\subset right(fa[p])\)(parent树上子节点的right是父节点的子集)。
7.\(SAM\)的状态和转移构成了一个有向无环图。常利用拓扑排序求到达某点的路径数。

应用

https://blog.csdn.net/clover_hxy/article/details/68059043

最长公共子串

两个串的最长公共子串:SPOJ1811 LCS
多个串的最长公共子串:SPOJ1812 LCS2


第K小子串

BZOJ3998 弦论
BZOJ2882 工艺


重复出现子串

POJ1743 Musical Theme
BZOJ2555 SubString


广义后缀自动机

BZOJ3926 [ZJOI2015]诸神眷顾的幻想乡
hihoCoder1457 后缀自动机四·重复旋律7
BZOJ2780 Sevenk Love Oimaster
BZOJ3277 串


parent树与right集合

通常是利用parent树与right集合处理计数问题。
hihoCoder1465 后缀自动机五·重复旋律8
BZOJ4516 [SDOI2016]生成魔咒
BZOJ4566 [HAOI2016]找相同字符
BZOJ1396 识别子串


SAM与DP

BZOJ3238 [AHOI2013]差异
BZOJ4180 字符串计数
BZOJ4032 [HEOI2015]最短不公共子串
BZOJ2806 [CTSC2012]Cheat


神仙题 各种结合(其实也就是与线段树...?)

好吧也已经成了套路了?
CF666E Forensic Examination
对于匹配多个串(广义SAM),要求S在哪个串中出现最多,可以先求每个节点贡献|right|最大的是哪个串,然后用S匹配到一个节点。
具体是,每个点建线段树,每插入一个字符,在插入位置的当前串处+1并Update更新答案。线段树可以合并子节点的|right|,也可以区间查!
求S的某区间匹配到哪个点,可以先匹配1~r,然后倍增找到恰好匹配l~r的点。
NOI2018 你的名字


把一个串在SAM上匹配,就可以得到以某个位置作为后缀,其最长可匹配的长度。

在parent树上(或是按拓扑序)自底向上更新可以得到某个位置的right大小,乘对应的len也可以得到每个节点表示的子串个数;求每个节点表示的子串个数也可以从根节点向下更新,只是这样要每次枚举更新其所有儿子。

模式串如果多次匹配某点且不重复计算,要打个标记。

转载于:https://www.cnblogs.com/SovietPower/p/SAM.html

AI实战-学生生活方式模式数据集分析预测实例(含24个源代码+69.54 KB完整的数据集) 代码手工整理,无语法错误,可运行。 包括:24个代码,共149.89 KB;数据大小:1个文件共69.54 KB。 使用到的模块: pandas os matplotlib.pyplot seaborn plotly.express warnings sklearn.model_selection.StratifiedShuffleSplit sklearn.pipeline.Pipeline sklearn.compose.ColumnTransformer sklearn.impute.SimpleImputer sklearn.preprocessing.OrdinalEncoder numpy sklearn.model_selection.cross_val_score sklearn.linear_model.LinearRegression sklearn.metrics.mean_squared_error sklearn.tree.DecisionTreeRegressor sklearn.ensemble.RandomForestRegressor sklearn.model_selection.train_test_split sklearn.preprocessing.PowerTransformer imblearn.pipeline.Pipeline imblearn.over_sampling.SMOTE sklearn.ensemble.AdaBoostClassifier sklearn.metrics.accuracy_score sklearn.metrics.precision_score sklearn.metrics.recall_score sklearn.metrics.f1_score optuna scipy.stats torch torch.nn torchvision.transforms torchvision.models torch.optim cv2 glob glob.glob torch.utils.data.DataLoader torch.utils.data.Dataset random.shuffle torch.utils.data.random_split torchsummary.summary matplotlib.ticker pyspark.sql.SparkSession pyspark.sql.functions.count pyspark.sql.functions.max pyspark.sql.functions.min pyspark.sql.functions.avg pyspark.sql.functions.stddev_samp pyspark.sql.functions.skewness pyspark.sql.functions.kurtosis pyspark.sql.functions pyspark.ml.feature.Tokenizer pyspark.ml.feature.VectorAssembler sklearn.preprocessing.LabelEncoder keras.models.Sequential keras.layers.Dense keras.utils.to_categorical ptitprince statsmodels.distributions.empirical_distribution.ECDF statsmodels.stats.outliers_influence.variance_inflation_factor ppscore sklearn.feature_selection.mutual_info_classif sklearn.decomposition.PCA sklearn.model_selection.StratifiedKFold sklearn.tree.DecisionTreeClassifier sklearn.metrics.balanced_accuracy_score sklearn.metrics.confusion_matrix mlxtend.plotting.plot_confusion_matrix scipy.stats.pearsonr scipy.stats.f_oneway sklearn.feature_selection.mutual_info_regression sklearn.feature_selecti
AI实战-信用卡申请风险识别数据集分析预测实例(含9个源代码+91.57 KB完整的数据集) 代码手工整理,无语法错误,可运行。 包括:9个代码,共44.98 KB;数据大小:1个文件共91.57 KB。 使用到的模块: pandas os matplotlib.pyplot seaborn wordcloud.WordCloud sklearn.model_selection.train_test_split sklearn.preprocessing.LabelEncoder sklearn.ensemble.RandomForestClassifier sklearn.metrics.accuracy_score sklearn.metrics.classification_report sklearn.metrics.confusion_matrix plotly.express plotly.subplots.make_subplots plotly.graph_objects plotly.io sklearn.base.BaseEstimator sklearn.base.TransformerMixin sklearn.preprocessing.StandardScaler sklearn.preprocessing.OrdinalEncoder sklearn.pipeline.make_pipeline sklearn.compose.make_column_transformer imblearn.over_sampling.RandomOverSampler sklearn.svm.SVC sklearn.tree.DecisionTreeClassifier sklearn.ensemble.HistGradientBoostingClassifier sklearn.ensemble.GradientBoostingClassifier sklearn.neighbors.KNeighborsClassifier sklearn.model_selection.GridSearchCV sklearn.ensemble.VotingClassifier torch lightning torchmetrics.Accuracy torch.utils.data.Dataset torch.utils.data.DataLoader numpy warnings matplotlib wordcloud.STOPWORDS collections.Counter sklearn.ensemble.ExtraTreesClassifier sklearn.ensemble.AdaBoostClassifier sklearn.ensemble.BaggingClassifier xgboost.XGBClassifier lightgbm.LGBMClassifier catboost.CatBoostClassifier sklearn.linear_model.LogisticRegression sklearn.model_selection.RandomizedSearchCV sklearn.preprocessing.MinMaxScaler imblearn.over_sampling.SMOTE
AI实战-加拿大的工业产品价格指数数据集分析预测实例(含4个源代码+18.20 MB完整的数据集) 代码手工整理,无语法错误,可运行。 包括:4个代码,共38.64 KB;数据大小:1个文件共18.20 MB。 使用到的模块: numpy pandas os sklearn.model_selection.train_test_split tensorflow.keras.models.Sequential tensorflow.keras.layers.Dense sklearn.impute.KNNImputer sklearn.impute.IterativeImputer sklearn.linear_model.LinearRegression matplotlib.pyplot sklearn.datasets.make_blobs sklearn.cluster.DBSCAN sklearn.neighbors.LocalOutlierFactor sklearn.ensemble.IsolationForest sklearn.svm.OneClassSVM sklearn.preprocessing.MinMaxScaler sklearn.preprocessing.StandardScaler sklearn.preprocessing.MaxAbsScaler sklearn.preprocessing.RobustScaler sklearn.preprocessing.PowerTransformer sklearn.preprocessing.QuantileTransformer sklearn.preprocessing.OneHotEncoder sklearn.preprocessing.LabelEncoder category_encoders seaborn sklearn.cluster.KMeans sklearn.metrics.silhouette_score sklearn.decomposition.PCA sklearn.datasets.load_iris scipy.cluster.hierarchy.linkage scipy.cluster.hierarchy.dendrogram sklearn.cluster.AgglomerativeClustering sklearn.mixture.GaussianMixture matplotlib warnings sklearn.metrics.mean_squared_error sklearn.metrics.r2_score plotly.express sklearn.ensemble.RandomForestRegressor sklearn.ensemble.GradientBoostingRegressor catboost.CatBoostRegressor sklearn.metrics.mean_absolute_error sklearn.model_selection.RandomizedSearchCV statsmodels.tsa.arima.model.ARIMA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值