Время выполнения и количество сравнений, выполненных для поиска соответствия строк - PullRequest
0 голосов
/ 18 апреля 2020

Мне нужно посчитать количество сравнений, выполненных следующей функцией поиска. Также как рассчитать время выполнения? Я хочу, чтобы на выходе были напечатаны счет и время.

// C# program for Naive Pattern Searching 
using System; 

class GFG { 

    public static void search(String txt, String pat) 
    { 
        int M = pat.Length; 
        int N = txt.Length; 

        /* A loop to slide pat one by one */
        for (int i = 0; i <= N - M; i++) { 
            int j; 

            /* For current index i, check for pattern 
            match */
            for (j = 0; j < M; j++) 
                if (txt[i + j] != pat[j]) 
                    break; 

            // if pat[0...M-1] = txt[i, i+1, ...i+M-1] 
            if (j == M) 
                Console.WriteLine("Pattern found at index " + i); 
        } 
    } 

    // Driver code 
    public static void Main() 
    { 
        String txt = "AABAACAADAABAAABAA"; 
        String pat = "AABA"; 
        search(txt, pat); 
    } 
} 
// This code is Contributed by Sam007 

1 Ответ

0 голосов
/ 18 апреля 2020

Мне нужно посчитать количество сравнений, выполненных следующей функцией поиска ...

Вы можете использовать counter для этого:

public static void search(String txt, String pat, out int counter)
{
    int M = pat.Length;
    int N = txt.Length;

    counter = 0;

    /* A loop to slide pat one by one */
    for (int i = 0; i <= N - M; i++)
    {
        int j;

        /* For current index i, check for pattern 
        match */
        for (j = 0; j < M; j++)
        {
            counter++; // counter for below if statement

            if (txt[i + j] != pat[j])
            {
                break;
            }
        }

        // if pat[0...M-1] = txt[i, i+1, ...i+M-1] 
        if (j == M)
        {
            Console.WriteLine("Pattern found at index " + i);
        }

        counter++; // counter for above if statement
    }
}

Также, как рассчитать время выполнения.

Вы можете использовать StopWatch класс для этого случая:

public static async Task Main(string[] args)
{
    String txt = "AABAACAADAABAAABAA";
    String pat = "AABA";

    var stopWatch = new Stopwatch();
    stopWatch.Start();
    search(txt, pat, out var counter);
    stopWatch.Stop();

    Console.WriteLine("--------------");
    Console.WriteLine($"Count of operations: {counter}, elapsed time: {stopWatch.ElapsedMilliseconds} miliseconds");
}
...