05
Июл
2022

Расчет времени работы алгоритма Си

Нужно выполнить расчет времени работы алгоритма в миллисекундах, но почему-то идет расчет времени работы всей программы и время работы выводится не в миллисекундах. Как можно поправить?

Сам код

#define _CRT_SECURE_NO_WARNINGS
#include <limits.h>
#include <string.h>
#include <stdio.h>
#include "locale.h"
#include <time.h>

# define NO_OF_CHARS 256
# define N 1000

// Вспомогательная функция для получения максимум двух целых чисел
int max(int a, int b) { return (a > b) ? a : b; }

// Функция предварительной обработки для Бойера Мура.
// эвристика плохого характера
void badCharHeuristic(char* str, int size,
    int badchar[NO_OF_CHARS])
{
    int i;

    // Инициализировать все вхождения как -1
    for (i = 0; i < NO_OF_CHARS; i++)
        badchar[i] = -1;

    // Заполните фактическое значение последнего вхождения
    // характера
    for (i = 0; i < size; i++)
        badchar[(int)str[i]] = i;
}

/* Функция поиска по шаблону, использующая Bad
    Эвристика характера алгоритма Бойера Мура */
void search(char* txt, char* pat)
{
    int m = strlen(pat);
    int n = strlen(txt);
    setlocale(LC_ALL, "ru-RU");

    int badchar[NO_OF_CHARS];

    /* Заполните массив плохих символов, вызвав
        функция предварительной обработки badCharHeuristic()
        для данного шаблона */
    badCharHeuristic(pat, m, badchar);

    int s = 0;  // s – смещение шаблона с
                // уважением к тексту
    while (s <= (n - m))
    {
        int j = m - 1;

        /* Продолжайте уменьшать индекс j шаблона, пока
            символы узора и текста
            совпадение в эту смену s */
        while (j >= 0 && pat[j] == txt[s + j])
            j--;

        /* Если шаблон присутствует в настоящее время
            сдвиг, то индекс j станет -1 после
            вышеуказанная петля */
        if (j < 0)
        {
            printf("\n Смещение было выполнено на = %d \n", s);

            /* Сдвиньте шаблон так, чтобы следующий
                символ в тексте выравнивается с последним
                появление его в образце.
                Условие s+m < n необходимо для
                случай, когда шаблон встречается в конце
                текста */
            s += (s + m < n) ? m - badchar[txt[s + m]] : 1;

        }

        else
            /*Сдвиньте рисунок так, чтобы ненужный символ
                в тексте выравнивался с последним вхождением
                это по шаблону. Функция max используется для
                убедитесь, что мы получаем положительный сдвиг.
                Мы можем получить отрицательный сдвиг, если последний
                появление плохого символа в образце
                находится справа от тока
                персонаж.. */
            s += max(1, j - badchar[txt[s + j]]);
    }
}

/* Программа-драйвер для проверки вышеуказанной функции */
int main()
{
    char txt[N];
    char pat[N];

    setlocale(LC_ALL, "ru-RU");

    // dgfhfghfgh
    // -------------------------------------------
    FILE* info;
    info = fopen("text.txt", "w");

    printf("Введите текст\n");
    gets_s(txt, N);
    fprintf(info, "%s", txt);
    fclose(info);
    system("cls");

    // dgfhfghfgh
    // -------------------------------------------
    int i;
    FILE* in = fopen("text.txt", "r");
    char mas[1000];

    if (in) {
        size_t n = 0;
        int ch;
        while ((ch = getc(in)) != EOF) {
            mas[n++] = (char)ch;
        }
        fclose(in);
    }

    printf("Введите то, что будем искать\n");
    gets_s(pat, N);

    time_t time;
    time = clock();
    search(mas, pat);
    time = clock()-time/1000.0;
    //double time = /*(stop - start)*/  CLK_TCK;

    
    printf("Время поиска:  %d мс\n", time);
    getchar();
    return 0;
}

Проблема находится в этом метсте

time_t time;
    time = clock();
    search(mas, pat);
    time = clock()-time/1000.0;
    

    
    printf("Время поиска:  %d мс\n", time);

Источник: https://ru.stackoverflow.com/questions/1426859/%D0%A0%D0%B0%D1%81%D1%87%D0%B5%D1%82-%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0-%D0%A1%D0%B8

Тебе может это понравится...

Добавить комментарий