Определение асимптотической сложности программы

Эй, ребята, я довольно новичок в c ++ и пытаюсь определить асимптотическую сложность моей программы, которая принимает входные данные и определяет, является ли это полиномом или нет.

«Если длина входного выражения равна m chars, какова сложность вашей программы по отношению к m?»

Я предполагаю, что O (m * log m), в котором первый m — это цикл for, который повторяет m раз, а log m — цикл while, который считает показатели больше 1 цифры.

Кроме того, я пытаюсь сохранить «наибольшее» значение, которое содержит наибольший показатель степени, чтобы вычислить сложность времени выполнения полиномов. Однако у меня путаница с правильным хранением показателя. Кто-нибудь может порекомендовать более простой способ?

Пример ввода: «n ^ 23 + 4n ^ 10 — 3» должно иметь 23 в качестве наибольшего показателя

#include <iostream>
#include <string>
using namespace std;

int main() {

string input;
int pcount = 1; //count for # of variables( min 3 to be poly)
int largest = 0; // used for complexity
int temp=0;

cout << "Enter equation below. " << endl;
getline(cin,input); //to input polynomial
cout << endl << input << endl;

if (input[0] == '-' || input[0] == '+') //to check for '-' as first char
pcount--;

bool pcheck = true;

for (unsigned i = 0; i < input.size(); i++)
{
temp = 0;

cout << input[i] << endl;
if ( input[i] == '+' || input[i] == '-' )
pcount++;

if ( input[i] == 'n') //checks for integer
{

if ( input[i+1] && input[i+1] == '^' )
{
if (input[i+2] == 46 || input[i+2] == 43 || input[i+2] == 45)
{
cout << "fail" << endl;
pcheck = false;
}

temp = input[i+2]-48; // to check for largest exp

while ( input[i+2] != 43 && input[i+2] != 45)
{

if ( i+3 == input.size())
{
cout << "break";
break;
}
if( input[i+2] < 48 || input[i+2] >57) // 48-57 is ascii
{
cout << "fail" << endl;
pcheck = false;
}
i++;

temp = temp * 10;
temp = temp + (input[i+2]-48);
if (temp > largest)
largest = temp;
}
}
}
}

if ( pcheck == true && pcount >= 3) //valid ints and at least 3 variables
{
cout << "polynomial detected!" << endl << "The big-Oh complexity is O(n^" <<
largest << ")." << endl;
}
else
cout << "not a poly" << endl;

return 0;
}

4

Решение

Ваша программа должна иметь O(N) сложность (линейная) для N символы ввода, пока вы отслеживаете самый высокий показатель пока. Таким образом, вам не придется возвращаться, чтобы перечитать предыдущие символы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]