Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Haskell
Перезагрузить страницу Выделить метку вершины дерева, имеющую наибольшее число вхождений
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
mad1233 mad1233 вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.05.2011
По умолчанию Выделить метку вершины дерева, имеющую наибольшее число вхождений - 16.05.2011, 12:05

Хаскель вижу впервые.
Но получилось сделать 3 задания из контрольной.

А вот одну ни как немогу сделать (

Задание:
Выделить метку вершины дерева, имеющую наибольшее число вхождений.

Помогите пожалуста.
Ответить с цитированием
  (#2 (permalink)) Старый
mad1233 mad1233 вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.05.2011
По умолчанию 17.05.2011, 14:59

Вот мне предложили решение
Код:
data BinTree a = Nil
               | Node a (BinTree a) (BinTree a)
                 deriving (Eq, Show)
 
maxLabel :: (Eq a) => BinTree a -> Maybe a
maxLabel Nil = Nothing
maxLabel tree = Just ml
    where (ml, _) = foldl1 maxLabelOcc . countLabels . labels $ tree
          maxLabelOcc l1@(_, c1) l2@(_, c2) =
              if c1 > c2 then l1 else l2
 
          labels :: BinTree a -> [a]
          labels Nil = []
          labels (Node x l r) = x : labels l ++ labels r
 
          countLabels :: (Eq a) => [a] -> [(a, Int)]
          countLabels list = map cnt list
              where cnt x = (x, foldl (\acc el -> acc + if x == el then 1 else 0) 0 list)
Я его подправил, но что-то не то =(

Код:
data BinTree a = Nil  | Node a (BinTree a) (BinTree a) | Leaf a
 
maxLabel :: (Eq a) => BinTree a -> Maybe a
maxLabel Nil = Nothing
maxLabel tree = Just ml
    where (ml, _) = foldl1 maxLabelOcc . countLabels . labels $ tree
          maxLabelOcc l1@(_, c1) l2@(_, c2) =
              if c1 > c2 then l1 else l2
 
          labels :: BinTree a -> [a]
          labels Nil = []
          --labels (Leaf x) = x
          labels (Node x l r) = x : labels l ++ labels r
 
          countLabels :: (Eq a) => [a] -> [(a, Int)]
          countLabels list = map cnt list
              where cnt x = (x, foldl (\acc el -> acc + if x == el then 1 else 0) 0 list)

tree = Node "alpha" (Leaf "alpha") (Node "beta" (Leaf "gamma") (Leaf "delta"))

main = print $ maxLabel tree
помогите подправить
Ответить с цитированием
  (#3 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 18.05.2011, 21:58

Цитата:
--labels (Leaf x) = x
должно быть так:
haskell Код:
labels (Leaf x) = [x]


Don't fear the Monad
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти число вершин на n-ом уровне дерева Karamel'ka Prolog 7 23.09.2012 21:09
Определить функцию для вывода бинарного дерева на экран в виде дерева imported_Vinni Lisp 22 20.06.2011 22:34
Как узнать наименьшее и наибольшее число элементов D1zz1 Pascal 4 08.06.2011 11:37
Определить радиус и центр окружности, на которой лежит наибольшее число точек зада дашенька17 C++ Builder 4 18.05.2011 12:30
бинарные деревья, наибольшее число вхождений qwerty181 Prolog 0 19.04.2011 22:20
Определить число вхождений элемента X в список L AntonioG1988 Lisp 13 21.12.2009 16:25
Удаление элемента с заданным номером и число вхождений заданного элемента imported_Lisa_D Lisp 21 16.04.2009 15:06
Символ встречающийся в списке наибольшее число раз vad0ss Prolog 4 05.02.2009 13:47
Число входящее в строку чисел наибольшее число раз vad0ss Prolog 0 18.11.2008 23:11
Как сделать метку глобальной Regbist Assembler 1 30.05.2005 13:56
Число вхождений подтерма в терм imported_Bob Prolog 29 17.02.2005 20:46
Как выделить в Delphi в таблице выделить необходимую строку real Delphi 2 19.08.2003 15:47



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов