Size: a a a

2021 July 07

q

qwerty in pro.algorithms
В общем, вот тот алгоритм для Valid Parentheses.
O(n) - time complexity
O(1) - space complexity

class Solution {
public:
    bool isMatched (char openBracket,char closeBracket) {
       
       if(openBracket == '(')
           return closeBracket == ')';
       
       if(openBracket == '{')
           return closeBracket == '}';
       
       if(openBracket == '[')  
           return closeBracket == ']';
       
       return 0;
    }
   
    bool isValid(string s) {
       
        int top = -1;
        for(std::size_t i = 0; i < s.length(); ++i) {
           
            if(top < 0 || !isMatched(s[top], s[i])) {
                s[++top] = s[i];
            }
            else {
                top--;
            }
           
        }
        return top == -1;      
    }
};
источник

ch

central hardware in pro.algorithms
тесты?
источник

С

Сергей in pro.algorithms
Ну в leetcode - тесты заходит ))
а вот и само решение от 2018 года - с комментариями, в которых далеко не все согласны по поводу O(1) по памяти )
источник

q

qwerty in pro.algorithms
да, поэтому я и кинул данное решение в этот чат, почему не О(1) по памяти, там индусы какую-то хрень выкладывают, нет нормальных аргументов?!
источник

С

Сергей in pro.algorithms
ну если будет требование неизменности анализируемой строки - bool isValid(string  const& s) то ясно что такое решение не проходит. а так - ну заменили стек на курочение самой строки. я не великий спец, чтобы оценить все тонкости...
источник

p

ptr in pro.algorithms
Это не O(1). Обычно предполагается, что данные не изменяемые
источник

q

qwerty in pro.algorithms
Вообще, это не правда в корне, представьте какой-нибудь алгоритм сортировки, которой не требуется доп. память, асимптотика, соответственно, такого алгоритма равняется О(1)
источник

С

Сергей in pro.algorithms
кстати да - копия строки создается в предлагаемом решении же.
источник

q

qwerty in pro.algorithms
В общем, мб, я тупой, но я ничего тут на О(n) по доп. памяти не вижу
источник

p

ptr in pro.algorithms
Ну допустим, у тебя спросили ответ на задачу два раза. Тогда ты не сможешь не создать ещё одну строку
источник

q

qwerty in pro.algorithms
что значит два раза?
источник

q

qwerty in pro.algorithms
два разных запроса?
источник

С

Сергей in pro.algorithms
bool isValid(string s) - при такой сигнатуре? хоть 100 раз.
в функции копия строки создается.
источник

p

ptr in pro.algorithms
Два раза функцию запустили на одной строке
источник

q

qwerty in pro.algorithms
да это все не важно, нужно смотреть на саму реализацию, ну это проблемы литкода, можно по ссылке принимать и все будет ок
источник

q

qwerty in pro.algorithms
а зачем?
Дана скобочная последовательность, нужно определить, является ли она правильной или нет. Причем тут условие того, что менять содержимое строки нельзя и как это противоречит тому факту, что асимптотика по памяти константная?
источник

q

qwerty in pro.algorithms
Мне вот больше интересно понять, почему фраза "менять содержимое строки нельзя" как-то вмешивается в асимтотический анализ используемой доп. памяти
источник

EZ

Evgenii Zheltonozhsk... in pro.algorithms
Так же как считывание массива влияет на асимптотический анализ используемого времени бинпоиска
источник

q

qwerty in pro.algorithms
Кстати, еще такая ассоциация пришла, тогда смысл нам создавать остаточную сеть для того же алгоритма Форда-Фалкерсона, если можно найти макс поток на самом графе...
источник

q

qwerty in pro.algorithms
Просто не понятно, как оно влияет на сам анализ. Получается, это некоторое условие, которое накладывается при выполнении любого алгоритма над какими-то данными?
Что-то, вообще, очень мутно((
источник