最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)暴力匹配算法

 更新時(shí)間:2023年06月12日 10:25:39   作者:激流丶  
暴力匹配算法是一種簡(jiǎn)單的字符串匹配算法,本文主要介紹了Java實(shí)現(xiàn)暴力匹配算法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、什么是暴力匹配算法

暴力匹配算法,也稱為樸素匹配算法,是一種簡(jiǎn)單的字符串匹配算法。它的基本思想是從文本串的第一個(gè)字符開始,逐個(gè)字符地與模式串進(jìn)行比較,如果匹配失敗,則將模式串向右移動(dòng)一位,再與文本串的下一個(gè)字符進(jìn)行比較,直到找到匹配的子串或者文本串遍歷完畢。

具體實(shí)現(xiàn)時(shí),我們可以使用兩個(gè)指針 i 和 j 分別指向文本串和模式串的首字符,然后逐個(gè)字符地進(jìn)行比較。如果當(dāng)前字符匹配成功,則兩個(gè)指針同時(shí)向后移動(dòng)一位,繼續(xù)比較下一個(gè)字符;否則將模式串的指針 j 向右移動(dòng)一位,重新從文本串的第 i 個(gè)字符開始匹配。

暴力匹配算法的時(shí)間復(fù)雜度為 O(mn),其中 m 和 n 分別為模式串和文本串的長度。在最壞情況下,需要將模式串移動(dòng) n-m+1 次,因此算法的效率較低,不適用于處理大規(guī)模的文本匹配問題。但是,暴力匹配算法的實(shí)現(xiàn)簡(jiǎn)單、易于理解,是其他字符串匹配算法的基礎(chǔ),也是一些特殊情況下的最佳選擇。

二、代碼案例

