Чему я научился на этой неделе?

Алгоритмы сортировки: пузырьковая, вставка, слияние и быстрая сортировка.

Функции высшего порядка: .map(), .reduce() и .filter().

Javascripting.js

Чтобы убедиться, что мы укрепили наше понимание программирования и Javascript как языка кодирования, вы собираетесь установить Javascripting.js и работать над каждой из задач в программе.

Каковы плюсы и минусы неизменности?

Неизменяемость — это очень широко используемая концепция в языках функционального программирования, где значения переменных не изменяются при назначении. Это позволяет упростить администрирование состояния приложения за счет уменьшения количества общих переменных.
Как мы увидим, неизменяемые объекты делают более эффективными фреймворки MVC. такие как React и AngularJS. По этой же причине в сообществе Javascript все чаще и чаще понимают слово «неизменяемость». В этой статье мы рассмотрим плюсы и минусы использования неизменяемых структур данных в коде Javascript.

https://blog.invivoo.com/immutability-and-javascript/

Как добиться неизменности в собственном коде?

Стать неизменным

Вместо того, чтобы передавать объект и изменять его, лучше создать совершенно новый объект:

const person = {
  name: 'John',
  age: 28
}
const newPerson = Object.assign({}, person, {
  age: 30
})
console.log(newPerson === person) // false
console.log(person) // { name: 'John', age: 28 }
console.log(newPerson) // { name: 'John', age: 30 }

Object.assign — это функция ES6, которая принимает объекты в качестве параметров. Он объединит все объекты, которые вы ему передадите, в первый объект. Вам, наверное, интересно, почему первым параметром является пустой объект {}. Если бы первым параметром был «человек», мы бы все равно мутировали человека. Если бы это было { age: 30 }, мы бы снова перезаписали 30 на 28, потому что это будет после. Это решение работает, мы сохранили человека нетронутым, мы относились к нему как к неизменяемому!

https://wecodetheweb.com/2016/02/12/immutable-javascript-using-es6-and-beyond/

Что такое алгоритмы «разделяй и властвуй»? любые общие примеры типов проблем, где этот подход может быть использован? Обсудите лучшее, среднее и худшее время и сложность памяти.

  1. Разделить: разбить заданную проблему на подзадачи одного типа.
    2. Победа: Рекурсивное решение этих подзадач
    3. Объединить: правильно объединить ответы.

1) Двоичный поиск — алгоритм поиска. На каждом шаге алгоритм сравнивает входной элемент x со значением среднего элемента в массиве. Если значения совпадают, вернуть индекс середины. В противном случае, если x меньше среднего элемента, алгоритм повторяется для левой части среднего элемента, иначе повторяется для правой части среднего элемента.

2) Быстрая сортировка — это алгоритм сортировки. Алгоритм выбирает опорный элемент, переупорядочивает элементы массива таким образом, что все элементы, меньшие, чем выбранный опорный элемент, перемещаются в левую часть опорного элемента, а все большие элементы перемещаются в правую сторону. Наконец, алгоритм рекурсивно сортирует подмассивы слева и справа от опорного элемента.

3) Сортировка слиянием также является алгоритмом сортировки. Алгоритм делит массив на две половины, рекурсивно сортирует их и, наконец, объединяет две отсортированные половины.

подробнее об этом удар ссылки.

https://www.geeksforgeeks.org/divide-and-conquer-algorithm-introduction/

Как работают сортировка вставками и Heapsort?

Сортировка кучей имеет временную сложность алгоритма «разделяй и властвуй» (например, быстрой сортировки), но она не ведет себя как алгоритм «разделяй и властвуй».

Поскольку данные разбиваются на «отсортированные» и «несортированные» разделы, это своего рода сортировка выбором. Он использует структуру данных кучи для более эффективного выбора минимального элемента из несортированного списка на каждом шаге. Я полагаю, из-за этого вы могли бы сказать, что это «сортировка по приоритетной очереди», но следует упомянуть, что вся операция может быть выполнена на месте, а не создавать отдельную кучу.

Сортировка кучей обычно уступает быстрой сортировке, за исключением того, что сложность быстрой сортировки в наихудшем случае составляет O(N^2) (по сравнению с наихудшим случаем сортировки кучей O(N.logN)).

Пузырьковая сортировка также является алгоритмом на месте, но считается «наивным».

Сортировка вставками — это алгоритм уменьшения (уменьшения) и завоевания. Уменьшай и властвуй — это вариант разделяй и властвуй. Данный экземпляр проблемы сводится к меньшему экземпляру той же проблемы. Этот меньший экземпляр решается, а затем решение расширяется до решения исходного экземпляра.

Сортировка вставками идеально следует этой схеме: вы сортируете подпоследовательность, укороченную на один элемент, а затем вставляете этот элемент в отсортированную подпоследовательность.

Это можно сделать рекурсивно сверху вниз или снизу вверх итеративно.

Объясните разницу между изменяемым и неизменяемым объектом.

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

Что является примером неизменяемого объекта в JavaScript?

например, ваше состояние было таким:

let state = {
    'counter': 0,
    'name': 'John',
    'age': 36
}

Если вы продолжите тот же пример, то ваш редуктор ADD должен будет вернуть что-то вроде этого

return {
    'counter': state.counter+1,
    'name': state.name,
    'age': state.age
}

https://spapas.github.io/2018/04/05/easy-immutable-objects/