Re[6]: [Haskell] Найти все конечные подпоследовательности
От: Кодт Россия  
Дата: 08.10.09 17:05
Оценка:
Здравствуйте, thesz, Вы писали:

К>>Тривиальная? Вон Булат с разбега дал красивое и неправильное решение. А nikov-у пришлось прибегнуть к арифметике.


T>Это получение 2^n, по-моему. Вся сложность в трудности проверок.


Поясни. Не понял твою мысль насчёт трудности проверок.

T>Второе: http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-List.html#v%3Asubsequences

T>Проблемы могут быть с бесконечностью, тут уже начинаются нюансы.

Не просто могут быть, а сразу есть.
subsequences[0..] рожает [] и затем бесконечный поток одноэлементных списков [0],[1],...

T>Здесь может помочь http://hackage.haskell.org/package/control-monad-omega


Прикольно. А можешь избавить меня от труда по вчитыванию в предмет, и на пальцах рассказать и показать про эту монаду Омега? Буду премного благодарен.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[6]: [Haskell] Найти все конечные подпоследовательности
От: Кодт Россия  
Дата: 08.10.09 17:09
Оценка:
Здравствуйте, Буравчик, Вы писали:

Б>А у меня все работает


Странно... видать, где-то я очепятнулся.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[7]: [Haskell] Найти все конечные подпоследовательности
От: Кодт Россия  
Дата: 08.10.09 17:15
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Странно... видать, где-то я очепятнулся.


Блин. Колдунство какое-то
sub (x:xs) = [[]] ++ concatMap (\a -> [x:a,a]) (sub xs)
sub [] = []

test fun xs = do
    putStrLn $ "source is " ++ show xs
    let q___q = map (const '-') $ show xs
    putStrLn q___q
    let ss = fun xs
    mapM_ (putStrLn . show) ss
    putStrLn q___q

main = do
    test sub ['A'..'Z']

Выводит с дырками.

А если вбить let sub[]=[]; sub(x:xs)=..... в интерпретаторе руками — то без дырок.
Ниччего не понимаю.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[8]: [Haskell] Найти все конечные подпоследовательности
От: Буравчик Россия  
Дата: 08.10.09 17:35
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Блин. Колдунство какое-то

sub (x:xs) = [[]] ++ concatMap (\a -> [x:a,a]) (sub xs)
sub [] = []


Ошибка в выделенном. Должно быть [ [x] ]
... << RSDN@Home 1.2.0 alpha 4 rev. 1218>>
Best regards, Буравчик
Re[7]: [Haskell] Найти все конечные подпоследовательности
От: thesz Россия http://thesz.livejournal.com
Дата: 08.10.09 17:51
Оценка: 37 (2)
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, thesz, Вы писали:


К>>>Тривиальная? Вон Булат с разбега дал красивое и неправильное решение. А nikov-у пришлось прибегнуть к арифметике.

T>>Это получение 2^n, по-моему. Вся сложность в трудности проверок.
К>Поясни. Не понял твою мысль насчёт трудности проверок.

Большой размер получающихся данных.

Как доказать, что subsequences [1..n] совпадает с первыми 2^n элементами subsequences [1..n+1].

T>>Второе: http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-List.html#v%3Asubsequences

T>>Проблемы могут быть с бесконечностью, тут уже начинаются нюансы.
К>Не просто могут быть, а сразу есть.
К>subsequences[0..] рожает [] и затем бесконечный поток одноэлементных списков [0],[1],...

Вот это, как раз, и есть нюанс.

Что лучше — бесконечный поток одноэлементных списков, или бесконечный поток каких-либо других списков?

