【问题标题】:Execution time and number of comparisons done for string matching search字符串匹配搜索的执行时间和比较次数
【发布时间】:2020-08-01 06:29:50
【问题描述】:

我需要计算以下搜索功能完成的比较次数.. 另外如何计算执行时间..有什么帮助吗?我希望在输出中打印计数和时间。

// 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 

【问题讨论】:

  • 此代码由 Sam007 提供 这是否意味着此代码是别人编写的,现在您正在寻找其他人完成它?您是否尝试过调试它并完成一些计算和测量执行时间的事情?
  • 请展示您到目前为止所做的尝试。秒表用于精确计时。 “比较次数”是指每个!=== 吗?
  • @PavelAnikhouski 此代码已在线发布,我处于学习算法的水平,因此我想了解其他相关概念

标签: c# string counter execution-time


【解决方案1】:

我需要统计以下搜索功能完成的比较次数...

您可以为此使用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");
}

【讨论】:

  • 我试过了,但不能和我一起工作。你能告诉我整个代码,包括我一开始发布的代码吗?
猜你喜欢
  • 1970-01-01
  • 2020-05-05
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 2022-03-30
  • 2017-01-26
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多