Giter VIP home page Giter VIP logo

nsu_modern_programming_methods's Introduction

Лабораторные работы по дисциплине "Cовременные методы программирования" на ФИТ, НГУ

1. Базовые операции над структурами данных

Общее условие: Задан набор символов и число n. Опишите функцию, которая возвращает список всех строк длины n, состоящих из этих символов и не содержащих двух одинаковых символов, идущих подряд.

Пример: Для символов 'а', 'b', 'c' и n=2 результат должен быть ("ab" "ac" "ba" "bc" "ca" "cb") с точностью до перестановки.

  • 1.1. Решите задачу с помощью элементарных операций над последовательностями и рекурсии
  • 1.2. Перепишите программу 1.1. так, чтобы все рекурсивные вызовы были хвостовыми
  • 1.3. Определить функции my-map и my-filter, аналогичные map (для одного списка) и filter, выразив их через reduce и базовые операции над списками (cons, first, concat и т.п.)
  • 1.4. Решите задачу с помощью элементарных операций над последовательностями и функционалов map/reduce/filter

2. Численное интегрирование

Общее условие:

Реализовать функцию (оператор), принимающую аргументом функцию от одной переменной f и возвращающую функцию одной переменной, вычисляющую (численно) выражение:

alt text

Можно использовать метод трапеций с постоянным шагом.

При оптимизации исходить из того, что полученная первообразная будет использоваться для построения графика (т.е. вызываться многократно в разных точках)

  • 2.1. Оптимизируйте функцию с помощью мемоизации
  • 2.2. Оптимизируйте функцию с помощью бесконечной последовательности частичных решений

3. Параллельная обработка последовательностей

  • 3.1. Реализуйте параллельный вариант filter (не обязательно ленивый) с помощью future. Параллельная обработка должна производиться блоками по заданному числу элементов. Размер блоков следует вычислять вручную, без использования готовых функций, таких как partition (для разделения последовательности следует использовать take и drop). Продемонстрируйте прирост производительности в сравнении с обычным фильтром.
  • 3.2. Реализуйте ленивый параллельный filter, который должен работать в том числе с бесконечными потоками. Продемонстрируйте прирост производительности в сравнении с обычным фильтром.

4. ДНФ

По аналогии с задачей дифференцирования реализовать представление символьных булевых выражений с операциями конъюнкции, дизъюнкции отрицания, импликации.

Выражения могут включать как булевы константы, так и переменные. Реализовать подстановку значения переменной в выражение с его приведением к ДНФ. Обеспечить расширяемость для новых операций (исключающее ИЛИ, стрелка Пирса и пр.)

Код должен быть покрыт тестами, API документирован.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.