facebook

_reality
Уже с Приветом
Posts: 232
Joined: 18 Nov 2014 22:55
Location: SFBA

Re: facebook

Post by _reality »

alex-IT wrote: 02 Jun 2017 06:48 что-то сомнительно на счет O(n), хотя бы потому что количество сиквенсов может быть больше n, как их все можно составить и уложиться в n не понятно. Хоть раз но будет же итерация на каждый сиквенс, тот же последний элемент добавляем. Вот - уже больше N. Если не так, то поясните как это O(n) получается. Если конечно мы одно и то же имеем ввиду
если считать операции вставки в список то думаю да, получится O(2^n), если считать сколько раз вызывается функция рекурсивно то O(n). если задачу оставить как вернуть все возможное подмножетства и за элементарную операцию считать хотя бы создание этого самого списка то меньше 2^n не получается

есть мнение что в задачах на dynamic programming + memorization размер key space и есть algorithmic complexity а в детали операций внутри вызова каждой функции можно не вдаваться
alex-IT
Уже с Приветом
Posts: 382
Joined: 16 Jan 2013 21:35

Re: facebook

Post by alex-IT »

oshibka_residenta wrote: 02 Jun 2017 07:22
alex-IT wrote: 02 Jun 2017 06:30 когда же это выяснилось...?
Да прямо на этой странице. Чукча не читатель?
Вы вбрасываете какое-то фуфло а потом называете это "выяснилось" . Вы же видели что более эффективное решение O(N^3) было приведено ?

Опровергайте
Last edited by alex-IT on 02 Jun 2017 08:56, edited 1 time in total.
alex-IT
Уже с Приветом
Posts: 382
Joined: 16 Jan 2013 21:35

Re: facebook

Post by alex-IT »

_reality wrote: 02 Jun 2017 07:55 если считать операции вставки в список то думаю да, получится O(2^n), если считать сколько раз вызывается функция рекурсивно то O(n). если задачу оставить как вернуть все возможное подмножетства и за элементарную операцию считать хотя бы создание этого самого списка то меньше 2^n не получается

есть мнение что в задачах на dynamic programming + memorization размер key space и есть algorithmic complexity а в детали операций внутри вызова каждой функции можно не вдаваться
Я имел ввиду time complexity, по идее ассимптотически оно не зависит ни от чего друго кроме как от N. Мне кажется что это не тот случай когда можно описать 2^N, потому что он кардинально отличается от случая когда надо вернуть любые сабсиквенсы тем что сабсиквенсы должны монотонно возрастать. Т.е. их, сабсиквенсов будет на много (НЕ пропорционально, а на какой то порядок) меньше чем всех сабскивенсов.
alex-IT
Уже с Приветом
Posts: 382
Joined: 16 Jan 2013 21:35

Re: facebook

Post by alex-IT »

Dweller wrote: 25 May 2017 07:49 Чтобы время не терять - генерировать (и записывать в output каждую в отдельности) все такие subsequences это уже практически O(N!) даже в самом простом случае когда 1,2,3,4,5,6,7,i+1
Так что n*log(n) точно не получится
Максильмальный subsequence в n*lon(n) решается с помощью TreeMap
Вы имеете ввиду максимальный возрастающий сабсиквенс? Если так, то все возрастающие сабсиквенсы должны решаться в N^2 Log N
alex-IT
Уже с Приветом
Posts: 382
Joined: 16 Jan 2013 21:35

Re: facebook

Post by alex-IT »

del
voyager3
Уже с Приветом
Posts: 1951
Joined: 11 Mar 2015 01:12

Re: facebook

Post by voyager3 »

alex-IT wrote: 02 Jun 2017 08:55
Dweller wrote: 25 May 2017 07:49 Чтобы время не терять - генерировать (и записывать в output каждую в отдельности) все такие subsequences это уже практически O(N!) даже в самом простом случае когда 1,2,3,4,5,6,7,i+1
Так что n*log(n) точно не получится
Максильмальный subsequence в n*lon(n) решается с помощью TreeMap
Вы имеете ввиду максимальный возрастающий сабсиквенс? Если так, то все возрастающие сабсиквенсы должны решаться в N^2 Log N
Ну выведите все возрастающие подпоследовательности (1, 2,3,4,5,6,7,8,9,10)
oshibka_residenta
Уже с Приветом
Posts: 4435
Joined: 13 Feb 2002 10:01
Location: Bay Area

Re: facebook

Post by oshibka_residenta »

