11 и 61 ГОУ МГИУ Вторник, 05.08.2025, 03:22
Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Архив - только для чтения
занятие 8_11_07 [программирование]
vorlДата: Четверг, 08.11.2007, 21:48 | Сообщение # 1
Рядовой
Группа: 11
Сообщений: 16
Статус: Offline
Quote
сумма всех попарных произведений элементов последовательности

сумму 1*2 + 1*3 + 1*4 + 2*3 + 2*4 + 3*4 можно представить как:
(1 + 2 + 3)*4 + (1 + 2)*3 + 1*2 = 1*2 + (1 + 2)*3 + (1 + 2 + 3)*4
легко догадаться, что для последовательности получим
x1*x2 + (x1+x2)*x3 + (x1+x2+x3)*x4 + ... + (x1+x2+...+x(n-1))*xn + ...
т.е. чтобы вычислить сумму попарных произведений элементов последовательности нежны: сумму элементов и сама сумма попарных произведений
вот код
Code

begin
   sum2 = nil
   sum1 = readline.to_f
   while true
     x2 = readline.to_f
     if !sum2.nil?
       sum2 += sum1*x2
     else
       sum2 = sum1*x2
     end
     sum1 += x2
   end
rescue EOFError
   puts sum2
end


skype: vorl13
(\(\
(>'.')
(~(")(")
 
ldo2Дата: Суббота, 10.11.2007, 16:39 | Сообщение # 2
Сержант
Группа: 11
Сообщений: 88
Статус: Offline
Quote
ДЗ найти длину наибольшей возрастающей подпоследовательности

Как это понимать? Что такое подпоследовательность(Тинякова не цитировать)?
И что такое наибольшая?

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

Code

def binar_search(ar, el)
   i, j = 0,ar.size-1
   while i+1 != j
     k = (i+j)/2
     ar[k] <= el ? i=k : j=k
   end
   return i
end

begin
   elemts=[readline.to_f]
   nums=[1]
   while 13
     elem = readline.to_f
     if elem < elemts[0]
       elemts.unshift(elem)
       nums.unshift(1)
       next
     elsif elem > elemts[-1]
       elemts << elem
       nums << 1
       i = -1
     elsif elem == elemts[-1]
       i = -1
     else
       i = binar_search(elemts, elem)
       if elemts[i]!=elem
         elemts.insert(i+1, elem)
         nums.insert(i+1, 1)
         i+=1
       end
     end
     nums[i]=nums[0 ... i].max+1
   end
rescue EOFError
   puts nums.max
end


Основная проблема современности - коммуникационная.
jabber: ldo2@jabber.ru
skype: ldo1
 
y0maДата: Суббота, 10.11.2007, 16:49 | Сообщение # 3
Рядовой
Группа: 11
Сообщений: 14
Статус: Offline
ldo2, скорее всего имелась ввиду наибольшая по длине вырезка.
У меня вопросы в другом:
- {1} - возрастающая подпоследовательность?
- {1,2,3,3,3,4,5} - возрастающая?

Добавлено (10.11.2007, 16:49)
---------------------------------------------
А с другой стороны, в условии ничего конкретного не сказано, поэтому я могу понять это так, как мне захочется! =))


Я в контакте, skype: y0ma97
 
ldo2Дата: Суббота, 10.11.2007, 16:54 | Сообщение # 4
Сержант
Группа: 11
Сообщений: 88
Статус: Offline
y0ma, я полагаю, что {1} - возрастающая , а {1,2,3,3,3,4,5} -не является возрастающей, хотя является не убывающей

Основная проблема современности - коммуникационная.
jabber: ldo2@jabber.ru
skype: ldo1
 
Xaron1Дата: Суббота, 10.11.2007, 21:31 | Сообщение # 5
Группа: Удаленные





{1} - скорее и возрастающая, и убывающая, т.е. константная.
{1,2,3,3,3,4,5} - согласен, неубывающая.
Возрастающая, это когда для любой пары n1 и n2, из того, что n2>n1 следует, что элемент с номером n2 строго больше эелемента с номером n1. Думаю, правильное определение.
Подпоследовательность - любое колличество подряд идущих элементов исходной последовательности, думаю так.
 
ChuvaverДата: Суббота, 10.11.2007, 21:43 | Сообщение # 6
Сержант
Группа: 11
Сообщений: 54
Статус: Offline
Моя версия.
Тока неручаюсь за правильность! Если есть идеи, как ее модернизировать пишите!

begin
a = readline.to_f
s=1
m=0
while true
x = readline.to_f
if a<x then s+=1 else
if s>=m then m=s; s=0 end end
end
rescue EOFError
puts m
end


Собираю монеты! Приму в дар, все что не жалко!!!
 
Xaron1Дата: Суббота, 10.11.2007, 22:01 | Сообщение # 7
Группа: Удаленные





begin
s=0
m=0
while true
x = readline.to_f
if a.nil? || a<x
s+=1
else
m=s if s>m
s=0
end
a=x
end
rescue EOFError
m=s if s>m
puts m
end

Добавлено (10.11.2007, 22:01)
---------------------------------------------
Вариант не последний, писал на коленке, да еще и при отсылке все отступы потерлись, поэтому программа имеет плохое форматирование.

 
ldo2Дата: Воскресенье, 11.11.2007, 11:30 | Сообщение # 8
Сержант
Группа: 11
Сообщений: 88
Статус: Offline
Что делают эти программы?
Chuvaver, она даже почти не работает(возможно там просто где-то что-то не присваивается) завалилась на самом простом случае
1 2 3 4 она выдала "0".
Xaron, программа (ошибка, надо проинициализировать "а" nil'ом "undefined local variable or method `a' for main:Object (NameError)")
прошла тривиальный тест, но засыпалась на остальных, хотя они удовлетворяют определению подпоследовательности, приведенному выше: 2, 1, 2, 3, 4 - 3 вместо 4; 1, 2, 10, 5, 8, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7 - 7 вместо 8.

Думаем дальше...


Основная проблема современности - коммуникационная.
jabber: ldo2@jabber.ru
skype: ldo1
 
ChuvaverДата: Воскресенье, 11.11.2007, 12:52 | Сообщение # 9
Сержант
Группа: 11
Сообщений: 54
Статус: Offline
ldo2, Xaron, поправил - теперь вроде правильно!
ldo2, проверь на тестах. Если можешь, выложи их...

begin
a = readline.to_f
s=1
m=0
while true
x = readline.to_f
if a<x then s+=1 else
if s>=m then m=s; s=0 end end
end
rescue EOFError
m=s if s>m
if m==0 then puts s else puts m end
end


Собираю монеты! Приму в дар, все что не жалко!!!
 
DestroFunДата: Воскресенье, 11.11.2007, 14:10 | Сообщение # 10
Рядовой
Группа: 11
Сообщений: 11
Статус: Offline
Chuvaver, не знаю, будет ли пустая последовательность в тестах Рогановой, но твоя прога в этом случае не работает.
Кроме того, она считает неубывающие, а не возрастающие последовательности (последующий элемент строго больше предыдущего). Т.е. результатом для 1 2 2 2 будет 2, а не 4.

Мой вариант:
###
ans,cur,prev=0,1,nil
begin
while true
x=readline.to_f
if !prev.nil? && x>prev
cur+=1
ans=cur if ans<cur
else
cur=1
end
prev=x
end
rescue EOFError
puts ans
end
###

 
vorlДата: Воскресенье, 11.11.2007, 14:24 | Сообщение # 11
Рядовой
Группа: 11
Сообщений: 16
Статус: Offline
есди полагать, что {1} - возрастающая, и |{1}| = 1,
и {a_n} возрастает, если \All n1,n2 (n2 > n1 => a_n2 > a_n1)
Code

begin
   x1 = readline.to_f
   len = 1; max_len = 0
   while true
     x2 = readline.to_f
     if x2 > x1
       len += 1
       x1 = x2
       max_len = len if len > max_len
     else
       max_len = len if len > max_len
       len = 1
       x1 = x2
     end
   end
rescue EOFError
  puts max_len
end


skype: vorl13
(\(\
(>'.')
(~(")(")
 
ChuvaverДата: Воскресенье, 11.11.2007, 15:06 | Сообщение # 12
Сержант
Группа: 11
Сообщений: 54
Статус: Offline
DestroFun, понял свою ошибку! Спасибо, что натолкнул на мысль!

Собираю монеты! Приму в дар, все что не жалко!!!
 
ldo2Дата: Воскресенье, 11.11.2007, 16:14 | Сообщение # 13
Сержант
Группа: 11
Сообщений: 88
Статус: Offline
vorl, программа работает не верно, если считать что
\forall n1,n2 (n2 > n1 => a_n2 > a_n1)
тк например для 1, 2, 10, 5, 8, 6, 7 правильным ответом будет 5, а не 3

Добавлено (11.11.2007, 16:14)
---------------------------------------------
и для {1}, она не выдает 1!!!


Основная проблема современности - коммуникационная.
jabber: ldo2@jabber.ru
skype: ldo1
 
vorlДата: Воскресенье, 11.11.2007, 17:07 | Сообщение # 14
Рядовой
Группа: 11
Сообщений: 16
Статус: Offline
ldo2,
Quote
vorl, программа работает не верно, если считать что
\forall n1,n2 (n2 > n1 => a_n2 > a_n1)
тк например для 1, 2, 10, 5, 8, 6, 7 правильным ответом будет 5, а не 3

там просто надо было написать \All n1,n2 (n2-n1 =1 =>....)
Quote
и для {1}, она не выдает 1!!!

просто руки пишут не то что думает голова biggrin
в проге тот случай когда |{1}| = 0, но при этом для {1,1,1} она выдаст 1,
поутомы надо заманить до while
Code

   len = 1; max_len = 0

на
Code

   len = 1; max_len = 1


skype: vorl13
(\(\
(>'.')
(~(")(")
 
sma39Дата: Воскресенье, 11.11.2007, 17:27 | Сообщение # 15
Лейтенант
Группа: 61
Сообщений: 114
Статус: Offline
Че-то я так и не понял что для чего должно выдаваться.
Для
1){1} 0 или 1?
2){2,2,2} 0, 1 или 3?
3){3, 4, 12, 7, 11, 8, 9} здесь ответ должен быть 3?
4){} а здесь чего?


 
Xaron1Дата: Воскресенье, 11.11.2007, 17:55 | Сообщение # 16
Группа: Удаленные





sma39, по моим представлениям:

1) 1, так как {1} - наидлиннейшая возрастающая;
2) 1, так как {2} - наидлиннейшая возрастающая;
3) 3, так как {3,4,12} - наидлиннейшая возрастающая;
4) а здесь неопределена, так как {} - не последовательность, так как мы не может указать таких N1, N2, чтобы все натуральные n, принадлежащие [N1,N2) были номерами предложенной цепочки.

 
ChuvaverДата: Воскресенье, 11.11.2007, 17:56 | Сообщение # 17
Сержант
Группа: 11
Сообщений: 54
Статус: Offline
Объединение двух подпоследовательностей есть новая подпоследовательность?

