
Задания к лабораторным / Задания к лабораторной работе N2
.docx2. Задачи со списками
Во всех задачах требуется оценка вычислительной сложности описанных функций. Оценка сложности должна быть описана в комментариях к функции. Из числа библиотечных функций для работы со списком использовать только операцию вставки элемента в начало списка и отщепления первого элемента списка. Все остальные операции, требуемые для реализации алгоритма, должны быть описаны в том же файле.
2.1. Описать функцию concat :: [a]->[a]->[a] такую, что concat [x1..xn] [y1..ym] = [x1..xn y1..ym].
2.2. Описать функцию mix :: [a]->[a]->[a] такую, что mix [x1..xn] [y1..yn] = [x1 y1 x2 y2...xn yn].
2.3. Описать функцию f23 :: (Num a) => [a]->a такую, что f23 [x1..xn] = сумма по всем i значений (xi+1)*i .
2.4. Описать функцию, получающую по заданному списку список тех же элементов в обратном порядке.
2.5. Описать функцию, получающую по заданному списку список по следующему правилу:
порядок элементов на нечётных позициях сохраняется;
порядок элементов на чётных позициях меняется на обратный.
2.6. Аналогично 2.5. Задано число n и список. Требуется получить список, в котором:
порядок элементов на позициях, не кратных n, сохраняется;
порядок элементов на позициях, кратных n, меняется на обратный.
2.7. Описать функцию вставки заданного элемента на заданную позицию (номер) в заданном списке.
2.8. Описать функцию, формирующую список всех возможных делителей её аргумента.
2.9. Описать функцию, формирующую упорядоченный по возрастанию список всех простых делителей её аргумента.
2.10. Описать функцию, определяющую номер первого вхождения максимального элемента в список.
2.11. Описать функцию, определяющую номер последнего вхождения минимального элемента в список.
2.12. Описать функцию, определяющую число различных элементов в списке.
2.13. Описать функцию f :: [a] -> [[a]], формирующую для заданного списка список всех возможных перестановок элементов исходного списка.
2.14. Описать функцию, осуществляющую циклический сдвиг списка вправо на n позиций (n крайних справа элементов перемещается в начало списка).
2.15. Описать функцию, осуществляющую циклический сдвиг списка влево на n позиций (n крайних слева элементов перемещается в конец списка).
2.16. Сортировка. Описать алгоритм пузырьковой сортировки списка элементов произвольного типа. Порядок сортировки задаётся функцией типа f :: a -> a -> bool, возвращающей true, если элементы находятся в правильном порядке.
2.17. Сортировка. Описать алгоритм сортировки списка методом прямого выбора элемента для каждой вставки. Порядок сортировки задаётся функцией типа f :: a -> a -> bool, возвращающей true, если элементы находятся в правильном порядке.
2.18. Сортировка. Описать алгоритм сортировки списка методом прямой вставки. Порядок сортировки задаётся функцией типа f :: a -> a -> bool, возвращающей true, если элементы находятся в правильном порядке.
2.19. Сортировка. Описать алгоритм сортировки списка методом слияния двух списков (исходный список делится на два, они сортируются, после чего объединяются). Порядок сортировки задаётся функцией типа f :: a -> a -> bool, возвращающей true, если элементы находятся в правильном порядке.
2.20. Сортировка. Описать алгоритм сортировки списка методом быстрой сортировки. Порядок сортировки задаётся функцией типа f :: a -> a -> bool, возвращающей true, если элементы находятся в правильном порядке.