Παράδειγμα 1: Σύστημα Αναζήτησης Στοιχείων σε Αρχεία
Σενάριο: Ένα σύστημα που ψάχνει για συγκεκριμένες λέξεις ή φράσεις μέσα σε μεγάλα κειμενικά αρχεία. Χρησιμοποιώντας τον KMP, μπορείς να κάνεις την αναζήτηση πιο αποδοτική, αποφεύγοντας τις επαναλήψεις στον έλεγχο χαρακτήρων που έχουν ήδη εξεταστεί.

using System;
using System.IO;

public class FileSearch
{
    public static void SearchInFile(string filePath, string searchTerm)
    {
        string text = File.ReadAllText(filePath);
        int index = KMP_Search(text, searchTerm);
        if (index != -1)
            Console.WriteLine($"Term found at index: {index}");
        else
            Console.WriteLine("Term not found.");
    }

    public static int KMP_Search(string text, string pattern)
    {
        int M = pattern.Length;
        int N = text.Length;
        int[] lps = new int[M];
        ComputeLPSArray(pattern, M, lps);

        int i = 0;
        int j = 0;
        while (i < N)
        {
            if (pattern[j] == text[i])
            {
                j++;
                i++;
            }
            if (j == M)
            {
                return i - j;  // Found pattern
                j = lps[j - 1];
            }
            else if (i < N && pattern[j] != text[i])
            {
                if (j != 0)
                    j = lps[j - 1];
                else
                    i = i + 1;
            }
        }
        return -1;  // Did not find pattern
    }

    private static void ComputeLPSArray(string pattern, int M, int[] lps)
    {
        int length = 0;
        int i = 1;
        lps[0] = 0;
        while (i < M)
        {
            if (pattern[i] == pattern[length])
            {
                length++;
                lps[i] = length;
                i++;
            }
            else
            {
                if (length != 0)
                {
                    length = lps[length - 1];
                }
                else
                {
                    lps[i] = 0;
                    i++;
                }
            }
        }
    }
}

Παράδειγμα 2: Εφαρμογή Αναζήτησης για Ιστοσελίδα
Σενάριο: Ένας ιστότοπος προσφέρει λειτουργία αναζήτησης μέσα στα άρθρα του. Μπορείς να υλοποιήσεις τον αλγόριθμο KMP για να βελτιώσεις την απόδοση αναζήτησης, κυρίως σε περιπτώσεις με πολλαπλά αποτελέσματα ή μεγάλα κείμενα.
Αυτές οι υλοποιήσεις σε πραγματικά σενάρια ενδέχεται να απαιτούν προσαρμογές ανάλογα με τις ανάγκες του έργου, όπως η διαχείριση εξαιρέσεων και η βελτιστοποίηση απόδοσης για τακτικές ενημερώσεις στοιχείων ή πολλαπλές αναζητήσεις σε παράλληλα νήματα.

using System;

public class TextSearch
{
    public static void Main(string[] args)
    {
        // Υποθέτουμε ότι το κείμενο και η λέξη για αναζήτηση έρχονται από τον χρήστη ή από μια βάση δεδομένων
        Console.WriteLine("Enter the main text:");
        string text = Console.ReadLine();
        Console.WriteLine("Enter the search term:");
        string searchTerm = Console.ReadLine();

        int position = KMP_Search(text, searchTerm);
        if (position != -1)
            Console.WriteLine($"The term '{searchTerm}' was found at index: {position}");
        else
            Console.WriteLine("Term not found.");
    }

    public static int KMP_Search(string text, string pattern)
    {
        int M = pattern.Length;
        int N = text.Length;
        int[] lps = new int[M];
        ComputeLPSArray(pattern, M, lps);

        int i = 0;  // index for text
        int j = 0;  // index for pattern
        while (i < N)
        {
            if (pattern[j] == text[i])
            {
                j++;
                i++;
            }
            if (j == M)
            {
                return i - j;  // Found the pattern at index (i-j)
                j = lps[j - 1];
            }
            else if (i < N && pattern[j] != text[i])
            {
                if (j != 0)
                    j = lps[j - 1];
                else
                    i = i + 1;
            }
        }
        return -1;  // Pattern not found
    }

    private static void ComputeLPSArray(string pattern, int M, int[] lps)
    {
        int len = 0;
        int i = 1;
        lps[0] = 0;  // lps[0] is always 0

        while (i < M)
        {
            if (pattern[i] == pattern[len])
            {
                len++;
                lps[i] = len;
                i++;
            }
            else
            {
                if (len != 0)
                {
                    len = lps[len - 1];
                }
                else
                {
                    lps[i] = 0;
                    i++;
                }
            }
        }
    }
}

Πώς λειτουργεί ο παραπάνω κώδικας:
 1.	Λήψη Κειμένου και Όρου Αναζήτησης: Ο χρήστης εισάγει το κύριο κείμενο και τη λέξη που θέλει να αναζητήσει.
 2.	Εκτέλεση Αναζήτησης KMP: Η KMP_Search χρησιμοποιείται για να βρει τη θέση της λέξης μέσα στο κείμενο.
 3.	Επιστροφή και Εμφάνιση Αποτελεσμάτων: Ο κώδικας επιστρέφει τη θέση της λέξης στο κείμενο ή ένα μήνυμα ότι η λέξη δεν βρέθηκε.