И, кстати:
*Omega> Data.List.subsequences [1..1]
[[],[1]]
*Omega> Data.List.subsequences [1..2]
[[],[1],[2],[1,2]]
*Omega> Data.List.subsequences [1..3]
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
*Omega> Data.List.subsequences [1..4]
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3],[4],[1,4],[2,4],[1,2,4],[3,4],[1,3,4],
[2,3,4],[1,2,3,4]]
*Omega> Data.List.subsequences [1..5]
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3],[4],[1,4],[2,4],[1,2,4],[3,4],[1,3,4],
[2,3,4],[1,2,3,4],[5],[1,5],[2,5],[1,2,5],[3,5],[1,3,5],[2,3,5],[1,2,3,5],[4,5],
[1,4,5],[2,4,5],[1,2,4,5],[3,4,5],[1,3,4,5],[2,3,4,5],[1,2,3,4,5]]


Начало subsequences [1..n] совпадает с началом subsequences [1..n+1]. Поэтому я считаю, что ты проверял свои выкладки на каком-то неправильном subsequences.

Тот, что в Data.List, хороший. Тот, что использовал ты, не очень.

T>>Здесь может помочь http://hackage.haskell.org/package/control-monad-omega

К>Прикольно. А можешь избавить меня от труда по вчитыванию в предмет, и на пальцах рассказать и показать про эту монаду Омега? Буду премного благодарен.

Вот выражение:
do
    x <- list_a
    y <- list_b
    return $ f x y


Обычная монада списка сперва выберет все элементы из list_a, а потом все элементы из list_b. Если list_a бесконечен, то мы получим на выходе map (\x -> f x (head list_b)) list_a, элементы второго списка перебираться не будут.

diagonal позволяет выбирать элементы "по диагонали", перебирая пары "в ширину".

Для переборных алгоритмов самое то.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[3]: [Haskell] Найти все конечные подпоследовательности
От: BulatZiganshin  
Дата: 08.10.09 18:03
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Что-то криво получается. С повторениями.


что-то ты всё напутал. вот как у меня:

