Nhảy chuyển đến

Tự phù xuyến xứng đôi

Bổn giao diện đem bản tóm tắt tự phù xuyến xứng đôi vấn đề cùng với nó giải pháp.

Tự phù xuyến xứng đôi vấn đề

Định nghĩa

Lại xưng hình thức xứng đôi ( pattern matching ). Này vấn đề có thể khái quát vì “Cấp định tự phù xuyếnCùng,Ở chủ xuyếnTrung tìm kiếm tử xuyến”.Tự phùXưng là hình thức xuyến (pattern).

Loại hình

  • Đơn xuyến xứng đôi: Cấp định một cái hình thức xuyến cùng một cái đãi xứng đôi xuyến, tìm ra người trước ở người sau trung sở hữu vị trí.
  • Nhiều xuyến xứng đôi: Cấp định nhiều hình thức xuyến cùng một cái đãi xứng đôi xuyến, tìm ra này đó hình thức xuyến ở người sau trung sở hữu vị trí.
    • Xuất hiện nhiều đãi xứng đôi xuyến khi, đem chúng nó trực tiếp liền lên liền có thể làm một cái đãi xứng đôi xuyến xử lý.
    • Có thể trực tiếp coi như đơn xuyến xứng đôi, nhưng là hiệu suất không đủ cao.
  • Mặt khác loại hình: Tỷ như xứng đôi một cái xuyến tùy ý hậu tố, xứng đôi nhiều xuyến tùy ý hậu tố……

Bạo lực cách làm

Tên gọi tắt BF (Brute Force) thuật toán. Nên thuật toán cơ bản tư tưởng là từ chủ xuyếnCái thứ nhất tự phù bắt đầu cùng hình thức xuyếnCái thứ nhất tự phù tiến hành tương đối, nếu bằng nhau, tắc tiếp tục tương đối hai người kế tiếp tự phù; nếu không, hình thức xuyếnHồi thối lui đến cái thứ nhất tự phù, một lần nữa cùng chủ xuyếnCái thứ hai tự phù tiến hành tương đối. Như thế lặp lại, thẳng đếnHoặcTrung sở hữu tự phù tương đối xong.

Thực hiện

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
* s: Đãi xứng đôi chủ xuyến
* t: Hình thức xuyến
* n: Chủ xuyến chiều dài
* m: Hình thức xuyến chiều dài
*/
std::vectorint>match(char*s,char*t,intn,intm){
std::vectorint>ans;
inti,j;
for(i=0;in-m+1;i++){
for(j=0;jm;j++){
if(s[i+j]!=t[j])break;
}
if(j==m)ans.push_back(i);
}
returnans;
}
1
2
3
4
5
6
7
8
9
10
11
12
defmatch(s,t,n,m):
ifm1:
return[]

ans=[]
foriinrange(0,n-m+1):
forjinrange(0,m):
ifs[i+j]!=t[j]:
break
else:
ans.append(i)
returnans

Thời gian phức tạp độ

ThiếtLà chủ xuyến chiều dài,Vì hình thức xuyến chiều dài. Cam chịu.

BF thuật toán xứng đôi thành công khi, ở tốt nhất dưới tình huống, chỉ có một chuyến xứng đôi thành công, này tranh tương đối số lần vì,Mà còn lại mỗi tranh không thành công xứng đôi đều phát sinh ở hình thức xuyến cái thứ nhất tự phù, còn cầnThứ tương đối, tổng tương đối số lần vì,Cố thời gian phức tạp độ vì;Ở nhất hư dưới tình huống, xứng đôi thành công tranh số vì,Mỗi tranh tương đối số lần vì,Tổng tương đối số lần vì,Cố thời gian phức tạp độ vì.

BF thuật toán xứng đôi thất bại khi, ở tốt nhất dưới tình huống, mỗi tranh không thành công xứng đôi đều phát sinh ở hình thức xuyến cái thứ nhất tự phù, BF thuật toán muốn chấp hànhThứ tương đối, thời gian phức tạp độ vì;Ở nhất hư dưới tình huống, mỗi tranh không thành công xứng đôi đều phát sinh ở hình thức xuyến cuối cùng một chữ phù, BF thuật toán muốn chấp hànhThứ tương đối, thời gian phức tạp độ vì.

Nếu hình thức xuyến có ít nhất hai cái bất đồng tự phù, tắc BF thuật toán bình quân thời gian phức tạp độ vì.Nhưng là ở OI đề mục trung, cấp ra tự phù xuyến giống nhau đều không phải thuần tùy cơ.

Hash phương pháp

Tham kiến:Tự phù xuyến ha hi

KMP thuật toán

Tham kiến:Tiền tố hàm số cùng KMP thuật toán