package com.pany.camp.algorithm;
/**
?*
?* @description: ?暴力匹配算法
?* @copyright: @Copyright (c) 2022?
?* @company: Aiocloud
?* @author: pany
?* @version: 1.0.0?
?* @createTime: 2023-06-08 16:07
?*/
public class BruteForcePatternMatching {
? ? public static int bruteForce(String text, String pattern) {
? ? ? ? int n = text.length();
? ? ? ? int m = pattern.length();
? ? ? ? for (int i = 0; i <= n - m; i++) {
? ? ? ? ? ? int j;
? ? ? ? ? ? for (j = 0; j < m; j++) {
? ? ? ? ? ? ? ? if (text.charAt(i + j) != pattern.charAt(j)) {
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? if (j == m) {
? ? ? ? ? ? ? ? return i;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return -1;
? ? }
? ? public static void main(String[] args) {
? ? ? ? String text = "hello world";
? ? ? ? String pattern = "world";
? ? ? ? int index = bruteForce(text, pattern);
? ? ? ? if (index == -1) {
? ? ? ? ? ? System.out.println("未找到匹配的子串");
? ? ? ? } else {
? ? ? ? ? ? System.out.println("匹配成功,子串起始位置為:" + index);
? ? ? ? }
? ? }
}

我們首先定義了一個(gè)名為 bruteForce 的靜態(tài)方法,用于實(shí)現(xiàn)暴力匹配算法。該方法接受兩個(gè)字符串參數(shù),分別為文本串和模式串,返回模式串在文本串中第一次出現(xiàn)的位置,如果未找到匹配的子串,則返回 -1。

然后,我們?cè)?main 方法中定義了一個(gè)文本串和一個(gè)模式串,并調(diào)用 bruteForce 方法進(jìn)行匹配。如果匹配成功,則輸出匹配的子串起始位置;否則輸出未找到匹配的子串。

三、暴力匹配算法有什么缺點(diǎn)

暴力匹配算法的缺點(diǎn)是時(shí)間復(fù)雜度較高,最壞情況下需要比較 O ( n m ) O(nm)O(nm) 次,其中 n nn 是文本串的長度,m mm 是模式串的長度。當(dāng)文本串和模式串很長時(shí),算法的效率會(huì)非常低下,甚至無法承受。

此外,暴力匹配算法只能找到第一個(gè)匹配的子串,并不能找到所有匹配的子串。如果需要找到所有匹配的子串,則需要使用其他算法,如 KMP 算法、Boyer-Moore 算法等。

因此,在實(shí)際應(yīng)用中,暴力匹配算法并不是一個(gè)很好的選擇,除非文本串和模式串的長度非常小且匹配次數(shù)較少。

四、暴力匹配算法和 String.indexOf 對(duì)比

暴力匹配算法和 indexOf 都可以用來在一個(gè)字符串中查找另一個(gè)字符串出現(xiàn)的位置,但是它們的實(shí)現(xiàn)方式有所不同。

暴力匹配算法是最簡(jiǎn)單的字符串匹配算法,它的實(shí)現(xiàn)方式是從文本串的第一個(gè)字符開始,依次和模式串的每一個(gè)字符進(jìn)行比較,如果匹配成功,則繼續(xù)比較下一個(gè)字符,否則從文本串的下一個(gè)字符開始重新匹配。這個(gè)過程會(huì)一直持續(xù)到文本串的末尾或者匹配成功為止。暴力匹配算法的時(shí)間復(fù)雜度為 O(m*n),其中 m 和 n 分別為模式串和文本串的長度。

而 indexOf 是 Java 字符串類中提供的一個(gè)方法,可以用來查找一個(gè)字符串在另一個(gè)字符串中出現(xiàn)的位置。它的實(shí)現(xiàn)方式是從字符串的開頭開始,依次比較字符串中的每一個(gè)字符是否和目標(biāo)字符串的第一個(gè)字符相同,如果相同則繼續(xù)比較后面的字符,直到找到目標(biāo)字符串或者比較到字符串的末尾為止。如果找到了目標(biāo)字符串,則返回它在原字符串中的起始位置,否則返回 -1。indexOf 方法的時(shí)間復(fù)雜度為 O(n),其中 n 為原字符串的長度。

因?yàn)楸┝ζヅ渌惴ǖ臅r(shí)間復(fù)雜度較高,所以在大規(guī)模字符串匹配的場(chǎng)景中不適用,而 indexOf 方法則可以用來快速查找一個(gè)字符串在另一個(gè)字符串中的位置。

以下是暴力匹配算法和 indexOf 方法的性能對(duì)比數(shù)據(jù):

  • 暴力匹配算法的時(shí)間復(fù)雜度為 O(m*n),其中 m 和 n 分別為模式串和文本串的長度。因此,當(dāng)字符串長度較大時(shí),暴力匹配算法的性能會(huì)顯著下降。
  • indexOf 方法的時(shí)間復(fù)雜度為 O(n),其中 n 為原字符串的長度。它采用了一些優(yōu)化技巧,如 Boyer-Moore 算法和快速查找表,能夠在大多數(shù)情況下快速定位目標(biāo)字符串的位置。
  • 在實(shí)際測(cè)試中,暴力匹配算法的性能比 indexOf 方法差了很多。例如,在一個(gè)長度為 100000 的字符串中查找一個(gè)長度為 10 的子串,暴力匹配算法需要 3.5 秒左右,而 indexOf 方法僅需要 0.02 秒左右。
  • 對(duì)于較短的字符串,兩種算法的性能差距并不明顯。例如,在一個(gè)長度為 100 的字符串中查找一個(gè)長度為 3 的子串,暴力匹配算法和 indexOf 方法的時(shí)間差別不到 0.001 秒。

綜上所述,當(dāng)需要在大規(guī)模字符串中查找子串時(shí),推薦使用 indexOf方法,它能夠在大多數(shù)情況下快速定位目標(biāo)字符串的位置。而對(duì)于較短的字符串,兩種算法的性能差別并不明顯,可以根據(jù)具體情況選擇使用哪種算法。

到此這篇關(guān)于Java實(shí)現(xiàn)暴力匹配算法的文章就介紹到這了,更多相關(guān)Java 暴力匹配算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot和Docker實(shí)現(xiàn)微服務(wù)部署的方法

    Spring Boot和Docker實(shí)現(xiàn)微服務(wù)部署的方法

    這篇文章主要介紹了Spring Boot和Docker實(shí)現(xiàn)微服務(wù)部署的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Java String轉(zhuǎn)換時(shí)為null的解決方法

    Java String轉(zhuǎn)換時(shí)為null的解決方法

    這篇文章主要介紹了Java String轉(zhuǎn)換時(shí)為null的解決方法,需要的朋友可以參考下
    2017-07-07
  • 三行Java代碼實(shí)現(xiàn)計(jì)算多邊形的幾何中心點(diǎn)

    三行Java代碼實(shí)現(xiàn)計(jì)算多邊形的幾何中心點(diǎn)

    因?yàn)楣ぷ餍枰?jì)算采煤機(jī)工作面的中心點(diǎn),如果套用數(shù)學(xué)的計(jì)算公式,用java去實(shí)現(xiàn),太麻煩了。本文將利用java幾何計(jì)算的工具包,幾行代碼就能求出多變形的中心,簡(jiǎn)直yyds!還不快跟隨小編一起學(xué)起來
    2022-10-10
  • 基于slf4j日志MDC輸出格式的問題

    基于slf4j日志MDC輸出格式的問題

    這篇文章主要介紹了基于slf4j日志MDC輸出格式的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 基于socket和javaFX簡(jiǎn)單文件傳輸工具

    基于socket和javaFX簡(jiǎn)單文件傳輸工具

    這篇文章主要介紹了基于socket和javaFX簡(jiǎn)單文件傳輸工具的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Hibernate中Session.get()方法和load()方法的詳細(xì)比較

    Hibernate中Session.get()方法和load()方法的詳細(xì)比較

    今天小編就為大家分享一篇關(guān)于Hibernate中Session.get()方法和load()方法的詳細(xì)比較,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Java三大結(jié)構(gòu)解析之順序、選擇、循環(huán)詳解

    Java三大結(jié)構(gòu)解析之順序、選擇、循環(huán)詳解

    Java中的for循環(huán)是一種迭代控制結(jié)構(gòu),通過初始化、條件判斷和迭代更新三個(gè)步驟,實(shí)現(xiàn)對(duì)代碼塊的重復(fù)執(zhí)行,這篇文章主要介紹了Java三大結(jié)構(gòu)解析之順序、選擇、循環(huán)的相關(guān)資料,需要的朋友可以參考下
    2025-11-11
  • Java解析和生成yaml文件的方法和實(shí)踐

    Java解析和生成yaml文件的方法和實(shí)踐

    在現(xiàn)代應(yīng)用程序中,數(shù)據(jù)交換格式的選擇至關(guān)重要,JSON?和?XML?是最常用的格式,但?YAML因其簡(jiǎn)潔和可讀性高而越來越受到歡迎,本文將深入探討?jackson-dataformat-yaml?的特性、使用方法以及一些最佳實(shí)踐,需要的朋友可以參考下
    2024-12-12
  • MyBatis使用logback包打印SQL語句實(shí)踐

    MyBatis使用logback包打印SQL語句實(shí)踐

    文章介紹了如何在Java項(xiàng)目中使用Maven管理依賴,并配置Logback來打印SQL語句,通過修改logback.xml文件,可以將SQL語句以XML格式輸出,便于調(diào)試和分析
    2026-01-01
  • Java搶紅包的紅包生成算法

    Java搶紅包的紅包生成算法

    現(xiàn)在日常生活中搶紅包已經(jīng)成了日常游戲,本篇文章主要介紹了Java搶紅包的紅包生成算法,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11

最新評(píng)論

米易县| 南漳县| 曲阳县| 竹北市| 罗江县| 酒泉市| 仪陇县| 故城县| 呈贡县| 侯马市| 五大连池市| 门头沟区| 康保县| 乌海市| 托克托县| 商都县| 玉龙| 霸州市| 龙泉市| 临高县| 赫章县| 甘泉县| 边坝县| 越西县| 来宾市| 利辛县| 湘潭市| 竹北市| 临海市| 葫芦岛市| 新闻| 兴山县| 长武县| 福安市| 白朗县| 五台县| 雷州市| 通辽市| 土默特左旗| 宁晋县| 响水县|