Собираю монеты! Приму в дар, все что не жалко!!!
 
Xaron1Дата: Воскресенье, 11.11.2007, 18:21 | Сообщение # 18
Группа: Удаленные





Сорри, ребята, а что такое подпоследовательность? Вот, читаю на wiki, что
Quote
Подпоследовательность можно получить из некоторой конечной последовательности, если удалить из последней некоторое множество её элементов (возможно пустое).
Т.е. если из последовательности {3, 4, 12, 7, 11, 8, 9} мы выкинем несколько элементов, мы получим подпоследовательность {3,4,7,8,9}, которая и будет длиннейшой, т.е. ответ 5. Раньше я предполагал, что подпоследовательность может быть только вырезка с некоторого n1 по некоторый n2.

Добавлено (11.11.2007, 18:21)
---------------------------------------------
Chuvaver,

Quote (Chuvaver)
Объединение двух подпоследовательностей есть новая подпоследовательность?

Не всегда. Последовательность {12,45,2,56,4,78}. В ней есть подпоследовательности {12,2} и {45,56}. Объединяем: {12,2,45,56} - но это уже не подпоследовательность
 
sma39Дата: Воскресенье, 11.11.2007, 18:24 | Сообщение # 19
Лейтенант
Группа: 61
Сообщений: 114
Статус: Offline
Вот и у меня сомнения по этому поводу. Поэтому и дал такую последовательность для расмотрения.
Quote (Xaron)
а здесь неопределена, так как {} - не последовательность, так как мы не может указать таких N1, N2, чтобы все натуральные n, принадлежащие [N1,N2) были номерами предложенной цепочки.

