<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>CS on Georgiy Kuzora</title>
    <link>https://gkuzora.ru/tags/cs/</link>
    <description>Recent content in CS on Georgiy Kuzora</description>
    <generator>Hugo</generator>
    <language>ru-ru</language>
    <copyright>© [Georgiy Kuzora](https://github.com/GeorgeKuzora/my_hugo_site)</copyright>
    <lastBuildDate>Mon, 06 Nov 2023 10:16:01 +0300</lastBuildDate>
    <atom:link href="https://gkuzora.ru/tags/cs/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Динамическое программирование</title>
      <link>https://gkuzora.ru/posts/dynamic-programming/</link>
      <pubDate>Mon, 06 Nov 2023 10:16:01 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/dynamic-programming/</guid>
      <description>&lt;h2 id=&#34;что-такое-динамическое-программирование&#34;&gt;Что такое динамическое программирование&lt;/h2&gt;&#xA;&lt;p&gt;Динамическое программирование – это методика разработки алгоритмов, которая предполагает разделение задачи на несколько этапов или шагов. После этого вычисляется решение для каждого шага по отдельности. Затем, используя результаты этих отдельных решений, мы определяем общее решение. Этот процесс близок к использованию рекурсии и принципу &amp;ldquo;разделяй и властвуй&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Однако, в отличие от обычной рекурсии, динамическое программирование подразумевает сохранение результатов решения подзадач. Это делается для того, чтобы избежать повторного вычисления уже известных результатов, если они потребуются на последующих этапах. Такая оптимизация позволяет снизить временную сложность задачи с экспоненциального уровня до полиномиального.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Сортировка Шелла</title>
      <link>https://gkuzora.ru/posts/shell-sort/</link>
      <pubDate>Fri, 02 Jun 2023 12:59:24 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/shell-sort/</guid>
      <description>&lt;h2 id=&#34;что-такое-сортировка-шелла&#34;&gt;Что такое сортировка Шелла&lt;/h2&gt;&#xA;&lt;p&gt;Сортировка Шелла - один из самых известных алгоритмов сортировки. Этот алгоритм был разработан в 1959 году американским математиком Дональдом Шеллом. Сортировка Шелла является усовершенствованным вариантом сортировки вставками и является более эффективной для больших объемов данных.&#xA;Принцип работы сортировки Шелла заключается в разбиении массива на подмассивы и последующей сортировке каждого подмассива методом вставки. При этом размер подмассивов уменьшается на каждой итерации сортировки. На первой итерации размер подмассива равен &lt;code&gt;n/2&lt;/code&gt;, на второй - &lt;code&gt;n/4,&lt;/code&gt; на третьей - &lt;code&gt;n/8&lt;/code&gt; и т.д. После того, как размер подмассива становится равным единице, происходит окончательная сортировка всего массива методом вставки.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Сортировка слиянием</title>
      <link>https://gkuzora.ru/posts/merge-sort/</link>
      <pubDate>Sat, 27 May 2023 13:58:39 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/merge-sort/</guid>
      <description>&lt;h2 id=&#34;что-такое-быстрая-сортировка&#34;&gt;Что такое быстрая сортировка&lt;/h2&gt;&#xA;&lt;p&gt;Пузырьковая сортировка, сортировка вставками или сортировка выбором - это медленные виды сортировок. Скорость их выполнения &lt;code&gt;O(N^2)&lt;/code&gt;.&#xA;Сортировка слиянием - это вид быстрой сортировки. Скорость ее выполнения равна &lt;code&gt;O(logN*N^2)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;как-работает-сортировка-слиянием&#34;&gt;Как работает сортировка слиянием&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;diagram.png&#34; alt=&#34;Принцип работы сортировки слиянием&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;деление-массива-на-части&#34;&gt;Деление массива на части&lt;/h3&gt;&#xA;&lt;p&gt;Сортировка слиянием использует принцип деления массива на секции. Деление происходит по индексу. В качестве точки деления берется индекс середины массива. Затем для каждой из получившихся секций также происходит разделение по срединному индексу.&#xA;Деление продолжается до тех пор, когда длина секций массива станет равна 1. Секция длины 1 - это отсортированный массив.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пузырьковая сортировка</title>
      <link>https://gkuzora.ru/posts/bubble-sort/</link>
      <pubDate>Sun, 14 May 2023 14:23:50 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/bubble-sort/</guid>
      <description>&lt;h2 id=&#34;описание&#34;&gt;Описание&lt;/h2&gt;&#xA;&lt;p&gt;Метод сортировки пузырьком основан на попарном сравнении соседних элементов в массиве.&#xA;При каждом из проходов каждый из элементов попарно сравниваются с следующим из ним элементом в массиве. При сравнении, если текущий элемент больше следующего, то эти элементы меняются местами.&#xA;Проходы выполняют для всех элементов в массиве, либо пока все элементы не будут отсортированы.&lt;/p&gt;&#xA;&lt;h2 id=&#34;временная-сложность-алгоритма&#34;&gt;Временная сложность алгоритма&lt;/h2&gt;&#xA;&lt;p&gt;В худшем случае выполняется &lt;code&gt;N&lt;/code&gt; проходов. В каждом проходе в худшем случае выполняется &lt;code&gt;N-1&lt;/code&gt; сравнений.&#xA;Возможно оптимизировать количество сравнений в каждом проходе. После каждого прохода, в конце неотсортированной части массива оказывается максимальное значение в неотсортированной части. Таким образом на каждом из следующих проходов можно сократить количество сравнений на один.&#xA;С учетом оптимизации временная сложность алгоритма будет равна &lt;code&gt;1/2*n^2&lt;/code&gt; - O(n^2).&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
