การจับคู่รูปแบบในภาษา C − เราต้องค้นหาว่าสตริงมีอยู่ในสตริงอื่นหรือไม่ ตัวอย่างเช่น สตริง "อัลกอริทึม" อยู่ในสตริง "อัลกอริทึมไร้เดียงสา" หากพบ แสดงว่าตำแหน่งของสตริงนั้น (เช่น ตำแหน่งของมันอยู่ที่) แสดงผล เรามักจะสร้างฟังก์ชันที่ได้รับอาร์เรย์อักขระ 2 ตัวและส่งคืนตำแหน่งหากการจับคู่เกิดขึ้นมิฉะนั้นจะคืนค่า -1
Input: txt = "HERE IS A NICE CAP" pattern = "NICE" Output: Pattern found at index 10 Input: txt = "XYZXACAADXYZXYZX" pattern = "XYZX" Output: Pattern found at index 0 Pattern found at index 9 Pattern found at index 12
เรากำลังแก้ปัญหานี้ด้วยการค้นหารูปแบบที่ไร้เดียงสา อัลกอริทึมนี้มีประโยชน์สำหรับข้อความที่มีขนาดเล็กลง ความไร้เดียงสาเป็นวิธีที่ง่ายและไม่มีประสิทธิภาพในการดูว่าสตริงหนึ่งเกิดขึ้นที่ใดภายในอีกอันหนึ่งคือการตรวจสอบทุกจุดที่อาจอยู่ ทีละรายการ เพื่อดูว่ามีสตริงนั้นหรือไม่
ความซับซ้อนของเวลาของ Naive Algorithm คือ O(mn) โดยที่ m คือขนาดของรูปแบบที่จะค้นหา และ n คือขนาดของสตริงคอนเทนเนอร์
การค้นหารูปแบบเป็นปัญหาที่สำคัญมากในวิทยาการคอมพิวเตอร์ เมื่อใดก็ตามที่เราค้นหาสตริงในไฟล์ notepad/word หรือเบราว์เซอร์หรือฐานข้อมูลหรือในข้อมูลบางอย่าง อัลกอริธึมการค้นหารูปแบบจะใช้เพื่อแสดงผลการค้นหา
อัลกอริทึม
naive_algorithm(รูปแบบ ข้อความ)
ป้อนข้อมูล − ข้อความและรูปแบบ
ผลผลิต − ตำแหน่งที่มีรูปแบบอยู่ในข้อความ
Start pat_len := pattern Size str_len := string size for i := 0 to (str_len - pat_len), do for j := 0 to pat_len, do if text[i+j] ≠ pattern[j], then break if j == patLen, then display the position i, as there pattern found End
ตัวอย่าง
#include <stdio.h>
#include <string.h>
int main (){
char txt[] = "tutorialsPointisthebestplatformforprogrammers";
char pat[] = "a";
int M = strlen (pat);
int N = strlen (txt);
for (int i = 0; i <= N - M; i++){
int j;
for (j = 0; j < M; j++)
if (txt[i + j] != pat[j])
break;
if (j == M)
printf ("Pattern matches at index %d \n", i);
}
return 0;
} ผลลัพธ์
Pattern matches at 6 Pattern matches at 25 Pattern matches at 39