`
daweibalong
  • 浏览: 45594 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

后缀数组的python模拟--编程珠玑 15.2

阅读更多

今天看了编程珠玑第15章字符串的前两节,对于后缀数组这玩意很感兴趣(以前学的太少了编程珠玑 <wbr>15.2 <wbr>后缀数组的python模拟),对于15.2节的求给定文本输入的最长重复子串的问题,顺着作者的思路和其网站( http://netlib.bell-labs.com/cm/cs/pearls/index.html )上的代码,用c语言实现了一下,网站上代码如下:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int pstrcmp(char **p, char **q)
{   return strcmp(*p, *q); }

int comlen(char *p, char *q)
{       int i = 0;
        while (*p && (*p++ == *q++))
                i++;
        return i;
}

#define M 1
#define MAXN 5000000
char c[MAXN], *a[MAXN];

int main()
{   int i, ch, n = 0, maxi, maxlen = -1;
    while ((ch = getchar()) != EOF) {
        a[n] = &c[n];
        c[n++] = ch;
    }
    c[n] = 0;
    qsort(a, n, sizeof(char *), pstrcmp);
    for (i = 0; i < n-M; i++)
        if (comlen(a[i], a[i+M]) > maxlen) {
            maxlen = comlen(a[i], a[i+M]);
            maxi = i;
        }
    printf("%.*s\n", maxlen, a[maxi]);
    return 0;
}
 
后缀数组很强大哈!
但是,可以看到,后缀数组使用的是指针,如果在python这种没有指针的语言中该怎么用呢?答案是数组。
于是做了python的简单模拟,代码如下:

def pstrcmp(p,q):
    return cmp(c[p:],c[q:])

def comlen(p,q):
    j=0
    while j<len(c[p:])-1 and c[p:][j]==c[q:][j]:
        j=j+1
    return j 

c='' 
a=[]
maxlen=-1
maxi=0

c=raw_input()
for i in range(len(c)):
    a.append(i)
a.sort(pstrcmp)

for i in range(len(a)-1):
    if comlen(a[i],a[i+1])>maxlen:
        maxlen=comlen(a[i],a[i+1])
        maxi=a[i]
print maxi 
print c[maxi:maxi+maxlen+1]
 

测试:
还是书上banana的例子:
结果:ana
再来一个:acbc bcd
结果:bc
分享到:
评论

相关推荐

    编程珠玑源码下载编程珠玑书后源代码

    《编程珠玑》是计算机科学领域的一本经典之作,由Jon Bentley 编著,它以其深入浅出的方式探讨了程序设计的问题和解决方案,尤其在数据结构、算法优化以及问题解决策略方面有着独到的见解。这本书的源代码是作者为了...

    编程珠玑 编程珠玑 编程珠玑 编程

    《编程珠玑》是一本经典的计算机科学与编程书籍,作者是Jon Bentley。这本书以其独特的视角深入探讨了程序设计的艺术和技巧,旨在提升程序员的问题解决能力,优化算法,并提高代码效率。书中涵盖了一系列实用的编程...

    编程珠玑 第2版(修订版)_编程珠玑修订_资料_

    《编程珠玑 第2版(修订版)》是一本深受程序员喜爱的经典著作,它不仅提供了丰富的编程实践经验,还深入探讨了程序设计的艺术与智慧。这本书的修订版更是在原版基础上进行了更新和完善,旨在帮助程序员提升编程技能,...

    ASP.NET.2.0.编程-------珠玑

    ### ASP.NET 2.0 编程——珠玑 #### 第1章:窍门程序回顾 在本章中,作者回顾了ASP.NET以往版本中的一些关键窍门程序,并且探讨了这些技巧如何演变并影响了ASP.NET 2.0的技术栈。其中特别提到的是ASP.NET v1.1中的...

    编程珠玑(续)

    《编程珠玑(续)》是计算机科学方面的经典名著《编程珠玑》的姊妹篇,讲述了对于程序员有共性的知识。书中涵盖了程序员操纵程序的技术、程序员取舍的技巧、输入和输出设计以及算法示例,这些内容组成一个有机的整体,...

    编程珠玑习题集锦

    《编程珠玑》是计算机科学领域的一本经典之作,作者Jon Bentley通过一系列实际问题的探讨,引导读者理解和掌握编程中的高效解题技巧。书中的问题和解决方案涵盖了算法设计、数据结构优化以及问题解决策略等多个方面...

    编程珠玑 编程珠玑续

    《编程珠玑》和其续篇是两部深受程序员喜爱的经典著作,主要涵盖了程序设计、算法分析和数据结构等核心编程领域。这两本书以其深入浅出的讲解方式和丰富的实例,帮助读者提升编程技巧和解决问题的能力。 在《编程...

    编程珠玑 算法 数据结构

    - 实现**后缀数组**和**后缀树**进行模式匹配。 **3.2 案例2:路径查找问题** - 应用**Dijkstra算法**找到两个顶点之间的最短路径。 - 使用**Floyd-Warshall算法**解决所有顶点间的最短路径问题。 **3.3 案例3:...

    编程珠玑(第二版)答案

    根据提供的标题“编程珠玑(第二版)答案”和描述“编程珠玑(第二版)答案”,我们可以推测出这是关于《编程珠玑》这本书的相关解答资料。《编程珠玑》是一本经典的计算机科学书籍,作者为Jon Bentley。本书旨在...

    ASP.NET\ASP.NET 2.0编程珠玑--来自MVP 2.0编程珠玑--来自MVP的权威开发指南

    《ASP.NET 2.0编程珠玑--来自MVP的权威开发指南》一书深入探讨了ASP.NET 2.0的核心概念和技术,旨在帮助开发者熟练掌握这一平台。 在ASP.NET 2.0中,控件是构建用户界面的关键组件。它们包括服务器控件和HTML控件,...

    编程珠玑.pdf

    第一部分 编 程 技 术 第1章 性能监视工具 3 ...15.2 程序 142 15.3 运行时间分析 145 15.4 原理 148 15.5 习题 149 15.6 深入阅读 151 附录A C和Awk语言 153 附录B 一个子程序库 157 部分习题答案 165 索引 181

    编程珠玑 Programming Pearls 第二版(中文版+源代码)

    《编程珠玑》是计算机科学领域的一本经典之作,作者是Jon Bentley,它以其独特的视角和深入浅出的讲解方式,向读者展示了编程艺术的精髓。这本书的第二版更是深受程序员和计算机科学家们的喜爱,因为它不仅涵盖了...

    编程珠玑续本

    编程珠玑续、编程珠玑续本、编程珠玑续本、编程珠玑续本

    编程珠玑II(编程珠玑·续) 扫描版6.56M pdf格式

    编程珠玑II(编程珠玑·续) 扫描版6.56M pdf格式

    中文第二版-编程珠玑

    中文第二版-编程珠玑,很不错的东西中文第二版-编程珠玑,很不错的东西

    IT人士必看书籍-编程珠玑(中文)

    《编程珠玑》是IT行业中一本非常经典的书籍,尤其对于程序员和软件工程师来说,它具有极高的学习价值。这本书深入浅出地探讨了程序设计的艺术和科学,将问题解决策略与计算机科学的基础知识相结合,旨在提升读者的...

    python编程入门指南-编程入门指南.pdf

    Python编程入门指南旨在引导初学者踏入编程世界,特别是聚焦于Python这一强大且广泛应用的编程语言。以下是基于提供的信息,详细阐述的学习路径和相关知识点: 1. **MIT 6.00.1x 麻省理工学院:计算机科学和Python...

    编程珠玑总结笔记

    "编程珠玑总结笔记" 本资源笔记总结了编程珠玑中的一些重要知识点,包括优化程序、埃氏筛法和位图法等。 1. 打印出小于 10000 的素数 优化程序是编程珠玑中的一大主题,如何优化程序来提高效率是一个非常重要的...

    《编程珠玑》源代码

    《编程珠玑》第一版是我早期职业生涯中阅读过的对我影响较大的书籍之一,在书中首次接触到的很多观点都让我长期受益。作者在这一版本中做了重要更新。新增加的很多例子让我耳目一新。 ——Steve McConnell,《代码...

Global site tag (gtag.js) - Google Analytics