наверное нужно nil выдавать. Или может быть 0?


 
Xaron1Дата: Воскресенье, 11.11.2007, 18:45 | Сообщение # 20
Группа: Удаленные





sma39, а мне кажется тут все равно, так как раз функция не определена, то и результат может быть какой угодно. Хотя 0 - ответ приемлемый мне кажется. Какая длинна? 0, т.е. нет длинны.

Добавлено (11.11.2007, 18:45)
---------------------------------------------
А могла вообще роганова под подпоследовательностью иметь ввиду именно вырезку, как мы ранее предполагали? А то меня терзают смутные сомнения о решении усложнившейся задачи...

 
ParavinciДата: Понедельник, 12.11.2007, 19:14 | Сообщение # 21
Группа: Удаленные





Сори что без кода wacko

Единственное решение, которое приходит мне в голову - это хранить в хеше максимальную длину подпоследовательности, оканчивающуюся на данное число. (т.е. пусть в начале size = Hash.new(0), а в цикле size[x] - максимальная длина возрастающей подпоследовательности, заканчивающаяся на x).
После получения нового числа я прохожу по всему хешу и нахожу наибольшую подпоследовательность к которой можно приписать x, так чтобы она осталась возрастающей. Дальше нужно просто сохранить длину новой подпоследовательности в хеше (+ незабыть о нескольких проверках), но до этого проще догадаться, чем описывать.
Программа написанная таким образом корректно обрабатывает все тесты, которые здесь приводились. Плюс есть идейка об одной оптимизации, но я её не производил и описывать не буду %).

 
Xaron1Дата: Вторник, 13.11.2007, 17:22 | Сообщение # 22
Группа: Удаленные





