У меня есть следующий код. Я хочу знать, можно ли его оптимизировать, чтобы он работал быстрее.Haskell: Можно ли оптимизировать этот код?
Я хотел решить его с помощью SegmentTree
, но я не очень хорошо разбираюсь в Haskell, поэтому я взял следующий список (недревесный) подход.
-- Program execution begins here
main :: IO()
main = do
_ <- getLine
arr <- map (read :: String -> Integer) . words <$> getLine
queryList <- readData
let queries = map (read :: String -> Integer) queryList
putStrLn ""
mapM_ print $ compute queries arr
-- Construct a sublist
sublist :: Integer -> Integer -> [Integer] -> [Integer]
sublist start end list = take (fromInteger end - fromInteger start) . drop (fromInteger start) $ list
-- Calculate the resulting list
compute :: [Integer] -> [Integer] -> [Integer]
compute [_] [_] = []
compute [_] [] = []
compute [_] (_:_) = []
compute [] (_:_) = []
compute [] [] = []
compute (x1:x2:xs) list = result : compute xs list where
result = frequency $ sublist x1 x2 list
-- Read query list, end at terminating condition
readData :: IO [String]
readData = do
x <- getLine
if x == "0"
then return []
else do xs <- readData
return (words x ++ xs)
-- Return count of the most frequent element in a list
frequency :: [Integer] -> Integer
frequency list = toInteger (snd $ maximumBy (compare `on` snd) counts) where
counts = nub [(element, count) | element <- list, let count = length (filter (element ==) list)]
Thanks.
Не могли бы вы объяснить код, пожалуйста? Спасибо –
@ ZubinKadva Вы можете убедить меня, что это стоит моего времени, потратив немного времени на то, чтобы попытаться понять это (возможно, термины Googling, которые вы не знаете), а затем приготовить вопрос, который определяет, где вы застряли в этом процессе , Вам также может понравиться почтенный [Как задавать вопросы Smart Way] (http://www.catb.org/~esr/faqs/smart-questions.html), особенно [Если вы не понимаете ...] (http://www.catb.org/~esr/faqs/smart-questions.html#lesser) и [четко о вашем вопросе] (http://www.catb.org/~esr/faqs/smart- questions.html # явные). –