Αυτός ο κώδικας είναι αρκετά ευέλικτος για να ενσωματωθεί σε οποιαδήποτε εφαρμογή C# που απαιτεί αναζήτηση κειμένου, όπως ένας ιστότοπος ή μια εσωτερική εφαρμογή βάσης δεδομένων.

using System;
using System.IO;

public class FileSearch
{
 public static void SearchInFile(string filePath, string searchTerm)
 {
 string text = File.ReadAllText(filePath);
 int index = KMP_Search(text, searchTerm);
 if (index != -1)
 Console.WriteLine($"Term found at index: {index}");
 else
 Console.WriteLine("Term not found.");
 }

 public static int KMP_Search(string text, string pattern)
 {
 int M = pattern.Length;
 int N = text.Length;
 int[] lps = new int[M];
 ComputeLPSArray(pattern, M, lps);

 int i = 0;
 int j = 0;
 while (i < N)
 {
 if (pattern[j] == text[i])
 {
 j++;
 i++;
 }
 if (j == M)
 {
 return i - j;  // Found pattern
 j = lps[j - 1];
 }
 else if (i < N && pattern[j] != text[i])
 {
 if (j != 0)
 j = lps[j - 1];
 else
 i = i + 1;
 }
 }
 return -1;  // Did not find pattern
    }

    private static void ComputeLPSArray(string pattern, int M, int[] lps)
    {
        int length = 0;
        int i = 1;
        lps[0] = 0;
        while (i < M)
        {
            if (pattern[i] == pattern[length])
            {
                length++;
                lps[i] = length;
                i++;
            }
            else
            {
                if (length != 0)
                {
                    length = lps[length - 1];
                }
                else
                {
                    lps[i] = 0;
                    i++;
                }
            }
        }
    }
}

Παράδειγμα 2: Εφαρμογή Αναζήτησης για Ιστοσελίδα

Σενάριο: Ένας ιστότοπος προσφέρει λειτουργία αναζήτησης μέσα στα άρθρα του. Μπορείς να υλοποιήσεις τον αλγόριθμο KMP για να βελτιώσεις την απόδοση αναζήτησης, κυρίως σε περιπτώσεις με πολλαπλά αποτελέσματα ή μεγάλα κείμενα.

Για να υλοποιήσουμε μια απλή εφαρμογή αναζήτησης σε μια ιστοσελίδα χρησιμοποιώντας τον αλγόριθμο Knuth-Morris-Pratt (KMP) σε C#, θα προσθέσουμε λειτουργικότητα για την αναζήτηση σε κείμενα που παρέχονται από τον χρήστη ή από κάποια βάση δεδομένων. Ας υποθέσουμε ότι το κείμενο έρχεται από μια μεθόδο ή έναν χρήστη. Θα δημιουργήσουμε μια βασική κλάση TextSearch που θα περιλαμβάνει τις μεθόδους για την αναζήτηση και τον υπολογισμό του πίνακα LPS.
Κώδικας C# για Εφαρμογή Αναζήτησης

using System;

public class TextSearch
{
    public static void Main(string[] args)
    {
        // Υποθέτουμε ότι το κείμενο και η λέξη για αναζήτηση έρχονται από τον χρήστη ή από μια βάση δεδομένων
        Console.WriteLine("Enter the main text:");
        string text = Console.ReadLine();
        Console.WriteLine("Enter the search term:");
        string searchTerm = Console.ReadLine();

        int position = KMP_Search(text, searchTerm);
        if (position != -1)
            Console.WriteLine($"The term '{searchTerm}' was found at index: {position}");
        else
            Console.WriteLine("Term not found.");
    }

    public static int KMP_Search(string text, string pattern)
    {
        int M = pattern.Length;
        int N = text.Length;
        int[] lps = new int[M];
        ComputeLPSArray(pattern, M, lps);

        int i = 0;  // index for text
        int j = 0;  // index for pattern
        while (i < N)
        {
            if (pattern[j] == text[i])
            {
                j++;
                i++;
            }
            if (j == M)
            {
                return i - j;  // Found the pattern at index (i-j)
                j = lps[j - 1];
            }
            else if (i < N && pattern[j] != text[i])
            {
                if (j != 0)
                    j = lps[j - 1];
                else
                    i = i + 1;
            }
        }
        return -1;  // Pattern not found
    }

    private static void ComputeLPSArray(string pattern, int M, int[] lps)
    {
        int len = 0;
        int i = 1;
        lps[0] = 0;  // lps[0] is always 0

        while (i < M)
        {
            if (pattern[i] == pattern[len])
            {
                len++;
                lps[i] = len;
                i++;
            }
            else
            {
                if (len != 0)
                {
                    len = lps[len - 1];
                }
                else
                {
                    lps[i] = 0;
                    i++;
                }
            }
        }
    }
}