Обсуждение:Задача о наибольшей возрастающей подпоследовательности
Версия от 05:45, 3 декабря 2011; Dgerasimov (обсуждение | вклад)
- ☑ оформить номрально разделы и добавить содержание
- ☑ Оформить псевдокод в соответствии с правилами, а то там куча левых операторов, For вместо for и т.д.
- ☑ Раздел «Постановка задачи» не нужен, итак понятно что в статье про задачу главная цель — решить задачу. Просто поместить постановку задачи в шапку.
- ☑ Не надо описывать ввод данных и вывод данных. Оформляй псевдокод как функцию, принимающую входные данные и возвращающую результат. Если она выдает наибольшую возрастающую подпоследовательность, то и возвращай vector<int>, или int[], например, а не выводи.
- ☑ Разделы первого уровня обособляются как == Раздел ==, а не как ==== Раздел ====
- ☑ Почему наибольшая возрастающая последовательность в псевдокоде называется lsa?
Алгоритм за n^2
- ☑ Про оформление псевдокода(правила его оформелния находятся тут Обсуждение:Дискретная математика и алгоритмы) :
- Учти, что for в виде for i = a..b обозначает итерирование от a до b включительно. То есть он эквивалентен for (int i = a; i <= b; i++).
- теперь, когда твой код — функция, делай отступ в 4 пробела, как и принято. Тогда и фигурные скобки не понадобятся. Кстати, у блока кода в цикле for тоже должен быть отступ в 4 пробела относительно оператора for, а не восемь. Вообще лучше написать сначала код в каком-нибудь notepad++, а потом сюда вставлять — тогда не придётся ручками считать пробелы.
- n у тебя нигде не определён. Пиши лучше a.size(даже без () можно), например. maxN тоже не определён.
- пишем
vector<int>
как это принято — без пробела перед шаблонными аргументами. - Читай правила оформления псевдокода про круглые скобки вокруг внешнего условия for, if и т.д.
- Опять же, не пиши в псевдокоде лишние детали, относящиеся к конскретному языку программирования. Зачем писать revese(v.begin(), v.end()). Человек, не знакомый с C++, это не поймёт, лучше просто reverse(v), или v.reverse().
- ☑ В псевдокоде за n^2 всё ещё какой-то треш. Ты подсчитываешь динамику в том же входном массиве a. А d у тебя используется только при восстановлении НВП. А в описании алгоритма вообще используется x. Массив динамики у тебя с 0-индексацией, а база — в первом элементе. В общем, перечитай внимательно всё и напиши нормальный псевдокод.
--Дмитрий Герасимов 22:45, 2 декабря 2011 (MSK)
- ☐ Вот теперь всё отлично и понятно. Только в описании ошибка — «d[i] = max(d[j] для всех j …» — надо к максимуму 1 прибавить же.
Алгоритм за n log n
- ☐ Для <= в tex есть \le
- ☑ Во время заполнения d в псевдокоде ты затираешь нулевой элемент бесконечностью.
- ☑ size у тебя нигде не инизиализируется
- ☑ a же должно быть размера n? Тогда у тебя произойдёт выход за границу массива, так как происходит n+1 итерация.
- ☑ те же замечания насчёт скобок вокруг условия if, while, for и т.д.
- ☐ Ещё нужно добавить категории. Какие именно — написано в правилах оформления конспектов.
--Дмитрий Герасимов 05:45, 3 декабря 2011 (MSK)