Cân nhắc trường hợp khi xâu nguồn S cĩ một vài các ký tự giống nhaụ Giả sử là kích thước của phần ký tự giống nhau trong S (khơng tính các khoảng trắng), xấp xỉ bằng m. Trong trường hợp này, một sự cải thiện đáng kể của thuật tốn cĩ thể được thực hiện. Trong khi scan 1 lần S, chúng ta sẽ chuẩn bị một index, với mỗi ký tự s trong S, chúng ta liệt kê ra tất cả các vị trí cĩ s trong S. Trong thuật tốn, chúng ta thay thế câu lệnh cĩ nhãn F với câu lệnh sau đâỵ Giả sử T[q]=s là ký tự đầu tiên của phần đuơi khơng phù hợp của T. Tìm kiếm trong danh sách L sự xuất hiện của s trong S bằng cách sử dụng index trên. Nếu danh sách rỗng, khơng cĩ sự phù hợp nào tìm thấỵ Mặt khác, ta sẽ tìm kiếm khối di chuyển lớn nhất trong số này bắt đầu với các thành phần của L trong S.
Sự thi hành của thuật tốn này sẽ như saụ Giả sử độ dài trung bình của một khối di chuyển là l. Vậy, khối di chuyển lớn nhất phải được chọn trong số m/ lựa chọn, mỗi lựa chọn sẽ tốn khơng nhiều hơn l+1 phép so sánh. Vậy, thời gian chạy của thuật tốn là O(l*(m/alpha)*(n/l))=O(mn/). Nếu m , chúng ta đạt được một thuật tốn tương đối tốt.
Các đoạn text hoặc các bài văn thì thường cĩ các dịng lặp lạị Trong trường hợp đĩ, chỉ các dịng lặp lại nên được đặt rỗng hoặc bao gồm các dấu ngoặc đơn giống như begin và end; trong các trường hợp cĩ sự lặp lại khác, chúng ta sẽ viết một chương trình con. Trong trường hợp văn xuơi, chỉ các dịng lặp lại nên được đặt rỗng hoặc chứa các lệnh khuơn mẫụ Để áp dụng thuật tốn của chúng ta đối với đoạn text hoặc văn xuơi, cần phải chọn các dịng thích hợp giống như các ký tự nguyên tử. Để tăng
tốc sự so sánh, chương trình nên sử dụng các mã băm cho các dịng text hơn là thực hiện các phép so sánh từng ký tự.
Chúng ta thực hiện một chương trình kết hợp chặt chẽ với các ý tưởng này, được gọi là bdiff, và so sánh nĩ với diff (diff sử dụng thuật tốn LCS). Chúng ta thực hiện cả hai chương trình trên 1400 cặp filẹ Mỗi cặp bao gồm 2 sự xem lại text một cách liên tiếp. Hệ thống này lưu rất nhiều các file dữ liệu khác nhaụ Hầu hết tất cả các file mẫu chứa các chương trình text. Chúng ta theo dõi diff và bdiff thi hành với tốc độ giống nhau, nhưng bdiff sẽ cung cấp delta chỉ nhỏ hơn khoảng 7% (trung bình). Nhìn bề ngồi, các khối di chuyển và các dịng trùng nhau trong các chương trình text thì thường khơng đủ để duy trì khơng gian cần thiết trên thuật tốn LCS. Chúng ta mong muốn những tình huống cĩ lợi hơn cho các khối di chuyển các ứng dụng khác đã được nĩi tới trong phần giới thiệụ
Một sự cải tiến khác giúp tăng tốc thuật tốn thậm chí nếu xâu nguồn chứa rất nhiều ký tự trùng nhaụ Sự cải tiến liên quan tới sự thích nghi của thuật tốn Knuth-Moris- Pratt [8], nĩ cho phép một khuơn mẫu cĩ độ dài l được tìm thấy trong 1 xâu cĩ độ dài m trong O(m+1) bước. Vậy, nếu S cĩ độ dài m, T cĩ độ dài n, và khối di chuyển trung bình cĩ độ dài l, thuật tốn của chúng ta nên thao tác O((m+1)*(n/l))=O(mn/l) bước. Chú ý rằng tỉ số m/l biểu thị sự khác nhau của S và T, và thời gian chạy của thuật tốn sẽ tương ứng với tỉ số đĩ. Cũng chú ý rằng tỉ số đĩ độc lập với các xâu chung trong T và S.
Một thành phần quan trọng trong thuật tốn Knuth-Moris-Pratt là một mảng phụ N, nĩ chỉ ra sau 1 mismatch, một phần của mẫu match hay khối di chuyển phải dịch đi bao xạ Mảng N sẽ được tính trước khi cĩ 1 match. Việc tính lại N sẽ đưa ra một vấn đề cho thuật tốn. Vì chúng ta khơng biết được một khối di chuyển sẽ dài bao nhiêu, nên chúng ta sẽ phải tính trước N cho tồn bộ phần đuơi khơng xử lý của T, mặc dù bình thường chúng ta chỉ sử dụng một phần nhỏ của nĩ. Khơng may, N chỉ cĩ thể được tính tăng dần. Những nét chính của thuật tốn được chỉ ra trong phần saụ
Giả sử, ký tự khơng phù hợp tiếp theo là T[q]. Bắt đầu khởi tạo N[q] và áp dụng thuật tốn Knuth-Moris-Pratt để tìm ra sự xuất hiện đầu tiên của T[q]. (Chú ý rằng đây là một mẫu cĩ độ dài 1). Nếu mẫu này khơng thể tìm thấy, sẽ khơng cĩ khối di chuyển nào trong T[q]. Mặt khác, khi mở rộng mẫu thêm 1, ta sẽ tính phần tử tiếp theo trong N, và áp dụng lại thuật tốn Knuth-Moris-Pratt để tìm ra sự xuất hiện đầu tiên của mẫu mở rộng. Bắt đầu tìm kiếm với match trước. Tiếp tục quá trình này, cho tới khi
mẫu đạt tới một độ dài mà tại đĩ khơng cĩ sự match nàọ Lúc đĩ, sự match trước là khối di chuyển cực đạị
Cho rằng khối di chuyển lớn nhất bắt đầu tại T[q] là l. Như vậy, sự phù hợp cuối cùng cĩ độ dài l+1, và lỗị Việc tính tăng dần của N[q,…q+l+1] tại một giá trị tổng sẽ tương ứng với l đảm bảo rằng giá của match trung bình cịn lại O(m+l).
Chương trình chi tiết được cho trong phần mục lục. Ý tưởng của việc tính tăng dần cấu trúc dữ liệu bổ sung cũng cĩ thể được dáp dụng với thuật tốn Boyer-Moore matching [8], kết quả trung bình sẽ nhanh hơn.