voyager3 wrote: 02 Jun 2017 15:38 Ну выведите все возрастающие подпоследовательности (1, 2,3,4,5,6,7,8,9,10)
Зачем так сложно. Пусть это будет ( 1, 2,3,4,5 )
alex-IT
Уже с Приветом
Posts: 382
Joined: 16 Jan 2013 21:35

Re: facebook

Post by alex-IT »

oshibka_residenta wrote: 02 Jun 2017 17:27
voyager3 wrote: 02 Jun 2017 15:38 Ну выведите все возрастающие подпоследовательности (1, 2,3,4,5,6,7,8,9,10)
Зачем так сложно. Пусть это будет ( 1, 2,3,4,5 )
их 26, верно?
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: facebook

Post by АццкоМото »

alex-IT wrote: 02 Jun 2017 08:22
oshibka_residenta wrote: 02 Jun 2017 07:22
alex-IT wrote: 02 Jun 2017 06:30 когда же это выяснилось...?
Да прямо на этой странице. Чукча не читатель?
Вы вбрасываете какое-то фуфло а потом называете это "выяснилось" . Вы же видели что более эффективное решение O(N^3) было приведено ?

Опровергайте
Чего тут опровергать-то? Если вывод одного результат на экран О(1), то вывод 2**N-N-1 результатов - О(2**N) - даже не нужно смотреть в алгоритм, чтобы понять, что быстрее невозможно
Мат на форуме запрещен, блдж!
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: facebook

Post by АццкоМото »

voyager3 wrote: 02 Jun 2017 15:38
alex-IT wrote: 02 Jun 2017 08:55
Dweller wrote: 25 May 2017 07:49 Чтобы время не терять - генерировать (и записывать в output каждую в отдельности) все такие subsequences это уже практически O(N!) даже в самом простом случае когда 1,2,3,4,5,6,7,i+1
Так что n*log(n) точно не получится
Максильмальный subsequence в n*lon(n) решается с помощью TreeMap
Вы имеете ввиду максимальный возрастающий сабсиквенс? Если так, то все возрастающие сабсиквенсы должны решаться в N^2 Log N
Ну выведите все возрастающие подпоследовательности (1, 2,3,4,5,6,7,8,9,10)
шо, все 1013 штук? :)
Мат на форуме запрещен, блдж!
alex-IT
Уже с Приветом
Posts: 382
Joined: 16 Jan 2013 21:35

Re: facebook

Post by alex-IT »

АццкоМото wrote: 02 Jun 2017 23:11
voyager3 wrote: 02 Jun 2017 15:38
alex-IT wrote: 02 Jun 2017 08:55
Dweller wrote: 25 May 2017 07:49 Чтобы время не терять - генерировать (и записывать в output каждую в отдельности) все такие subsequences это уже практически O(N!) даже в самом простом случае когда 1,2,3,4,5,6,7,i+1
Так что n*log(n) точно не получится
Максильмальный subsequence в n*lon(n) решается с помощью TreeMap
Вы имеете ввиду максимальный возрастающий сабсиквенс? Если так, то все возрастающие сабсиквенсы должны решаться в N^2 Log N
Ну выведите все возрастающие подпоследовательности (1, 2,3,4,5,6,7,8,9,10)
шо, все 1013 штук? :)
Да, однако действительно сложность будет O(2^N). O(N^3) не возможно сделать. Другое дело если надо найти тьлько один максимальной длины или суммы, то N^2 и N Log N возможны
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: facebook

Post by АццкоМото »

alex-IT wrote: 03 Jun 2017 07:06 Да, однако действительно сложность будет O(2^N). O(N^3) не возможно сделать. Другое дело если надо найти тьлько один максимальной длины или суммы, то N^2 и N Log N возможны
одна возрастающая подпоследовательность максимальной длины/суммы и вовсе тривиально находится за линейное время
Мат на форуме запрещен, блдж!
User avatar
Dweller
Уже с Приветом
Posts: 12258
Joined: 20 Dec 2000 10:01
Location: Bellevue, WA

Re: facebook

Post by Dweller »

АццкоМото wrote: 03 Jun 2017 14:52
alex-IT wrote: 03 Jun 2017 07:06 Да, однако действительно сложность будет O(2^N). O(N^3) не возможно сделать. Другое дело если надо найти тьлько один максимальной длины или суммы, то N^2 и N Log N возможны
одна возрастающая подпоследовательность максимальной длины/суммы и вовсе тривиально находится за линейное время
линейный код в студию!

я пока только за N Log N могу

