SAM PAM 算法模板

本文介绍了SAM(后缀自动机)和PAM(回文自动机)的基础知识,用于处理字符串问题。针对如何记忆这两种自动机,文章提供了背板技巧,并给出了相应的伪代码。虽然当前仅涉及单串问题,但作者承诺会补充广义版本。
摘要由CSDN通过智能技术生成

最近发现我字符串很菜(你这话不对,你不是上个学期就已经是整个机房字符串最菜的吗)。我好像经常忘板子(其实写这篇的时候我已经忘了SA怎么写了)。所以写篇博客吧,若以后再忘可以帮助记忆。

SAM和PAM这两个自动机长得比较像,可以一起记。

这里目前只有基础的版本,只能处理单串问题。广义的版本以后某时再补上(发出咕咕的声音)。

SAM 后缀自动机

如何背板:
记住一个循环:for (; p && !go[p][c]; p = par[p]) go[p][c] = np;
记住一个条件:len[q] == len[p] + 1
记得设根为1,不能用空结点做根

伪代码

设0为空结点,1为根
extend(c) {
    新建 np 并设置 len (其实是设置除par外的所有属性,因为go为空)
    for (!go[p][c]) go[p][c] = np;
    if (!p) par =
### PAM算法在MATLAB中的实现 PAM(脉冲幅度调制)信号的生成涉及采样、量化和编码三个主要步骤[^1]。下面提供一段完整的MATLAB代码示例,用于创建并可视化简单的PAM信号。 #### 创建PAM信号的MATLAB代码 ```matlab % 参数设置 Fs = 8000; % 采样频率 (Hz) f = 5; % 原始正弦波频率 (Hz) A = 1; % 幅度 T = 1/f; % 波形周期 t = 0:1/Fs:T-1/Fs; % 生成原始模拟信号 original_signal = A * sin(2*pi*f*t); % 设置采样参数 sample_rate = Fs/4; num_samples = length(t); samples_per_period = num_samples / sample_rate; % 进行均匀采样 sample_indices = round(linspace(1, numel(original_signal), samples_per_period)); pam_signal = original_signal(sample_indices); % 绘图展示原信号与PAM信号对比 figure; subplot(2,1,1); plot(t*Fs, original_signal,'b'); title('Original Analog Signal'); xlabel('Time Sample Index'); ylabel('Amplitude'); subplot(2,1,2); stem((sample_indices-1)/Fs, pam_signal,'r','filled'); hold on; plot(t*Fs, zeros(size(t)),'k--'); grid minor; title('Generated PAM Signal Samples'); xlabel('Time Sample Index'); ylabel('Amplitude'); hold off; ``` 这段程序首先定义了一些必要的变量来描述要处理的模拟信号特性,接着实现了对该信号按指定间隔取样的操作,并最终绘制出了原始连续时间和对应的离散化后的PAM信号图形表示形式。 上述例子仅展示了基础功能,在实际应用中可能还需要考虑更多因素如噪声影响、多级量化等扩展情况。对于更复杂的场景,则可以根据具体需求调整相应的参数配置以及加入额外的功能模块。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值