Расскажите нам о том, что вы узнали на этой неделе.

Все начинает щелкать! В течение последних двух месяцев или около того я чувствовал себя очень потерянным, сбитым с толку, напряженным, сбитым с толку, потерянным, обеспокоенным, потерянным, сбитым с толку, сбитым с толку… На этой неделе все начало обретать смысл! Миллионы информации, которую я собирал, складываются воедино, и я начинаю думать как программист :)))))

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

Плюсы. Неизменяемые объекты полезны, потому что они по своей сути потокобезопасны. Они просты для понимания и обеспечивают более высокий уровень безопасности, чем изменяемые объекты.

Минусы: эффективность использования пространства является важным фактором, и поэтому такие языки, как JS, по умолчанию используют изменяемые объекты и массивы. Неэффективно создавать новую копию каждый раз, когда вы вносите изменения. Кроме того, поскольку JS по умолчанию использует изменчивость, использование неизменяемых объектов может быть неуклюжим, поскольку вам нужно вытащить библиотеку и вручную сделать все возможное, чтобы сделать это.

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

Чтобы добиться неизменности массива, объекта или любого другого типа, вам нужно выполнить глубокое клонирование или просто использовать библиотеку, например immutable.js, разработанную Facebook.

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

Алгоритм «разделяй и властвуй» работает путем рекурсивного разбиения проблемы на две или более подзадачи того же или связанного типа, пока они не станут достаточно простыми для непосредственного решения. Затем решения подзадач объединяются, чтобы дать решение исходной проблемы.

Разделяй и властвуй — это мощный инструмент для решения концептуально сложных проблем: все, что для этого требуется, — это способ разбить проблему на подзадачи, решить тривиальные случаи и объединить подзадачи с исходной проблемой. Точно так же для уменьшения и завоевания требуется только свести задачу к одной меньшей задаче, такой как классическая головоломка «Ханойская башня», которая сводит перемещение башни высотой n к перемещению башни высотой n. - 1.

(https://en.wikipedia.org/wiki/Разделяй-и-властвуй_алгоритм#Решение_трудных_проблем)

Как работают сортировка вставками, пирамидальная сортировка, быстрая сортировка и сортировка слиянием?

Сортировка вставками повторяется, потребляя один входной элемент при каждом повторении и увеличивая отсортированный выходной список. На каждой итерации сортировка вставками удаляет один элемент из входных данных, находит место, которому он принадлежит в отсортированном списке, и вставляет его туда. Это повторяется до тех пор, пока не останется входных элементов.

Сортировка обычно выполняется на месте, путем повторения массива, увеличения отсортированного списка за ним. В каждой позиции массива он сравнивает значение с наибольшим значением в отсортированном списке (которое оказывается рядом с ним в предыдущей проверенной позиции массива). Если больше, он оставляет элемент на месте и переходит к следующему. Если меньше, он находит правильную позицию в отсортированном списке, сдвигает все большие значения вверх, чтобы образовать пробел, и вставляет в эту правильную позицию.

Heapsort – это алгоритм сортировки на основе сравнения. Heapsort можно рассматривать как улучшенную сортировку выбором: как и этот алгоритм, он делит входные данные на отсортированную и несортированную области и итеративно сжимает несортированную область, извлекая самый большой элемент и перемещая его в отсортированную область.

Быстрая сортировка — это сортировка сравнением, то есть она может сортировать элементы любого типа, для которых определено отношение «меньше чем» (формально общий порядок). В эффективных реализациях это нестабильная сортировка, что означает, что относительный порядок одинаковых элементов сортировки не сохраняется. Быстрая сортировка может работать с массивом на месте, требуя небольшого дополнительного объема памяти для выполнения сортировки. Она очень похожа на сортировку выбором, за исключением того, что она не всегда выбирает наихудший раздел.

Сортировка слиянием – это эффективный алгоритм сортировки общего назначения на основе сравнения. Большинство реализаций производят стабильную сортировку, что означает, что порядок одинаковых элементов на входе и выходе одинаков. Сортировка слиянием — это алгоритм «разделяй и властвуй».

Концептуально сортировка слиянием работает следующим образом:

  1. Разделите несортированный список на n подсписков, каждый из которых содержит один элемент (список из одного элемента считается отсортированным).
  2. Неоднократно объединяйте подсписки для создания новых отсортированных подсписков, пока не останется только один подсписок. Это будет отсортированный список.

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

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

Временная сложность быстрой сортировки составляет O(n log n) в лучшем случае, O(n log n) в среднем случае и O(n²) в худшем случае. Но поскольку он обеспечивает наилучшую производительность в среднем случае для большинства входных данных, быстрая сортировка обычно считается «самым быстрым» алгоритмом сортировки. В конце концов, каким бы ни был наилучший алгоритм сортировки, он зависит от входных данных.

Алгоритм пирамидальной сортировки имеет временную сложность O(n log n).

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

Изменяемый объект — это объект, состояние которого можно изменить после его создания. Неизменяемый объект — это объект, состояние которого нельзя изменить после его создания.

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

Числа и строки неизменяемы.