public static List<Integer> longest_increasing_subsequence(List<Integer> sequence) {
int[] lab = new int[sequence.size()];
TreeMap<Integer,Integer> sm = new TreeMap<Integer, Integer>();
lab[0] = 1;
sm.put(sequence.get(0), 1);
for (int i = 1; i<sequence.size(); i++) {
Integer key = sm.ceilingKey(sequence.get(i));
if (key != null) {
lab = sm.get(key);
sm.remove(key);
sm.put(sequence.get(i), lab);
} else {
lab = sm.size()+1;
sm.put(sequence.get(i), lab);
}
}
List<Integer> ou = new ArrayList<Integer>();
int tailcnt = sm.size();
for (int i=sequence.size()-1; i>=0 && tailcnt > 0; i--) {
while (tailcnt != lab && i>0)
i--;
ou.add(sequence.get(i));
tailcnt--;
}
Collections.reverse(ou);
return ou;
}
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: facebook

Post by АццкоМото »

Dweller wrote: 03 Jun 2017 16:17
АццкоМото wrote: 03 Jun 2017 14:52
alex-IT wrote: 03 Jun 2017 07:06 Да, однако действительно сложность будет O(2^N). O(N^3) не возможно сделать. Другое дело если надо найти тьлько один максимальной длины или суммы, то N^2 и N Log N возможны
одна возрастающая подпоследовательность максимальной длины/суммы и вовсе тривиально находится за линейное время
линейный код в студию!

я пока только за N Log N могу

public static List<Integer> longest_increasing_subsequence(List<Integer> sequence) {
int[] lab = new int[sequence.size()];
TreeMap<Integer,Integer> sm = new TreeMap<Integer, Integer>();
lab[0] = 1;
sm.put(sequence.get(0), 1);
for (int i = 1; i<sequence.size(); i++) {
Integer key = sm.ceilingKey(sequence.get(i));
if (key != null) {
lab = sm.get(key);
sm.remove(key);
sm.put(sequence.get(i), lab);
} else {
lab = sm.size()+1;
sm.put(sequence.get(i), lab);
}
}
List<Integer> ou = new ArrayList<Integer>();
int tailcnt = sm.size();
for (int i=sequence.size()-1; i>=0 && tailcnt > 0; i--) {
while (tailcnt != lab && i>0)
i--;
ou.add(sequence.get(i));
tailcnt--;
}
Collections.reverse(ou);
return ou;
}


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

я могу, конечно, напейсать код. но скучно же
Мат на форуме запрещен, блдж!
User avatar
Dweller
Уже с Приветом
Posts: 12258
Joined: 20 Dec 2000 10:01
Location: Bellevue, WA

Re: facebook

Post by Dweller »

АццкоМото wrote: 03 Jun 2017 20:51я могу, конечно, напейсать код. но скучно же
А вот тут можно будет написаный линейный код протестировать
https://www.hiredintech.com/classrooms/ ... 12/task/14
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: facebook

Post by АццкоМото »

Dweller wrote: 04 Jun 2017 06:11
АццкоМото wrote: 03 Jun 2017 20:51я могу, конечно, напейсать код. но скучно же
А вот тут можно будет написаный линейный код протестировать
https://www.hiredintech.com/classrooms/ ... 12/task/14
т.е. вы все-таки серьезно? и даже словесное описание вас не убедило?
Мат на форуме запрещен, блдж!
User avatar
Dweller
Уже с Приветом
Posts: 12258
Joined: 20 Dec 2000 10:01
Location: Bellevue, WA

Re: facebook

Post by Dweller »

АццкоМото wrote: 05 Jun 2017 04:02
Dweller wrote: 04 Jun 2017 06:11
АццкоМото wrote: 03 Jun 2017 20:51я могу, конечно, напейсать код. но скучно же
А вот тут можно будет написаный линейный код протестировать
https://www.hiredintech.com/classrooms/ ... 12/task/14
т.е. вы все-таки серьезно? и даже словесное описание вас не убедило?
Там тоже есть словесное описание
И до линейного решения почему-то не додумались
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: facebook

Post by АццкоМото »

Dweller wrote: 05 Jun 2017 05:00
АццкоМото wrote: 05 Jun 2017 04:02
Dweller wrote: 04 Jun 2017 06:11
АццкоМото wrote: 03 Jun 2017 20:51я могу, конечно, напейсать код. но скучно же
А вот тут можно будет написаный линейный код протестировать
https://www.hiredintech.com/classrooms/ ... 12/task/14
т.е. вы все-таки серьезно? и даже словесное описание вас не убедило?
Там тоже есть словесное описание
И до линейного решения почему-то не додумались
Значит, мы по-разному понимаем задачу.

