Horspool算法(java)随机生成字符串

Posted lotus_ssh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Horspool算法(java)随机生成字符串相关的知识,希望对你有一定的参考价值。

java代码

import java.util.Scanner;

public class Horspool {
    public static void ShiftTable(char[] p, int[] table){
        for (int i = 0; i < 26; i++) {
            table[i] = p.length;
        }
        for (int i = 0; i < p.length - 1; i++) {
            table[p[i] -\'A\'] = p.length - 1 - i;
        }
    }
    public static int HorspoolMatching(char[] text, char[] template,int[] table){
        ShiftTable(template, table);
        int i = template.length - 1;
        while(i <= text.length){
            int k = 0;
            while(k < template.length && template[template.length - 1 - k] == text[i-k])
                k++;
            if(k == template.length)
                return i - template.length +1;
            else
                i += table[text[i]-\'A\'];
        }
        return -1;
    }// Horspool算法
    public static int Matching(char[] text, char[] template){
        for (int i = 0; i < text.length; i++) {
            int k = 0;
            for (; k < template.length; k++) {
                if(text[i+k] != template[k])
                    break;
            }
            if(k == template.length)
                return i;
        }
        return -1;
    } // 蛮力法
    public static String getRandomString(long length) {
        System.out.println("正在生成文本");
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
                long result = 0;
                result = Math.round(Math.random() * 25 + 97);
                sb.append(String.valueOf((char) result));
            }
        System.out.println("成功生成");
        return sb.toString();
    } // 随机生成字符串

    public static void main(String[] args) {
        int[] table = new int[26];
        Scanner in = new Scanner(System.in);

//        System.out.println("输入匹配的文本");
//        String te = in.nextLine();
//        System.out.println("输入匹配的模板");
//        String t = in.nextLine();
        String te = getRandomString(100000000);
        String t = getRandomString(10000);

        te = te.toUpperCase();
        t = t.toUpperCase();
        char[] text = te.toCharArray();
        char[] template = t.toCharArray();

        System.out.println("---------Horspool算法-----------");
        long start1=System.currentTimeMillis();
        int pos1 = HorspoolMatching(text, template, table);
        long end1=System.currentTimeMillis(); //获取结束时间
        if(pos1 == -1)
            System.out.println("没有匹配的字符串!");
        else
            System.out.println("存在匹配的字符串,初始位置为:" + pos1);
        System.out.println("程序运行时间: " + (end1 - start1) + "ms");


        System.out.println("------------蛮力法--------------");
        long start2=System.currentTimeMillis();
        int pos2 = Matching(text, template);
        long end2=System.currentTimeMillis(); //获取结束时间
        if(pos2 == -1)
            System.out.println("没有匹配的字符串!");
        else
            System.out.println("存在匹配的字符串,初始位置为:" + pos2);
        System.out.println("程序运行时间: "+(end2 - start2)+"ms");

    }
}

结果(跑个时间)

 

 

以上是关于Horspool算法(java)随机生成字符串的主要内容,如果未能解决你的问题,请参考以下文章

Horspool算法-字符串匹配

Horspool算法

Horspool算法

哪个是更好的字符串搜索算法? Boyer-Moore 还是 Boyer Moore Horspool? [关闭]

哪个是更好的字符串搜索算法? Boyer-Moore 还是 Boyer Moore Horspool? [关闭]

在java语言中如何随机地生成一个字符串