美文网首页
最小表示法(算法)(笔记)

最小表示法(算法)(笔记)

作者: 不知名小号 | 来源:发表于2018-01-14 07:42 被阅读17次

对于一个字符串,将其首尾相接,就能得到一个环形字符串。从不同的元素出发绕一圈,就会得到不同的字符串,最小表示法就是将最小的那个字符串输出。
那么,字符串中的小是如何定义的呢?两个字符串从第0个元素开始比较,一旦两个字符串之间出现了不同,哪个字符元素比较小,则它所在的字符串就比较小。
i = 0; j = 1
以i和j为起点出发,就形成了两个不同的字符串,然后以s[(i + k) % len]和s[(j + k) % len] 来逐个比较以i和j为起点形成的字符串。
如果s[i + k] == s[j + k] ,则k++,直到出现不同为止。
如果s[i+k] > s[j + k] ,那么以i为起点的字符串肯定不是最小的,所以就将i移到i + k + 1的位置,
如果s[i+k] < s[j + k],那么j就不是最小的,则需要j = j +k +1;
由于每次都要以i和j为起点比较,所以每次比较出不同的时候,都要令 k = 0。
最后将i和j最小的那个返回即可。

int get_min(char *s)
{
    int i=0,j=1,k=0,t,l=strlen(s);
    while(i<l&&j<l&&k<l)
    {
        t=s[(j+k)%l]-s[(i+k)%l];
        if(!t)
            k++;
        else
        {
            if(t>0)
                j=j+k+1;
            else
                i=i+k+1;
            if(i==j)
                j++;
            k=0;
        }
    }
    return (i<j?i:j);
}

记一个忘了的知识点

昨天从别人的博客复制代码来调试,不管输入什么,都是返回字符串的长度 。最后发现原因竟然是因为我用了fgets读取字符串,因为fgets函数是读取回车的,所以我将读取的字符串作为字符串作为参数传到函数肯定是不对的,因为换行符的ASCII值最小,所以每次得到的答案就是换行符所在的位置,也就是字符串长度(其实算上换行符的话应该是长度减1)。

相关文章

  • 最小表示法(算法)(笔记)

    对于一个字符串,将其首尾相接,就能得到一个环形字符串。从不同的元素出发绕一圈,就会得到不同的字符串,最小表示法就是...

  • 读书笔记:图解算法

    读书笔记:图解算法 算法简介 二分查找 O(log n) 大O表示法 大O表示法 让你能够比较操作数,它指出了算法...

  • 《算法图解》NOTE 1 算法的渐近表示法以及二分法

    这是《算法图解》的第一篇读书笔记,内容关于表示算法复杂度的渐近表示法以及一个简单但高效的算法:二分法。 1 .渐近...

  • 大O表示法

    大O表示法 是一种特殊的表示法,指出了算法的速度有多快。大O表示法指出了算法有多快。例如,假设列表包含n 个元素。...

  • 面试题汇总

    算法 1、排序都有哪几种方法? 2、最小生成树 1.Kruskal算法 此算法可以称为“加边法”,初始最小生成树边...

  • 《算法图解》笔记——大O表示法

    大O表示法指出了最糟情况下的运行时间 经常遇到的5种大O运行时间: O(log n),也叫对数时间,这样的算法包括...

  • 算法复杂度

    一、大O表示法 算法的时间复杂度通常用大O符号表述 大O表示法 : ,n为算法所需要执行的操作数 该表示法的操作数...

  • 简单的时间复杂度计算法则

    简单算法时间复杂度计算 大O表示法 像前面用O( )来体现算法时间复杂度的记法,我们称之为大O表示法。 算法复杂度...

  • SVM(支持向量机)笔记-SMO算法、核函数,代码实现

    SMO算法 SMO表示序列最小优化(Sequential Minimal Optimization),是将大优化问...

  • 数据结构与算法(一)复杂度

    前言:本文是用来记录自己学习数据结构与算法的笔记,写的不对的地方欢迎指正。 大O复杂度表示法 表示一种变化趋势,并...

网友评论

      本文标题:最小表示法(算法)(笔记)

      本文链接:https://www.haomeiwen.com/subject/ddtkoxtx.html