最小周期串


  来源:《算法竞赛入门经典》例题5.1.3

  题目:如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。输入一个长度不超过80的串,输出它的最小周期

  样例输入:HoHoHo

  样例输出:2

  分析:题目中说过,字符串可能会有多个周期。但因为只需求出最小的一个,可以从小到大枚举各个周期,一旦符合条件就立即输出。

源码:

#include<iostream>
#include<string>

using namespace std;

int main(int argc,char **argv)
{
    string str;
    cin>>str;
    unsigned int  i = 1;
    while(str[i] && (i < str.length()/2))
    {
        cout<<i<<endl;
        if(str.substr(0,i)==str.substr(i,i))
        {
            cout<<str.substr(0,i)<<endl;
            break;
        }
        cout<<str.substr(0,i)<<" "<<str.substr(i,i)<<endl;
        i++;
    }
}


### 关于周期的定义与计算 #### 定义 周期是指由一系列具有固定时间间隔或重复模式的时间单元组成的序列。这种概念广泛应用于信号处理、通信系统以及计算机体系结构等领域。具体来说,周期可以被看作是由若干个基本周期组成的一个整体,其特性可以通过分析这些基本周期之间的关系来描述。 在一个典型的场景下,如果存在一组连续的操作,每项操作都对应着一定的时序需求(例如时钟周期、机器周期或指令周期),那么整个过程就可以视为一种周期[^1]。 #### 计算方法 要计算周期的整体周期长度,需考虑以下几个方面: 1. **最小单位——时钟周期** 如前所述,时钟周期是构成任何复杂周期的基础单元。假设系统的主频为 \( f \),则单一时钟周期可表示为: \[ T_{\text{clock}} = \frac{1}{f} \] 2. **机器周期与指令周期的关系** 对于某些简单指令而言,仅需占用单一机器周期即可完成全部工作流程;而对于较为复杂的指令类型,则可能涉及多个机器周期才能达成目标功能[^2]。因此,在评估某一特定任务所需总耗时时,应当综合考量其所关联的所有独立阶段所耗费的具体数量级及其对应的持续时间段数。 3. **累加各组成部分的时间开销** 当明确了各个子环节分别占据多少比例之后,便可依次叠加起来得到最终结果。比如当某个程序片段包含 n 条不同类型的语句,并且已知它们各自所需的平均执行次数 k_i 及相应花费 t_i (i=1,...,n), 那么总体运行时间T即满足如下表达式: ```python total_time = sum([k * t for k, t in zip(k_list, t_list)]) ``` 通过以上步骤便能够有效地估算出任意给定条件下完整的周期表现形式及相关参数指标。 ```python def calculate_cycle_string_period(clock_frequency, instruction_cycles): """ Calculate the period of a cycle string based on clock frequency and list of instructions' cycles. Args: clock_frequency (float): System's main frequency in Hz. instruction_cycles (list[int]): List containing number of machine cycles per each instruction. Returns: float: Total time required to execute all provided instructions as part of one full 'cycle-string'. """ clock_period = 1 / clock_frequency # Assuming every element represents single-machine-cycle duration equivalent value already multiplied by respective counts etc... return sum(instruction_cycles) * clock_period # Example usage: frequency = 10e6 # MHz converted into standard SI unit hertz instructions_data = [1]*8 + [2]*4 # Eight simple ops followed by four complex ones requiring double mcycles apiece resultant_duration = calculate_cycle_string_period(frequency, instructions_data) print(f"The calculated overall execution span amounts approximately {round(resultant_duration*1e9)} nanoseconds.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值