Как я могу сократить вычислительное время, затрачиваемое моим кодом ?
я разработал этот код, который находит количество слов(частоту каждого слова) в программе в зависимости от ASCII-кода символа, и моя программа занимает 136 милисекунд, чтобы вычислить всю программу.как я могу это сделать, если я новичок в программировании ?
Что я уже пробовал:
#include<iostream> #include<windows.h> #include<wchar.h> #include<conio.h> #include<string> #include <ctime> using namespace std; int main() { SYSTEMTIME time; GetLocalTime(&time); wprintf(L"START OF TIME : %02d:%02d:%02d\n", time.wHour, time.wMinute, time.wMilliseconds); int TOTAL = 0; char a[2000]; cout << "enter the string = "; cin.getline(a, 2000); int Totalwords = 0; int no = 0; for (int i = 0; a[i] != '\0'; i++) { if ((int(a[i]) >= 65 && int(a[i]) <= 90) || (int(a[i]) >= 97 && int(a[i]) <= 122)) { } else { Totalwords++; } no = i; } TOTAL = Totalwords; cout << "number of words = " << TOTAL << endl; string *words = new string[TOTAL]; for (int i = 0, j = 0; j < TOTAL, i <= no;) { if ((int(a[i]) >= 65 && int(a[i]) <= 90) || (int(a[i]) >= 97 && int(a[i]) <= 122)) { words[j] = words[j] + a[i]; i++; } else { j++; i++; } } int count = 0; for (int i = 0; i< TOTAL; i++) { bool flag = true; for (int j = i - 1; j >= 0; j--) { if (words[i] == words[j]) { flag = false; break; } } if (flag) { count = 1; for (int k = i + 1; k<TOTAL; k++) { if (words[i] == words[k]) count++; } cout << words[i] << " ___ " << count << '\n'; } } SYSTEMTIME time1; GetLocalTime(&time1); wprintf(L"END EXECUTION TIME : %02d:%02d:%02d\n", time.wHour, time.wMinute, time.wMilliseconds); cout << "Time Difference = " << &time-&time1 << endl; _getch(); }
jeron1
Откуда ты знаешь, что это 136мс? Ваше время начала вычисляется до вызова cin.
Member 13784265
в конце программы я снова вычисляю время, чтобы проверить разницу между временем начала и временем окончания
jeron1
Таким образом, ваша способность вводить данные в cin() очень последовательна во времени (и исключительно быстра)?
Member 13784265
извини,я не расслышал твоего вопроса.
jeron1
Попробуйте получить время начала непосредственно перед входом в первый цикл for.
Pascal-78
Разница во времени-это разница в указателе! Это не даст нужного времени.
Ваш код отображает время начала дважды!, и он отображает миллисекунды без секунд.
Для арифметики времени вы должны преобразовать свое SYSTEMTIME в FILETIME, а затем в ULARGE_INTEGER и выполнить арифметику с использованием последнего типа.
Вы должны начать с получения хорошего измерения времени в первую очередь
Member 13784265
могу ли я что-нибудь сделать с моим кодом, чтобы сократить время, необходимое для запуска всей программы?
Rick York
Один удобный класс, который вы используете для синхронизации, можно найти на этой странице : Используя об ошибке wm_copydata Это старая статья, которую я отправил предшественнику этого сайта, но она содержит класс под названием CElapsed, который очень полезен для синхронизации с высоким разрешением . Он живет в заголовочном файле, поэтому его очень легко включить и использовать. Вы должны запустить таймер после того, как все входные данные получены и вы отобразили и время только вычислительной логики, а не каких-либо операций ввода-вывода.