Paravinci, никто не говорит, что код именно для подпоследовательностей написать нереально. Ммм, просто Роганова дала ясно понять, что в заданиях этого занятия хеши и массивы неприменимы в виду потенциальной бесконечности последовательностей, а значит различных чисел, из которых они могут состоять. Лично я буду отправлять Рогановой вариант кода про вырезки, но, как всегда, не настаиваю на своей правоте.
 
kmeawДата: Вторник, 13.11.2007, 17:58 | Сообщение # 23
Рядовой
Группа: Проверенные
Сообщений: 35
Статус: Offline
Задача про подпоследовательности довольно просто решается, если ответить на вопрос: какие числа можно дописать к возрастающей последовательности, чтобы она осталась возрастающей последовательностью?

--
kmeaw aka bdd1
 
ParavinciДата: Вторник, 13.11.2007, 19:04 | Сообщение # 24
Группа: Удаленные





Xaron, я тоже думал на эту тему, но уже отправил с хешами.
В моей программе сохраняется только неповторяющиеся элементы. И хотя их количество может достигать бесконечности это всё-же не все элементы последовательности.
В качестве возможной оптимизации по памяти могу предложить на каждой итерации проходиться по хешу и выкидывать оттуда данные (x, size[x]) о таких подпоследовательностях, которые оканчиваются на число большее данного (current_x) и для которых длина максимальной подпоследовательности (size[current_x]) меньше, чем длина максимальной подпоследовательности, оканчивающееся на текущее число, т.е. x > current_x && size[x] < size[current_x].

Добавлено (13.11.2007, 19:04)
---------------------------------------------
Дополнение 1: конечно, несмотря на такую оптимизацию все-равно можно подобрать такую последовательность, что хеш всё-равно будет содержать бесконечно много элементов. Так что это не выход wacko

 
Xaron1Дата: Четверг, 15.11.2007, 01:58 | Сообщение # 25
Группа: Удаленные





В задачах ко второму коллоквиуму у Роганова есть одна, похожая на домашку. Принципиальных отличий только две: 1) ищется не максимальная, а средняя длинна; 2) речь идет о связанной подпоследовательности, которыю мы все здесь дружно называли вырезкой. Так что и у Ронановой, скорее всего, имеется ввиду именно связанная подпоследовательность, просто, как это у них часто бывает, сформулированно не совсем корректно.
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025