Ещё раз: нужно найти возрастающую подпоследовательность максимальной длины/суммы? Это тривиально за линейное время. Или всё же что-то другое?
Мат на форуме запрещен, блдж!
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: facebook

Post by АццкоМото »

ЗЫ. Доступа к странице по ссылке у меня нет. Можете скопировать сюда описание задачи?
Мат на форуме запрещен, блдж!
_reality
Уже с Приветом
Posts: 232
Joined: 18 Nov 2014 22:55
Location: SFBA

Re: facebook

Post by _reality »

АццкоМото wrote: 03 Jun 2017 20:51
вы сейчас серьезно или издеваетесь? эта задача ничем по сути не отличается от поиска максимума в массиве. хранишь индексы начала и конца самой длинной пока что встреченной последовательности и такие же индексы для изучаемой на данном этапе. как только находим очередной элемент, что меньше предыдущего, значит текущая последоовательность прервалась. если она длиннее, чем предыдущая самая большая, обновляем индексы начала-конца, иначе - просто идем дальше

я могу, конечно, напейсать код. но скучно же
Подпослдеовательность не обязательно должна быть continuous, к примеру в [2, 12, 3, 14, 5, 6] - это должна быть [2, 3, 5, 6]. В "классической" задаче longest increasin sub-seq это так.
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: facebook

Post by АццкоМото »

_reality wrote: 05 Jun 2017 05:41
АццкоМото wrote: 03 Jun 2017 20:51
вы сейчас серьезно или издеваетесь? эта задача ничем по сути не отличается от поиска максимума в массиве. хранишь индексы начала и конца самой длинной пока что встреченной последовательности и такие же индексы для изучаемой на данном этапе. как только находим очередной элемент, что меньше предыдущего, значит текущая последоовательность прервалась. если она длиннее, чем предыдущая самая большая, обновляем индексы начала-конца, иначе - просто идем дальше

я могу, конечно, напейсать код. но скучно же
Подпослдеовательность не обязательно должна быть continuous, к примеру в [2, 12, 3, 14, 5, 6] - это должна быть [2, 3, 5, 6]. В "классической" задаче longest increasin sub-seq это так.
Аааа
Понял, перезарядил. Тут таки да, линейное время едва ли достижимо. Хотя и есть над чем пораскинуть мозгами — если не в плане биг-О для худшего случая, то а плане практической фефективности
Мат на форуме запрещен, блдж!
User avatar
Dweller
Уже с Приветом
Posts: 12258
Joined: 20 Dec 2000 10:01
Location: Bellevue, WA

Re: facebook

Post by Dweller »

АццкоМото wrote: 05 Jun 2017 05:52
_reality wrote: 05 Jun 2017 05:41
АццкоМото wrote: 03 Jun 2017 20:51вы сейчас серьезно или издеваетесь? эта задача ничем по сути не отличается от поиска максимума в массиве. хранишь индексы начала и конца самой длинной пока что встреченной последовательности и такие же индексы для изучаемой на данном этапе. как только находим очередной элемент, что меньше предыдущего, значит текущая последоовательность прервалась. если она длиннее, чем предыдущая самая большая, обновляем индексы начала-конца, иначе - просто идем дальше

я могу, конечно, напейсать код. но скучно же
Подпослдеовательность не обязательно должна быть continuous, к примеру в [2, 12, 3, 14, 5, 6] - это должна быть [2, 3, 5, 6]. В "классической" задаче longest increasin sub-seq это так.
Аааа
Понял, перезарядил. Тут таки да, линейное время едва ли достижимо. Хотя и есть над чем пораскинуть мозгами — если не в плане биг-О для худшего случая, то а плане практической фефективности
Именно
В случае непрерывной подпоследовательности найти максимальную длину это задача разряда найти максимум массива :mrgreen: тоже линейно
Конечно и такое могут спросить, но надо ли тогда идти в такую контору?
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: facebook

Post by АццкоМото »

Dweller wrote: 05 Jun 2017 19:42 В случае непрерывной подпоследовательности найти максимальную длину это задача разряда найти максимум массива :mrgreen: тоже линейно
Дык я даже использовал именно это выражение, когда недоумевал, о чем вообще разговор. Но, конечно, сам втупил - мог бы и догадаться.
Мат на форуме запрещен, блдж!

Return to “Работа и Карьера в IT”