Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2010, 13:44   #1
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию Поиск в последовательности чисел упорядоченной подпоследовательности макс длины

Здравствуйте, вы не могли бы рассказать про алгоритм
поиска в последовательности чисел упорядоченной подпоследовательности максимальной длины, который работает за n*log(n) действий

Заранее спасибо!
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 26.02.2010, 14:43   #2
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Можно нормальную формулировку задачи?
Надо найти что? Строго возростающую или строго спадающую подпоследовательность максимальной длины? Или нестрого?
Чем не нравится обычный алгоритм для этой задачи (если я правильно понял, в чем сама задача)?
LeBron вне форума Ответить с цитированием
Старый 26.02.2010, 19:08   #3
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

мне как раз таки нужен обычный алгоритм - можешь написать его

задача: в последовательности найти возрастающую подпоследовательность максимальной длины....
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 26.02.2010, 20:36   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Алгоритм, говоришь...
Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-
from numpy import *

def GetAscendingSeq( iS ):

    iF = iS+1
    while iF < n and a[iF] > a[iF-1]:
        iF += 1;

    return iF-1

a = array( [ 1, 2, 3, 2, 1, 2, 1, 0, 4, 5, 7 ] )

n = len( a )
iS = 0
iF = 0
lMax = 0

while ( iF < n ):
    iF = GetAscendingSeq( iS )
    if iF-iS+1 > lMax:
        iS0 = iS
        lMax = iF-iS+1

    iS = iF+1

print "The longest ascending sequence is starting from a[",iS0,"] =", a[iS0],
print "and is finishing with a[", iS0+lMax-1,"]=", a[iS0+lMax-1]

#
Не очень, кстати, понимаю, что и куда прилепить, чтобы логарифм в сложности появился. O(n) здесь, вроде...
Vago вне форума Ответить с цитированием
Старый 26.02.2010, 22:40   #5
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Алгоритм, говоришь...
Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-
from numpy import *

def GetAscendingSeq( iS ):

    iF = iS+1
    while iF < n and a[iF] > a[iF-1]:
        iF += 1;

    return iF-1

a = array( [ 1, 2, 3, 2, 1, 2, 1, 0, 4, 5, 7 ] )

n = len( a )
iS = 0
iF = 0
lMax = 0

while ( iF < n ):
    iF = GetAscendingSeq( iS )
    if iF-iS+1 > lMax:
        iS0 = iS
        lMax = iF-iS+1

    iS = iF+1

print "The longest ascending sequence is starting from a[",iS0,"] =", a[iS0],
print "and is finishing with a[", iS0+lMax-1,"]=", a[iS0+lMax-1]

#
Не очень, кстати, понимаю, что и куда прилепить, чтобы логарифм в сложности появился. O(n) здесь, вроде...
Мы как бы о другом говорим... Почти во всех задачах подпоследовательность - это не просто "кусок" последовательности. Для Вашего примера ответ - подпоследовательность (1;2;3;4;5;7).

Вообще, самый простой способ - это стандартным алго (гугл в помощь) сначала найти максимальную возростающую, потом вторым проходом того же алго - максимальную спадающую. И взять максимум из 2 значений.
LeBron вне форума Ответить с цитированием
Старый 26.02.2010, 22:52   #6
loser
Пользователь
 
Регистрация: 19.02.2010
Сообщений: 30
По умолчанию

Цитата:
Сообщение от LeBron Посмотреть сообщение
сначала найти максимальную возростающую, потом вторым проходом того же алго - максимальную спадающую. И взять максимум из 2 значений.
Проще все сделать за один проход, не?
loser вне форума Ответить с цитированием
Старый 27.02.2010, 00:02   #7
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от LeBron Посмотреть сообщение
Мы как бы о другом говорим... Для Вашего примера ответ - подпоследовательность (1;2;3;4;5;7).
А-а... Тогда понятно, откуда такое требование на сложность Спасибо.
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
умножение 2-х чисел произвольной длины с плавающей точкой Ferza Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 24.06.2009 19:24
сложение чисел произвольной длины Ferza Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 24.06.2009 11:16
Поиск Макс элемента kostya2 Общие вопросы C/C++ 5 26.04.2009 16:49
Определить k-ую цифру последовательности Фибоначчи и последовательности натуральных чисел. Med Помощь студентам 1 20.03.2009 11:40
вычисление суммы чисел, кратных 3 из последовательности, состоящей из 10 чисел, заранее заданных Белка Помощь студентам 3 27.10.2007 11:53