["A","AB","B","ABC","BC","AC","C","ABCD","BCD","ACD","CD","ABD","BD","AD","D","ABCDE","BCDE","ACDE","CDE","ABDE","BDE","ADE","DE","ABCE","B
CE","ACE","CE","ABE","BE","AE","E","ABCDEF","BCDEF","ACDEF","CDEF","ABDEF","BDEF","ADEF","DEF","ABCEF","BCEF","ACEF","CEF","ABEF","BEF","AE
F","EF","ABCDF","BCDF","ACDF","CDF","ABDF","BDF","ADF","DF","ABCF","BCF","ACF","CF","ABF","BF","AF","F","ABCDEFG","BCDEFG","ACDEFG","CDEFG"
,"ABDEFG","BDEFG","ADEFG","DEFG","ABCEFG","BCEFG","ACEFG","CEFG","ABEFG","BEFG","AEFG","EFG","ABCDFG","BCDFG","ACDFG","CDFG","ABDFG","BDFG"
,"ADFG","DFG","ABCFG","BCFG","ACFG","CFG","ABFG","BFG","AFG","FG","ABCDEG","BCDEG","ACDEG","CDEG","ABDEG","BDEG","ADEG","DEG","ABCEG","BCEG
","ACEG","CEG","ABEG","BEG","AEG","EG","ABCDG","BCDG","ACDG","CDG","ABDG","BDG","ADG","DG","ABCG","BCG","ACG","CG","ABG","BG","AG","G","ABC
DEFGH","BCDEFGH","ACDEFGH","CDEFGH","ABDEFGH","BDEFGH","ADEFGH","DEFGH","ABCEFGH","BCEFGH","ACEFGH","CEFGH","ABEFGH","BEFGH","AEFGH","EFGH"
,"ABCDFGH","BCDFGH","ACDFGH","CDFGH","ABDFGH","BDFGH","ADFGH","DFGH","ABCFGH","BCFGH","ACFGH","CFGH","ABFGH","BFGH","AFGH","FGH","ABCDEGH",
"BCDEGH","ACDEGH","CDEGH","ABDEGH","BDEGH","ADEGH","DEGH","ABCEGH","BCEGH","ACEGH","CEGH","ABEGH","BEGH","AEGH","EGH","ABCDGH","BCDGH","ACD
GH","CDGH","ABDGH","BDGH","ADGH","DGH","ABCGH","BCGH","ACGH","CGH","ABGH","BGH","AGH","GH","ABCDEFH","BCDEFH","ACDEFH","CDEFH","ABDEFH","BD
EFH","ADEFH","DEFH","ABCEFH","BCEFH","ACEFH","CEFH","ABEFH","BEFH","AEFH","EFH","ABCDFH","BCDFH","ACDFH","CDFH","ABDFH","BDFH","ADFH","DFH"
,"ABCFH","BCFH","ACFH","CFH","ABFH","BFH","AFH","FH","ABCDEH","BCDEH","ACDEH","CDEH","ABDEH","BDEH","ADEH","DEH","ABCEH","BCEH","ACEH","CEH
","ABEH","BEH","AEH","EH","ABCDH","BCDH","ACDH","CDH","ABDH","BDH","ADH","DH","ABCH","BCH","ACH","CH","ABH","BH","AH","H","ABCDEFGHI","BCDE
FGHI","ACDEFGHI","CDEFGHI","ABDEFGHI","BDEFGHI","ADEFGHI","DEFGHI","ABCEFGHI","BCEFGHI","ACEFGHI","CEFGHI","ABEFGHI","BEFGHI","AEFGHI","EFG
HI","ABCDFGHI","BCDFGHI","ACDFGHI","CDFGHI","ABDFGHI","BDFGHI","ADFGHI","DFGHI","ABCFGHI","BCFGHI","ACFGHI","CFGHI","ABFGHI","BFGHI","AFGHI
","FGHI","ABCDEGHI","BCDEGHI","ACDEGHI","CDEGHI","ABDEGHI","BDEGHI","ADEGHI","DEGHI","ABCEGHI","BCEGHI","ACEGHI","CEGHI","ABEGHI","BEGHI","
AEGHI","EGHI","ABCDGHI","BCDGHI","ACDGHI","CDGHI","ABDGHI","BDGHI","ADGHI","DGHI","ABCGHI","BCGHI","ACGHI","CGHI","ABGHI","BGHI","AGHI","GH
I","ABCDEFHI","BCDEFHI","ACDEFHI","CDEFHI","ABDEFHI","BDEFHI","ADEFHI","DEFHI","ABCEFHI","BCEFHI","ACEFHI","CEFHI","ABEFHI","BEFHI","AEFHI"
,"EFHI","ABCDFHI","BCDFHI","ACDFHI","CDFHI","ABDFHI","BDFHI","ADFHI","DFHI","ABCFHI","BCFHI","ACFHI","CFHI","ABFHI","BFHI","AFHI","FHI","AB
CDEHI","BCDEHI","ACDEHI","CDEHI","ABDEHI","BDEHI","ADEHI","DEHI","ABCEHI","BCEHI","ACEHI","CEHI","ABEHI","BEHI","AEHI","EHI","ABCDHI","BCDH
I","ACDHI","CDHI","ABDHI","BDHI","ADHI","DHI","ABCHI","BCHI","ACHI","CHI","ABHI","BHI","AHI","HI","ABCDEFGI","BCDEFGI","ACDEFGI","CDEFGI","
ABDEFGI","BDEFGI","ADEFGI","DEFGI","ABCEFGI","BCEFGI","ACEFGI","CEFGI","ABEFGI","BEFGI","AEFGI","EFGI","ABCDFGI","BCDFGI","ACDFGI","CDFGI",
"ABDFGI","BDFGI","ADFGI","DFGI","ABCFGI","BCFGI","ACFGI","CFGI","ABFGI","BFGI","AFGI","FGI","ABCDEGI","BCDEGI","ACDEGI","CDEGI","ABDEGI","B
DEGI","ADEGI","DEGI","ABCEGI","BCEGI","ACEGI","CEGI","ABEGI","BEGI","AEGI","EGI","ABCDGI","BCDGI","ACDGI","CDGI","ABDGI","BDGI","ADGI","DGI
","ABCGI","BCGI","ACGI","CGI","ABGI","BGI","AGI","GI","ABCDEFI","BCDEFI","ACDEFI","CDEFI","ABDEFI","BDEFI","ADEFI","DEFI","ABCEFI","BCEFI",
"ACEFI","CEFI","ABEFI","BEFI","AEFI","EFI","ABCDFI","BCDFI","ACDFI","CDFI","ABDFI","BDFI","ADFI","DFI","ABCFI","BCFI","ACFI","CFI","ABFI","
BFI","AFI","FI","ABCDEI","BCDEI","ACDEI","CDEI","ABDEI","BDEI","ADEI","DEI","ABCEI","BCEI","ACEI","CEI","ABEI","BEI","AEI","EI","ABCDI","BC
DI","ACDI","CDI","ABDI","BDI","ADI","DI","ABCI","BCI","ACI","CI","ABI","BI","AI","I","ABCDEFGHIJ","BCDEFGHIJ","ACDEFGHIJ","CDEFGHIJ","ABDEF
GHIJ","BDEFGHIJ","ADEFGHIJ","DEFGHIJ","ABCEFGHIJ","BCEFGHIJ","ACEFGHIJ","CEFGHIJ","ABEFGHIJ","BEFGHIJ","AEFGHIJ","EFGHIJ","ABCDFGHIJ","BCDF
GHIJ","ACDFGHIJ","CDFGHIJ","ABDFGHIJ","BDFGHIJ","ADFGHIJ","DFGHIJ","ABCFGHIJ","BCFGHIJ","ACFGHIJ","CFGHIJ","ABFGHIJ","BFGHIJ","AFGHIJ","FGH
IJ","ABCDEGHIJ","BCDEGHIJ","ACDEGHIJ","CDEGHIJ","ABDEGHIJ","BDEGHIJ","ADEGHIJ","DEGHIJ","ABCEGHIJ","BCEGHIJ","ACEGHIJ","CEGHIJ","ABEGHIJ","
BEGHIJ","AEGHIJ","EGHIJ","ABCDGHIJ","BCDGHIJ","ACDGHIJ","CDGHIJ","ABDGHIJ","BDGHIJ","ADGHIJ","DGHIJ","ABCGHIJ","BCGHIJ","ACGHIJ","CGHIJ","A
BGHIJ","BGHIJ","AGHIJ","GHIJ","ABCDEFHIJ","BCDEFHIJ","ACDEFHIJ","CDEFHIJ","ABDEFHIJ","BDEFHIJ","ADEFHIJ","DEFHIJ","ABCEFHIJ","BCEFHIJ","ACE
FHIJ","CEFHIJ","ABEFHIJ","BEFHIJ","AEFHIJ","EFHIJ","ABCDFHIJ","BCDFHIJ","ACDFHIJ","CDFHIJ","ABDFHIJ","BDFHIJ","ADFHIJ","DFHIJ","ABCFHIJ","B
CFHIJ","ACFHIJ","CFHIJ","ABFHIJ","BFHIJ","AFHIJ","FHIJ","ABCDEHIJ","BCDEHIJ","ACDEHIJ","CDEHIJ","ABDEHIJ","BDEHIJ","ADEHIJ","DEHIJ","ABCEHI
J","BCEHIJ","ACEHIJ","CEHIJ","ABEHIJ","BEHIJ","AEHIJ","EHIJ","ABCDHIJ","BCDHIJ","ACDHIJ","CDHIJ","ABDHIJ","BDHIJ","ADHIJ","DHIJ","ABCHIJ","
BCHIJ","ACHIJ","CHIJ","ABHIJ","BHIJ","AHIJ","HIJ","ABCDEFGIJ","BCDEFGIJ","ACDEFGIJ","CDEFGIJ","ABDEFGIJ","BDEFGIJ","ADEFGIJ","DEFGIJ","ABCE
FGIJ","BCEFGIJ","ACEFGIJ","CEFGIJ","ABEFGIJ","BEFGIJ","AEFGIJ","EFGIJ","ABCDFGIJ","BCDFGIJ","ACDFGIJ","CDFGIJ","ABDFGIJ","BDFGIJ","ADFGIJ",
"DFGIJ","ABCFGIJ","BCFGInterrupted.
Люди, я люблю вас! Будьте бдительны!!!
Re: [Haskell] Найти все конечные подпоследовательности
От: Quintanar Россия  
Дата: 08.10.09 18:26
Оценка:
Здравствуйте, hexamino, Вы писали:

H>Надо написать функцию, которая, получив на вход список (конечный или бесконечный), вернет список всех его конечных подпоследовательностей. Для бесконечного исходного списка подпоследовательностей должно быть, естественно, бесконечно много. Помогите, пожалуйста.


Для бесконечного списка — это несчетное множество, что делает задачу несколько бессмысленной. Для конечного
списка задача кажется мегатривиальной.
Re[2]: [Haskell] Найти все конечные подпоследовательности
От: deniok Россия  
Дата: 08.10.09 18:54
Оценка:
Здравствуйте, Quintanar, Вы писали:


Q>Для бесконечного списка — это несчетное множество, что делает задачу несколько бессмысленной.


И какие же конечные ненулевые подпоследовательности пропускает
sub (x:xs) = [[x]] ++ concatMap (\a -> [x:a,a]) (sub xs)
sub [] = []
-- (c) Булат

которая конструктивно нумерует искомое множество?
Prelude> take 100 $ sub [1..]
[[1],[1,2],[2],[1,2,3],[2,3],[1,3],[3],[1,2,3,4],[2,3,4],[1,3,4],[3,4],[1,2,4],[
2,4],[1,4],[4],[1,2,3,4,5],[2,3,4,5],[1,3,4,5],[3,4,5],[1,2,4,5],[2,4,5],[1,4,5]
,[4,5],[1,2,3,5],[2,3,5],[1,3,5],[3,5],[1,2,5],[2,5],[1,5],[5],[1,2,3,4,5,6],[2,
3,4,5,6],[1,3,4,5,6],[3,4,5,6],[1,2,4,5,6],[2,4,5,6],[1,4,5,6],[4,5,6],[1,2,3,5,
6],[2,3,5,6],[1,3,5,6],[3,5,6],[1,2,5,6],[2,5,6],[1,5,6],[5,6],[1,2,3,4,6],[2,3,
4,6],[1,3,4,6],[3,4,6],[1,2,4,6],[2,4,6],[1,4,6],[4,6],[1,2,3,6],[2,3,6],[1,3,6]
,[3,6],[1,2,6],[2,6],[1,6],[6],[1,2,3,4,5,6,7],[2,3,4,5,6,7],[1,3,4,5,6,7],[3,4,
5,6,7],[1,2,4,5,6,7],[2,4,5,6,7],[1,4,5,6,7],[4,5,6,7],[1,2,3,5,6,7],[2,3,5,6,7]
,[1,3,5,6,7],[3,5,6,7],[1,2,5,6,7],[2,5,6,7],[1,5,6,7],[5,6,7],[1,2,3,4,6,7],[2,
3,4,6,7],[1,3,4,6,7],[3,4,6,7],[1,2,4,6,7],[2,4,6,7],[1,4,6,7],[4,6,7],[1,2,3,6,
7],[2,3,6,7],[1,3,6,7],[3,6,7],[1,2,6,7],[2,6,7],[1,6,7],[6,7],[1,2,3,4,5,7],[2,
3,4,5,7],[1,3,4,5,7],[3,4,5,7],[1,2,4,5,7]]
Re[3]: [Haskell] Найти все конечные подпоследовательности
От: Quintanar Россия  
Дата: 08.10.09 19:18
Оценка:
Здравствуйте, deniok, Вы писали:

D>Здравствуйте, Quintanar, Вы писали:



Q>>Для бесконечного списка — это несчетное множество, что делает задачу несколько бессмысленной.


D>И какие же конечные ненулевые подпоследовательности пропускает


Подмножества бесконечного множества — это набор бесконечных последовательностей из 0 и 1, т.е.
вещественные числа. Это несчетное множество и хоть я не могу сказать, что именно пропускает эта прога,
она обязательно что-то пропускает, поскольку программа может перенумеровать только счетное множество.
Она неверна в принципе при такой постановке задачи. Надо явно оговаривать, что она должна работать
именно так, а то я, например, считаю, что сначала должны возвращаться все одноэлементные подмножества
и это тоже будет верное решение.
Re[2]: [Haskell] Найти все конечные подпоследовательности
От: nikov США http://www.linkedin.com/in/nikov
Дата: 08.10.09 19:20
Оценка: +2
Здравствуйте, Quintanar, Вы писали:

H>>Надо написать функцию, которая, получив на вход список (конечный или бесконечный), вернет список всех его конечных подпоследовательностей. Для бесконечного исходного списка подпоследовательностей должно быть, естественно, бесконечно много. Помогите, пожалуйста.


Q>Для бесконечного списка — это несчетное множество, что делает задачу несколько бессмысленной.


Множество всех подмножеств счетного множества — несчетно. А множество конечных подмножеств счетного множества — счетно.
Re[4]: [Haskell] Найти все конечные подпоследовательности
От: deniok Россия  
Дата: 08.10.09 19:21
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>Подмножества бесконечного множества — это набор бесконечных последовательностей из 0 и 1, т.е.

Q>вещественные числа.

Не, там в условии "список всех его конечных подпоследовательностей".
Re[5]: [Haskell] Найти все конечные подпоследовательности
От: Quintanar Россия  
Дата: 08.10.09 19:24
Оценка:
Здравствуйте, deniok, Вы писали:

D>Здравствуйте, Quintanar, Вы писали:


Q>>Подмножества бесконечного множества — это набор бесконечных последовательностей из 0 и 1, т.е.

Q>>вещественные числа.

D>Не, там в условии "список всех его конечных подпоследовательностей".


Хмм, да. Но все равно смысла в такой постановке задачи мало — как я уже сказал, я могу возвращать
сначала все одноэлементные подмножества. Это значительно проще, а условию не противоречит.
Re[6]: [Haskell] Найти все конечные подпоследовательности
От: deniok Россия  
Дата: 08.10.09 19:32
Оценка: +2
Здравствуйте, Quintanar, Вы писали:

Q>Хмм, да. Но все равно смысла в такой постановке задачи мало — как я уже сказал, я могу возвращать

Q>сначала все одноэлементные подмножества. Это значительно проще, а условию не противоречит.

Противоречит
Приведенное Булатом решение за конечное время добирается до любой наперед заданной подпоследовательности, то есть решает поставленную задачу нахождения всех конечных подпоследовательностей. Твое решение этого не делает.
Re[7]: [Haskell] Найти все конечные подпоследовательности
От: Quintanar Россия  
Дата: 08.10.09 19:56
Оценка:
Здравствуйте, deniok, Вы писали:

D>Противоречит

D>Приведенное Булатом решение за конечное время добирается до любой наперед заданной подпоследовательности, то есть решает поставленную задачу нахождения всех конечных подпоследовательностей. Твое решение этого не делает.

Не очень существенное замечание, поскольку требования вернуть любую наперед заданную последовательность в задаче нет.
А возвращать множества, удовлетворяющие условию задачи, моя программа может сколь угодно долго.
Re[8]: [Haskell] Найти все конечные подпоследовательности
От: nikov США http://www.linkedin.com/in/nikov
Дата: 08.10.09 19:59
Оценка:
Здравствуйте, Quintanar, Вы писали:

D>>Противоречит

D>>Приведенное Булатом решение за конечное время добирается до любой наперед заданной подпоследовательности, то есть решает поставленную задачу нахождения всех конечных подпоследовательностей. Твое решение этого не делает.

Q>Не очень существенное замечание, поскольку требования вернуть любую наперед заданную последовательность в задаче нет.


В условии есть слово "всех". Очевидно, что предложенный тобой алгоритм никогда не вернет некоторые из конечных последовательностей.
Re[9]: [Haskell] Найти все конечные подпоследовательности
От: Quintanar Россия  
Дата: 08.10.09 20:17
Оценка:
Здравствуйте, nikov, Вы писали:

Q>>Не очень существенное замечание, поскольку требования вернуть любую наперед заданную последовательность в задаче нет.


N>В условии есть слово "всех". Очевидно, что предложенный тобой алгоритм никогда не вернет некоторые из конечных последовательностей.


Это очевидно, если признавать операции с бесконечностью. А теперь представим, что я выдал этот
алгоритм тебе в черном ящике. Сможешь ли ты доказать, что он чего-то не вернет, пусть даже
за бесконечное время? Нет. Значит, это правильный алгоритм.
Re[10]: [Haskell] Найти все конечные подпоследовательности
От: deniok Россия  
Дата: 08.10.09 20:28
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>Здравствуйте, nikov, Вы писали:


Q>>>Не очень существенное замечание, поскольку требования вернуть любую наперед заданную последовательность в задаче нет.


N>>В условии есть слово "всех". Очевидно, что предложенный тобой алгоритм никогда не вернет некоторые из конечных последовательностей.


Q>Это очевидно, если признавать операции с бесконечностью. А теперь представим, что я выдал этот

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


Но и ты не сможешь опровергнуть утверждение, что этот алгоритм выдает только одноэлементные последовательности (не решая, тем самым, задачу). Утверждения о черных ящиках они такие
Re[10]: [Haskell] Найти все конечные подпоследовательности
От: nikov США http://www.linkedin.com/in/nikov
Дата: 08.10.09 20:31
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>А теперь представим, что я выдал этот

Q>алгоритм тебе в черном ящике. Сможешь ли ты доказать, что он чего-то не вернет, пусть даже
Q>за бесконечное время? Нет.

Если у меня нет возможности анализировать код алгоритма, а только его поведение, то про очень многие алгоритмы нельзя доказать, что они неправильные. Например

subs = subs


А если еще запретить смотреть на результаты, так и вообще...
Re[11]: [Haskell] Найти все конечные подпоследовательности
От: Quintanar Россия  
Дата: 08.10.09 20:38
Оценка:
Здравствуйте, deniok, Вы писали:

D>Но и ты не сможешь опровергнуть утверждение, что этот алгоритм выдает только одноэлементные последовательности (не решая, тем самым, задачу). Утверждения о черных ящиках они такие


Я не должен ничего опровергать. Я утверждаю, что мой алгоритм решает поставленную задачу. Конструктивного
способа доказать обратное нет (или пока не привели такое). А доказательства оперирующие бесконечностью я
не принимаю, ведь мы находимся в мире алгоритмов
Я бы даже сказал, что моя программа намного лучше, поскольку она потребляет меньше ресурсов
и более короткая и понятная.
Re[12]: [Haskell] Найти все конечные подпоследовательности
От: deniok Россия  
Дата: 08.10.09 20:44
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>Здравствуйте, deniok, Вы писали:


D>>Но и ты не сможешь опровергнуть утверждение, что этот алгоритм выдает только одноэлементные последовательности (не решая, тем самым, задачу). Утверждения о черных ящиках они такие


Q>Я не должен ничего опровергать. Я утверждаю, что мой алгоритм решает поставленную задачу.


А я утверждаю, что он решает другую, несовместимую задачу (выдача одноэлементных последовательностей).
Для проверки мы запускаем его и видим, что мое утверждение столь же обосновано, сколь твое
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.