Как можно составить динамику

Диаграмма с темпами роста показателей позволяет пользователю электронной таблицы Microsoft Excel отследить последние изменения и их качество. Визуальная демонстрация считается куда более наглядной, чем текстовая в виде функций, поэтому и пользуется такой популярностью. В этой статье я покажу два метода формирования соответствующей диаграммы на основе простой таблицы.

Создание таблицы с данными

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

Читайте также: Как отследить динамику роста в Microsoft Excel

Формирование таблицы для создания диаграммы темпов и динамики роста в Microsoft Excel

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

Вариант 1: Создание рекомендуемой диаграммы

Алгоритмы, присутствующие в Экселе, чаще всего корректно распознают диапазоны данных и отталкиваются от них при создании различных диаграмм. Я рекомендую воспользоваться как раз предложенным вариантом, если вы не хотите тратить время на ручную настройку графиков.

  1. Сначала выделите необходимую таблицу, затем перейдите на вкладку «Вставка».Переход на вкладку Вставка для создания диаграммы темпов и динамики роста в Microsoft Excel

  2. На ней нажмите кнопку «Рекомендуемые диаграммы».Открытие рекомендуемых графиков для создания диаграммы темпов и динамики роста в Microsoft Excel

  3. Если у вас примерно такая же таблица, появится первый рекомендуемый вариант с названием «Гистограмма с группировкой». Она вполне подойдет для того, чтобы сравнить показатели за несколько месяцев и узнать прирост или убыток в процентах.Выбор рекомендуемого варианта для создания диаграммы темпов и динамики роста в Microsoft Excel

  4. После двойного щелчка диаграмма автоматически добавляется на лист и доступна для дальнейшего взаимодействия. Как видно, практически все значения по умолчанию отображаются корректно, нужно только поменять название самой диаграммы.Добавление рекомендуемого варианта для создания диаграммы темпов и динамики роста в Microsoft Excel

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

  6. Вы увидите, что каждая точка теперь будет отмечена процентами, даже если они имеют минусовое значение. Теперь в полной мере можно получить визуальное представление о том, насколько характерной является динамика роста за конкретный промежуток времени по разным показателям.Результат использования рекомендуемого варианта для создания диаграммы темпов и динамики роста в Microsoft Excel

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

Вариант 2: Ручное создание диаграммы

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

  1. Как обычно, сначала выделите таблицу для создания диаграммы из нее, затем перейдите на вкладку «Вставка» и нажмите кнопку «Рекомендуемые диаграммы».Открытие списка графиков для создания диаграммы темпов и динамики роста в Microsoft Excel

  2. В новом окне перейдите на вкладку «Все диаграммы» и выберите последний вариант – «Комбинированная».Выбор комбинированного графика для создания диаграммы темпов и динамики роста в Microsoft Excel

  3. Если у вас есть суммы чисел для сравнения, понадобится сделать эти ряды гистограммами с накоплением, чтобы обеспечить максимально правильное отображение значений.Выбор первых гистограмм для создания диаграммы темпов и динамики роста в Microsoft Excel

  4. Сделайте это для всех рядов, а затем посмотрите, как это будет представлено на самой диаграмме. Как видно, общая сумма и соотношение для каждого месяца предельно наглядны.Результат настройки первых гистограмм для создания диаграммы темпов и динамики роста в Microsoft Excel

  5. Для динамики, которая отражается в процентах, нужно выбрать линейный график. В идеале – «График с маркерами», чтобы возле каждого значения в процентах была точка для большей наглядности.Выбор графика процентов для создания диаграммы темпов и динамики роста в Microsoft Excel

  6. Если проценты не видны так, как это показано на скриншоте ниже, поставьте напротив имени ряда галочку «Вспомогательная ось», после чего подтвердите добавление диаграммы в таблицу.Создание вспомогательной оси для создания диаграммы темпов и динамики роста в Microsoft Excel

  7. Ознакомьтесь с ней и решите, подходит ли она для отображения темпов и динамики роста. Добавление комбинированного графика для создания диаграммы темпов и динамики роста в Microsoft Excel

  8. Для отображения процентов возле каждой точки динамики нужно добавить подписи данных, выбрав соответствующий вариант в контекстном меню.Добавление подписей процентов для создания диаграммы темпов и динамики роста в Microsoft Excel

  9. На этом формирование диаграммы завершено. Она должна иметь примерно такой вид, как на следующем изображении.Результат ручной настройки для создания диаграммы темпов и динамики роста в Microsoft Excel

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

Всё, что вы хотели знать о динамическом программировании, но боялись спросить

Время на прочтение
12 мин

Количество просмотров 225K

Я был крайне удивлён, найдя мало статей про динамическое программирование (далее просто динамика) на хабре. Мне всегда казалось, что эта парадигма довольно сильно распространена, в том числе и за пределами олимпиад по программированию. Поэтому я постараюсь закрыть этот пробел своей статьёй.

# Весь код в статье написан на языке Python

Основы

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

Динамическое программирование — это когда у нас есть задача, которую непонятно как решать, и мы разбиваем ее на меньшие задачи, которые тоже непонятно как решать. (с) А. Кумок.

Чтобы успешно решить задачу динамикой нужно:
1) Состояние динамики: параметр(ы), однозначно задающие подзадачу.
2) Значения начальных состояний.
3) Переходы между состояниями: формула пересчёта.
4) Порядок пересчёта.
5) Положение ответа на задачу: иногда это сумма или, например, максимум из значений нескольких состояний.

Порядок пересчёта

Существует три порядка пересчёта:
1) Прямой порядок:
Состояния последовательно пересчитывается исходя из уже посчитанных.

2) Обратный порядок:
Обновляются все состояния, зависящие от текущего состояния.

3) Ленивая динамика:
Рекурсивная мемоизированная функция пересчёта динамики. Это что-то вроде поиска в глубину по ацикличному графу состояний, где рёбра — это зависимости между ними.

Элементарный пример: числа Фибоначчи. Состояние — номер числа.

Прямой порядок:

fib[1] = 1  # Начальные значения
fib[2] = 1  # Начальные значения
for i in range(3, n + 1):
    fib[i] = fib[i - 1] + fib[i - 2]  # Пересчёт состояния i

Обратный порядок:

fib[1] = 1  # Начальные значения
for i in range(1, n):
    fib[i + 1] += fib[i]  # Обновление состояния i + 1
    fib[i + 2] += fib[i]  # Обновление состояния i + 2

Ленивая динамика:

def get_fib(i):
    if (i <= 2):  # Начальные значения
        return 1
    if (fib[i] != -1):  # Ленивость
        return fib[i]
    fib[i] = get_fib(i - 1) + get_fib(i - 2)  # Пересчёт
    return fib[i]

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

Многомерная динамика

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

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

Пример №1: Количество СМСок

Раньше, когда у телефонов были кнопки, их клавиатуры выглядели примерно так:

Требуется подсчитать, сколько различных текстовых сообщений множно написать используя не более k нажатий на такой клавиатуре.

Решение

1) Состояние динамики: dp[n][m] — количество различных сообщений длины n, использующих m нажатий.
2) Начальное состояние: есть одно сообщение длины ноль, использующее ноль нажатий — пустое.
3) Формулы пересчёта: есть по восемь букв, для написания которых нужно одно, два и три нажатия, а так же две буквы требующие 4 нажатия.

Прямой пересчёт:

dp[n][m] = (dp[n - 1][m - 1] + dp[n - 1][m - 2] + dp[n - 1][m - 3]) * 8 + dp[n - 1][m - 4] * 2

Обратный пересчёт:

dp[n + 1][m + 1] += dp[n][m] * 8
dp[n + 1][m + 2] += dp[n][m] * 8
dp[n + 1][m + 3] += dp[n][m] * 8
dp[n + 1][m + 4] += dp[n][m] * 2

4) Порядок пересчёта:
Если писать прямым методом, то надо отдельно подумать о выходе за границу динамики, к примеру, когда мы обращаемся к dp[n - 1][m - 4], которого может не существовать при малых m. Для обхода этого можно или ставить проверки в пересчёте или записать туда нейтральные элементы (не изменяющие ответа).

При использовании обратного пересчёта всё проще: мы всегда обращаемся вперёд, так что в отрицательные элементы мы не уйдём.

5) Ответ — это сумма всех состояний.

UPD:
К сожалению, я допустил ошибку — задачу можно решить и одномерно, просто убрав из состояния длину сообщения n.
1) Состояние: dp[m] — количество различных собщений, которые можно набрать за m нажатий.
2) Начальное состояние: dp[0] = 1.
3) Формула пересчёта:

dp[m] = (dp[m - 1] + dp[m - 2] + dp[m - 3]) * 8 + dp[m - 4] * 2

4) Порядок: все три варианта можно использовать.
5) Ответ — это сумма всех состояний.

Пример №2: Конь

Шахматный конь стоит в клетке (1, 1) на доске размера N x M. Требуется подсчитать количество способов добраться до клетки (N, M) передвигаясь четырьмя типами шагов:

Решение

1) Состояние динамики: dp[i][j] — количество способов добраться до (i, j).
2) Начальное значение: В клетку (1, 1) можно добраться одним способом — ничего не делать.
3) Формула пересчёта:
Для прямого порядка:

dp[i][j] = dp[i - 2][j - 1] + dp[i - 2][j + 1] + dp[i - 1][j - 2] + dp[i + 1][j - 2]

Для обратного порядка:

dp[i + 1][j + 2] += dp[i][j]
dp[i + 2][j + 1] += dp[i][j]
dp[i - 1][j + 2] += dp[i][j]
dp[i + 2][j - 1] += dp[i][j]

4) А теперь самое интересное в этой задаче: порядок. Здесь нельзя просто взять и пройтись по строкам или по столбцам. Потому что иначе мы будем обращаться к ещё не пересчитанным состояниям при прямом порядке, и будем брать ещё недоделанные состояния при обратном подходе.

Есть два пути:
1) Придумать хороший обход.
2) Запустить ленивую динамику, пусть сама разберётся.

Если лень думать — запускаем ленивую динамику, она отлично справится с задачей.
Если не лень, то можно придумать обход наподобие такого:

Этот порядок гарантирует обработанность всех требуемых на каждом шаге клеток при прямом обходе, и обработанность текущего состояния при обратном.

5) Ответ просто лежит в dp[n][m].

Динамика и матрица переходов

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

Допустим, есть задача, которую мы уже решили динамическим программированием, например, извечные числа Фибоначчи.
Давайте немного переформулируем её. Пусть у нас есть вектор , из которого мы хотим получить вектор . Чуть-чуть раскроем формулы: . Можно заметить, что из вектора можно получить вектор путем умножения на какую-то матрицу, ведь в итоговом векторе фигурируют только сложенные переменные из первого вектора. Эту матрицу легко вывести, вот она: . Назовём её матрицей перехода.

Это значит, что если взять вектор и умножить его на матрицу перехода n - 1 раз, то получим вектор , в котором лежит fib[n] — ответ на задачу.

А теперь, зачем всё это надо. Умножение матриц обладает свойством ассоциативности, то есть (но при этом не обладает коммутативностью, что по-моему удивительно). Это свойство даёт нам право сделать так: .

Это хорошо тем, что теперь можно применить метод быстрого возведения в степень, который работает за . Итого мы сумели посчитать N-ое число Фибоначчи за логарифм арифметических операций.

А теперь пример посерьёзнее:

Пример №3: Пилообразная последовательность

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

Решение

Для начала решение без матрицы перехода:

1) Состояние динамики: dp[n][last][less] — количество пилообразных последовательностей длины n, заканчивающихся на цифру last. Причём если less == 0, то последняя цифра меньше предпоследней, а если less == 1, значит больше.
2) Начальные значения:

for last in range(10):
    dp[2][last][0] = 9 - last
    dp[2][last][1] = last

3) Пересчёт динамики:

for prev in range(10):
    if prev > last:
        dp[n][last][0] += dp[n - 1][prev][1]
    if prev < last:
        dp[n][last][1] += dp[n - 1][pref][0]

4) Порядок пересчёта: мы всегда обращаемся к предыдущей длине, так что просто пара вложенных for‘ов.
5) Ответ — это сумма dp[N][0..9][0..1].

Теперь надо придумать начальный вектор и матрицу перехода к нему. Вектор, кажется, придумывается быстро: все состояния, обозначающие длину последовательности N. Ну а матрица перехода выводится, смотря на формулы пересчёта.

Вектор и матрица перехода

Динамика по подотрезкам

Это класс динамики, в котором состояние — это границы подотрезка какого-нибудь массива. Суть в том, чтобы подсчитать ответы для подзадач, основывающихся на всех возможных подотрезках нашего массива. Обычно перебираются они в порядке увеличения длины, и пересчёт основывается, соответственно на более коротких отрезках.

Пример №4: Запаковка строки

Вот Развернутое условие. Я вкратце его перескажу:

Определим сжатую строку:
1) Строка состоящая только из букв — это сжатая строка. Разжимается она в саму себя.
2) Строка, являющаяся конкатенацией двух сжатых строк A и B. Разжимается она в конкатенацию разжатых строк A и B.
3) Строка D(X), где D — целое число, большее 1, а X — сжатая строка. Разжимается она в конкатенацию D строк, разжатых из X.
Пример: “3(2(A)2(B))C” разжимается в “AABBAABBAABBC”.

Необходимо по строке s узнать длину самой короткой сжатой строки, разжимающийся в неё.

Решение

Решается эта задача, как вы уже наверняка догадались, динамикой по подотрезкам.

1) Состояние динамики: d[l][r] — сжатая строка минимальной длины, разжимающаяся в строку s[l:r]
2) Начальные состояния: все подстроки длины один можно сжать только в них самих.
3) Пересчёт динамики:
У лучшего ответа есть какая-то последняя операция сжатия: либо это просто строка из заглавных букв, или это конкатенация двух строк, или само сжатие. Так давайте переберём все варианты и выберем лучший.

dp_len = r - l
dp[l][r] = dp_len  # Первый вариант сжатия - просто строка.

for i in range(l + 1, r):
    dp[l][r] = min(dp[l][r], dp[l][i] + dp[i][r])  # Попробовать разделить на две сжатые подстроки

for cnt in range(2, dp_len):
    if (dp_len % cnt == 0):  # Если не делится, то нет смысла пытаться разделить
        good = True
        for j in range(1, (dp_len / cnt) + 1):  # Проверка на то, что все cnt подстрок одинаковы
            good &= s[l:l + dp_len / cnt] == s[l + (dp_len / cnt) * j:l + (dp_len / cnt) * (j + 1)]
        if good:  # Попробовать разделить на cnt одинаковых подстрок и сжать
            dp[l][r] = min(dp[l][r], len(str(cnt)) + 1 + dp[l][l + dp_len / cnt] + 1)

4) Порядок пересчёта: прямой по возрастанию длины подстроки или ленивая динамика.
5) Ответ лежит в d[0][len(s)].

Пример №5: Дубы

Динамика по поддеревьям

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

Пример №6: Логическое дерево

Дано подвешенное дерево, в листьях которого записаны однобитовые числа — 0 или 1. Во всех внутренних вершинах так же записаны числа, но по следующему правилу: для каждой вершины выбрана одна из логических операций: «И» или «ИЛИ». Если это «И», то значение вершины — это логическое «И» от значений всех её детей. Если же «ИЛИ», то значение вершины — это логическое «ИЛИ» от значений всех её детей.

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

Решение

1) Состояние динамики: d[v][x] — количество операций, требуемых для получения значения x в вершине v. Если это невозможно, то значение состояния — +inf.
2) Начальные значения: для листьев, очевидно, что своё значение можно получить за ноль изменений, изменить же значение невозможно, то есть возможно, но только за +inf операций.
3) Формула пересчёта:
Если в этой вершине уже значение x, то ноль. Если нет, то есть два варианта: изменить в текущей вершине операцию или нет. Для обоих нужно найти оптимальный вариант и выбрать наилучший.

Если операция «И» и нужно получить «0», то ответ это минимум из значений d[i][0], где i — сын v.
Если операция «И» и нужно получить «1», то ответ это сумма всех значений d[i][1], где i — сын v.
Если операция «ИЛИ» и нужно получить «0», то ответ это сумма всех значений d[i][0], где i — сын v.
Если операция «ИЛИ» и нужно получить «1», то ответ это минимум из значений d[i][1], где i — сын v.

4) Порядок пересчёта: легче всего реализуется лениво — в виде поиска в глубину из корня.
5) Ответ — d[root][value[root] xor 1].

Динамика по подмножествам

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

Пример №7: Гамильтонов цикл минимального веса, или задача коммивояжера

Задан взвешенный (веса рёбер неотрицательны) граф G размера N. Найти гамильтонов цикл (цикл, проходящий по всем вершинам без самопересечений) минимального веса.

Решение

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

1) Состояние динамики: dp[mask][v] — путь минимального веса из вершины 0 в вершину v, проходящий по всем вершинам, лежащим в mask и только по ним.
2) Начальные значения: dp[1][0] = 0, все остальные состояния изначально — +inf.
3) Формула пересчёта: Если i-й бит в mask равен 1 и есть ребро из i в v, то:

dp[mask][v] = min(dp[mask][v], dp[mask - (1 << i)][i] + w[i][v])

Где w[i][v] — вес ребра из i в v.
4) Порядок пересчёта: самый простой и удобный способ — это написать ленивую динамику, но можно поизвращаться и написать перебор масок в порядке увеличения количества единичных битов в ней.
5) Ответ лежит в d[(1 << N) - 1][0].

Динамика по профилю

Классическими задачами, решающимися динамикой по профилю, являются задачи на замощение поля какими-нибудь фигурами. Причём спрашиваться могут разные вещи, например, количество способов замощения или замощение минимальным количеством фигур.

Эти задачи можно решить полным перебором за , где a — количество вариантов замощения одной клетки. Динамика по профилю же оптимизирует время по одной из размерностей до линейной, оставив от себя в экспоненте только коэффициент. Получится что-то такое: .

Профиль — это k (зачастую один) столбцов, являющиеся границей между уже замощённой частью и ещё не замощённой. Эта граница заполнена только частично. Очень часто является частью состояния динамики.

Почти всегда состояние — это профиль и то, где этот профиль. А переход увеличивает это местоположение на один. Узнать, можно ли перейти из одного профиля в другой можно за линейное от размера профиля время. Это можно проверять каждый раз во время пересчёта, но можно и предподсчитать. Предподсчитывать будем двумерный массив can[mask][next_mask] — можно ли от одной маски перейти к другой, положив несколько фигурок, увеличив положение профиля на один. Если предподсчитывать, то времени на выполнение потребуется меньше, а памяти — больше.

Пример №8: Замощение доминошками

Найти количество способов замостить таблицу N x M с помощью доминошек размерами 1 x 2 и 2 x 1.

Решение

Здесь профиль — это один столбец. Хранить его удобно в виде двоичной маски: 0 — не замощенная клетка столбца, 1 — замощенная. То есть всего профилей .

0) Предподсчёт (опционально): перебрать все пары профилей и проверить, что из одного можно перейти в другой. В этой задаче это проверяется так:

Если в первом профиле на очередном месте стоит 1, значит во втором обязательно должен стоять 0, так как мы не сможем замостить эту клетку никакой фигуркой.

Если в первом профиле на очередном месте стоит 0, то есть два варианта — или во втором 0 или 1.
Если 0, это значит, что мы обязаны положить вертикальную доминошку, а значит следующую клетку можно рассматривать как 1. Если 1, то мы ставим вертикальную доминошку и переходим к следующей клетке.

Примеры переходов (из верхнего профиля можно перейти в нижние и только в них):

После этого сохранить всё в массив can[mask][next_mask]1, если можно перейти, 0 — если нельзя.
1) Состояние динамики: dp[pos][mask] — количество полных замощений первых pos - 1 столбцов с профилем mask.
2) Начальное состояние: dp[0][0] = 1 — левая граница поля — прямая стенка.
3) Формула пересчёта:

dp[pos][mask] += dp[pos - 1][next_mask] * can[mask][next_mask]

4) Порядок обхода — в порядке увеличения pos.
5) Ответ лежит в dp[pos][0].

Полученная асимптотика — .

Динамика по изломанному профилю

Это очень сильная оптимизация динамики по профилю. Здесь профиль — это не только маска, но ещё и место излома. Выглядит это так:

Теперь, после добавления излома в профиль, можно переходить к следующему состоянию, добавляя всего одну фигурку, накрывающую левую клетку излома. То есть увеличением числа состояний в N раз (надо помнить, где место излома) мы сократили число переходов из одного состояния в другое с до . Асимптотика улучшилась с до .

Переходы в динамике по изломанному профилю на примере задачи про замощение доминошками (пример №8):

Восстановление ответа

Иногда бывает, что просто знать какую-то характеристику лучшего ответа недостаточно. Например, в задаче «Запаковка строки» (пример №4) мы в итоге получаем только длину самой короткой сжатой строки, но, скорее всего, нам нужна не её длина, а сама строка. В таком случае надо восстановить ответ.

В каждой задаче свой способ восстановления ответа, но самые распространенные:

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

Небольшие оптимизации

Память

Зачастую в динамике можно встретить задачу, в которой состояние требует быть посчитанными не очень большое количество других состояний. Например, при подсчёте чисел Фибоначчи мы используем только два последних, а к предыдущим уже никогда не обратимся. Значит, можно про них забыть, то есть не хранить в памяти. Иногда это улучшает асимптотическую оценку по памяти. Этим приёмом можно воспользоваться в примерах №1, №2, №3 (в решении без матрицы перехода), №7 и №8. Правда, этим никак не получится воспользоваться, если порядок обхода — ленивая динамика.

Время

Иногда бывает так, что можно улучшить асимптотическое время, используя какую-нибудь структуру данных. К примеру, в алгоритме Дейкстры можно воспользоваться очередью с приоритетами для изменения асимптотического времени.

Замена состояния

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

Пример №9: Разложение числа

Требуется найти количество разложений числа N на различные слагаемые. Например, если N = 7, то таких разложений 5:

  • 7
  • 3 + 4
  • 2 + 5
  • 1 + 7
  • 1 + 2 + 4

Два решения с различными состояниями

Решение №1:

1) Состояние динамики: dp[n][k] — количество разложений числа n на числа, меньшие или равные k. Параметр k нужен, чтобы брать всегда только большие числа, чем уже имеющиеся.
2) Начальные значения: dp[1][1] = 1, dp[1][i] = 0.
3) Формула пересчёта:

for last_summand in range(1, k + 1):
    dp[n][k] += dp[n - last_summand][last_summand]

4) Порядок: прямой, в порядке увеличения n.
5) Ответ — сумма dp[N][1..N].

Состояний: , переходов: . Асимптотика: .

Решение №2:

1) Поменяем состояние. Теперь dp[n][k] — это количество разложений числа n на k различных чисел. Казалось бы незачем, но сейчас будет понятно.
2) Начальные значения: dp[1][1] = 1, dp[1][i] = 0.
3) Формула пересчёта:

dp[n][k] = dp[n - k][k] + dp[n - k][k - 1]

Теперь надо пояснить, что значит эта формула. Все состояния можно получить (причём единственным способом) делая поочерёдно два действия:

  • Все уже имеющиеся числа увеличить на 1.
  • Все уже имеющиеся числа увеличить на 1. Добавить число 1 в разложение.

Чтобы понять, почему это так можно посмотреть на диаграммы Юнга:


Строки здесь обозначают слагаемые.

Первое решение последовательно добавляет по одной строчке внизу таблицы, а второе — по одному столбцу слева таблицы. Вариантов размера следующей строчки много — главное, чтобы она была больше предыдущей, а столбцов — только два: такой же как предыдущий и на единичку больше.

4) Порядок пересчёта: прямой, в порядке увеличения n.

Невооруженным взглядом кажется, что у этого решения асимптотика , ведь есть два измерения в состоянии и переходов. Но это не так, ведь второй параметр — k ограничен сверху не числом N, а формулой (сумма чисел от 1 до k меньше или равна разлагаемого числа). Из этой формулы видно, что количество состояний .

5) Ответ — это сумма dp[N][1..k_max].

Асимптотика: .

Заключение

Основным источником была голова, а туда информация попала с лекций в Летней Компьютерной Школе (для школьников), а также кружка Андрея Станкевича и спецкурса Михаила Дворкина (darnley).

Спасибо за внимание, надеюсь эта статья кому-нибудь пригодится! Хотя мне уже пригодилась — оказывается, написание статьи это хороший способ всё вспомнить.

Прежде чем вы, как автор, решитесь писать экшен, задумайтесь, нужен ли он именно вашему произведению. Нет ничего хуже драки ради драки. Динамические сцены должны двигать сюжет, показывать героев с неожиданной стороны, раскрывать их характер. Если вы пишете о домохозяйке из пригорода, одна ее сцена столкновения с воришкой может многое поведать, но если ваш герой — зек и вообще «редиска» описывать подробно каждый его конфликт с друзьями и врагами нецелесообразно. Читателю станет скучно и он не доберется до финального боя, ради которого все и писалось. Ведь именно в финальной схватке раскрывается идея, меняются характеры, происходит катарсис читателя. Хорошая книга пишется и читается именно ради финала.

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

1. Пишите кратко. Экшен не любит пространных рассуждений о вечном во время бомбардировки, или описаний содержимого походного рюкзака, если герою нужно срочно найти там веревку, чтобы спасти тонущего в болоте товарища. Пишите только по делу, только то, что делает и видит герой. То же относится к диалогам: длинные пафосные диалоги в экшен-сценах неуместны.
2. Избегайте большого количества наречий и прилагательных. «Коралловые рассветы» и «гранатовые закаты» хороши для описательных или эпичных сцен, когда нужно показать размах и грандиозность. В динамике же лишние слова будут только отвлекать. Например «часто», «иногда», «побольше» и пр. не несут конкретики без уточнения (насколько часто?), поэтому сбивают и создают ощущение размытой картинки.
3. Избегайте деепричастных оборотов.
«Рукой, схватившись за голову, которая болела, ладонь нащупала дырку».

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

Согласитесь, тяжело, а, порой, и комично воспринимается. В данных примерах добавляется несогласованность и речевая избыточность.

4. Добивайтесь эффекта быстрого времени. Динамика должна и читаться динамично, иначе она превратится в фарс.

« …залез на карниз и начал думать, как бы ему спуститься. Вдруг часы запищали. Х. обернулся и увидел огонь, приближавшийся к нему с невероятной скоростью. Перед огнём летели различного рода предметы и куски арматуры».

Не самое удачное описание взрыва. Честно говоря, даже не сразу понятно, что это взрыв.

5. Пишите точно. Используйте слова, несущие ясный смысл, избегайте спорной семантики и бессмысленной мути, вроде «туда» «этого», «на ту», «на эту», «что-нибудь», «куда-нибудь», иначе может получится так:

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

Прямо во время перестрелки и начал, ага.

6. Емкая деталь. Излишняя детализация динамической сцены вряд ли сыграет вам на руку, но и сухое описание не поможет добиться эффекта. Используйте детали, которые емко, одним-двумя словами, выразят концентрированный смысл: ворон может каркнуть, озвучивая смерть; одинокая босоножка на обочине; плач издалека. Слово «смерть» или «кровь» можно вообще не упоминать в тексте, используя метафоры, аллюзии, идиомы, или авторские находки — оксюмороны или стилистические комбинации («горячий снег», «бесконечный тупик», «сладкая горечь» или «ядовитый мёд», «найденная потеря», «сладостные мучения»).

7. Избегайте штампов. Когда одно и то же слово или выражение постоянно применяется для одного и того же, оно теряет смысл и превращается в бессмысленный набор знаков или звуков:

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

Давайте обратимся к примерам в литературе.

  1. Борис Акунин «Нефритовые четки». Действие происходит на Диком Западе.

«Ещё с полминуты карты шлёпали по столу при полном молчании. Вдруг негр со звучным именем тронул усатого бретёра за плечо:

— Эй, белый герой, что это у тебя в рукаве топорщится?

За столом все замерли. Шулер медленно повернулся.

— Хочешь заглянуть ко мне в рукав, смуглявый? Сначала придётся заглянуть ко мне под мышку.

Он распахнул сюртук, и стало видно кобуру с револьвером.

— Белый герой, я задал тебе вопрос, — подавив зевок, сказал Уошингтон Рид. — На него надо ответить.

Теперь стало тихо и возле стойки. Пастухи заметили, что у стола происходит нечто интересное, и все оборотились в эту сторону.

Бретёр оскалил жёлтые зубы в нехорошей улыбке и спросил, не сводя глаз с чернокожего:

— Какой в Вайоминге штраф, если пристрелишь назойливого нигера?

Эту породу людей Фандорин хорошо знал, они во всех странах одинаковы. Сейчас произойдёт убийство. Эраст Петрович поднялся на ноги, готовый вмешаться. Никто на него не смотрел — все взоры были обращены на шулера и негра.

— У нас в Вайоминге все равны, мистер, — громко, на публику, объявил Радди. — Что чёрного пристрелить, что белого – все одно. У нас даже бабы голосуют, слыхали?

Пастухи заржали — очевидно, женское участие в выборах было тут излюбленной темой для шуток.

Довольный выпавшей ему ролью, Радди провозгласил:

— У меня вот тут доллар. — Он показал всем монету. — Сейчас я его подброшу. Как ударится об стол, можно палить.

Из-за стола всех как ветром сдуло, остался сидеть лишь усатый бретёр. Поразительная вещь: позади него не было ни одного человека, но те, кто стоял за спиной у негра, на линии прямого выстрела, и не подумали отойти, а многие ещё и ухмылялись.

Эраст Петрович опустился на стул и раскурил сигару. Кажется, в его защите здесь не нуждались.

Серебряный кружок, тускло блеснув, взлетел вверх и звонко ударился ребром о горку остальных монет. Рука бретёра рванулась под сюртук — и замерла, будто скованная внезапным параличом. Прямо в нос заезжему искателю удачи глядело дуло старого, поцарапанного «кольта».

Фандорин не успел и разглядеть, как Уошингтон Рид выхватил оружие из кобуры. Такая скорость сделала бы честь и опытному японскому фехтовальщику, обнажающему катану.

— Какой белый герой. Совсем белый, — сказал негр, глядя в побледневшее лицо шулера».

Деталей много: монета ударяется ребром, да ещё блестит по пути; дуло старого, поцарапанного «Кольта»; словосочетание «рука бретёра» привлекает внимание именно там, где нужно.

2. Алексей Пехов «Страж»

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

Я швырнул ей вслед призрачным пламенем, превратил в комок огня, и она дымящейся, но всё ещё существующей в этой реальности грудой упала на мертвецов. В дальнем углу что-то завыло, зачавкало… я, не глядя, кинул туда две фигуры, подбежал к бабке, опрокинув таз с несвежей кровью, и воткнул в неё кинжал.

В висках заломило, зрение раздвоилось, но я тут же взял себя в руки. Главную тварь я убил, теперь осталась мелочь. Впрочем, «мелочи» оказалось немало. Мои чары высветили их из мрака, и я увидел бледные фосфоресцирующие тела. Трое походили на больших собак с львиными пастями, и две оказались стройными девушками с крюками вместо рук и тёмно-жёлтыми лицами. Ниляды и лакальщицы.

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

Я ругнулся, чиркнул кинжалом по спине распростёртого под ногами трупа, рисуя фигуру «северного камня».

— Убирайтесь отсюда! — успел я крикнуть мало что понимающим лекарям.»

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

3. Обратимся к иностранным авторам.

Ден Симмонс «Падение Гипериона».

«Полковник Кассад с криком бросился на Шрайка. Сюрреалистический ландшафт вне времени (аскетическая пластмассовая декорация из фарса о Долине Гробниц, застывшая в вязком желе, именуемом здесь воздух), казалось, всколыхнулся, отозвавшись на неистовый порыв Кассада.

Секунду назад Шрайки заполняли собой весь мир, как в зеркальном зале: всюду полчища Шрайков, от края до края мертвой зоны. Но после вскрика Кассада они слились в одно чудище, и оно сдвинулось с места. Четыре его руки вытянулись, готовые заключить полковника в объятия клинков и шипов.

Пригнувшись, Кассад бросился в атаку, забыв обо всем на свете, и даже о самом себе, воспринимая собственное тело как боевую машину, орудие мести.

Шрайк … лишь слегка наклонился, широко расставив руки с пальцелезвиями, на которых горели отблески небесной вакханалии. Его стальные зубы сверкнули в пародии на улыбку.

Кассад голову не потерял. Вместо того чтобы ринуться в объятия смерти, он — в последний момент — сделал рывок в сторону, и, падая на бок, изо всех сил пнул чудовище в ногу под розеткой шипов вокруг коленного сустава. Только бы сбить его с ног…

С тем же успехом он мог попытаться пробить полкилометра бетона.

Правые руки Шайки молниеносно обрушились вниз, и десять пальцелезвий с маху вонзились в камень. Во все стороны полетели искры, но Кассад был уже вне досягаемости….»

Конечно, при переводе надо учитывать вклад переводчика. Он мог что-то и поменять, но мы видим готовый итог — интересная динамическая сцена. Не просто пересказ, а масса емких деталей — полчища Шрайков словно слились от крика, объятья клинков и шипов, розетка шипов, искры. Пальцелезвия — что-то новое. Мы четко видим цель Шрайка — убить, и понимаем Кассада — он готов уничтожить чудовище ценой собственной жизни.

Подведем итоги:
1. Прежде чем писать динамическую сцену, убедитесь, что она нужна, что без нее сюжет просядет.
2. Учитывайте советы, но не перебарщивайте, что называется, следуйте духу закона, а не букве: иногда и деепричастие с прилагательным на месте, если оно точно отражает именно то, что нужно, а иной раз и штамп вписывается в текст.

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

Вдохновляйтесь, совершенствуйтесь, и будет вам писательское счастье.

#подборки

  • 12 июл 2022

  • 0

Простые диаграммы: какие бывают и как их создавать

Десять типов графиков для ваших проектов, отчётов и презентаций.

Иллюстрация: Оля Ежак для Skillbox Media

Дарья Тамилина

Пишет о дизайне в Skillbox Media, а в перерывах и сама орудует графическим планшетом. Влюблена в советские шрифты, японскую рекламу и русский язык.

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

В нашей подборке — основные типы диаграмм, которые пригодятся вам для дизайна сайтов, презентаций, инфографик, рекламы и соцсетей.

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

Сравнение доходов и трат по месяцам
Изображение: Md shahin alam / Figma Community

Сравнение торговых сетей по популярности на Карибах
Изображение: Jay Lee / Figma Community

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

Барчарт показывает, насколько прибыльны или убыточны разные сегменты потребительского рынка
Изображение: JakubD / Looker

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

Сравнение объёма продаж разных косметических брендов в четырёх штатах США
Изображение: Anychart

Визуально гистограмма похожа на столбчатый барчарт. Но функция у неё другая — она показывает распределение одной переменной на каком-то временном промежутке. Так можно визуализировать изменения температуры в течение года. Каждый столбик в гистограмме занимает свой отрезок времени на оси координат.

Гистограмма показывает количество рассматриваемых дел в иммиграционных судах США в разные годы
Изображение: Venngage Inc.

Линейная диаграмма показывает динамику изменений переменной в зависимости от какого-то фактора. Так можно показать, например, как меняется уровень сахара в крови утром, днём и вечером в зависимости от съеденных шоколадок в течение дня. Чтобы построить линейный график, на оси координат отмечают значимые точки, а потом соединяют их — и кривая показывает, как данные изменяются от одной контрольной точки к другой.

Иногда в одной системе координат может быть несколько линейных графиков — так удобно сравнивать динамику изменения нескольких переменных.

График показывает посещаемость достопримечательностей Шотландии в разные годы
Изображение: Zim Academy

Иногда визуализация получается более точной, если точки не соединять линиями. Потому что линии условны. Посмотрим на график выше: число посетителей зоопарка в период с 1980 по 1985 год, скажем, вряд ли равномерно росло. В какой-то день людей было больше, в какой-то меньше. Эти мелкие изменения невозможно отобразить в таком масштабе — но если бы они были важны зрителю, ровная линия вводила бы в заблуждение.

Вот, например, график, отражающий успехи двух гонщиков на «Формуле-1». Точки показывают их позиции в разных раундах:

Результаты гонок двух участников
Изображение: Efe Akçay / Behance

Из-за того, что точки соединены, график начинает показывать несуществующие значения. Линия подразумевает, что значения изменяются между соседними точками. Из этого получается, что позиции гонщиков менялись в промежутке между раундами, хотя этого не могло происходить:

Изображение: Efe Akçay / Behance

Если взять линейный график и залить пространство под ним каким-то цветом, получится диаграмма с областями. По сути, она показывает то же самое, что и график-линия. Разница только в визуализации. Когда мы закрашиваем область каким-то цветом, более наглядно видно объём/количество чего-то.

График показывает объём загружаемых видео в интернет в разные кварталы 2019 и 2020 годов
Изображение: Hubspot

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

Диаграмма показывает хронологию событий. По вертикальной шкале перечисляют сами эти события — список задач. По горизонтальной — временные интервалы. Линии на графике показывают, когда начинается и заканчивается выполнение той или иной задачи.

На диаграмме показан ход проекта по редизайну сайта
Изображение: Venngage Inc.

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

Эту диаграмму также иногда называют «точечная», «диаграмма распределения» или «скаттерплот». Она помогает увидеть зависимость одной переменной от другой. Так можно показать, скажем, как меняется количество часов сна у людей в разном возрасте. Можно даже посмотреть это в разных группах: например, среди жителей разных стран.

У каждой точки на точечной диаграмме две координаты — по оси X и Y. Для обозначения групп, если они есть, используют точки разных цветов.

Диаграмма показывает корреляцию между объёмом инвестиций в интеллектуальную собственность и долей азиатских стран в патентах. Разный цвет точек обозначает патенты в разных сферах
Изображение: Innography / PitchBook / WIPO / McKinsey Global Institute Analysis

Этот вид диаграммы ещё называют полярной. Система координат тут круглая. Каждой переменной присваивается ось с началом в центре, и в какой-то точке круга по этой оси она заканчивается. По нескольким переменным строится область. С помощью этой диаграммы можно оценивать продукты, проекты или сотрудников по совокупности факторов.

Диаграмма показывает успехи студента в разных предметах
Изображение: Stack Overflow

Радарная диаграмма, например, может показать, выполнил ли сотрудник KPI за год, в каких конкретно задачах он силён, а где слабые места. В одной системе координат можно построить несколько таких областей — тогда это будет называться лепестковой диаграммой. В ней, например, можно показать KPI пятерых сотрудников отдела и сравнить, кто работал эффективнее.

Это сравнение двух автомобилей по техническим характеристикам
Изображение: Python Charts

Эти диаграммы ещё называют секторными: они показывают доли от целого. Пайчарт — это круг, разделённый на сегменты. Диаграмма-бублик — окружность с пустым центром, также разделённая на сегменты.

Круглые диаграммы спорные в отношении точности визуализации данных. Глядя на доли от окружности, трудно сразу разобраться, насколько одна больше или меньше другой. Эти диаграммы понятны, только если числа значительно различаются: скажем, по кругу можно сравнить 75% и 25%. Но если долей от целого много, а разница между ними не так очевидна, лучше использовать барчарт с накоплением или просто перечислить цифры без визуализации.

Это визуализация данных с помощью пересекающихся кругов. Так можно показать несколько множеств и их пересечения.

Диаграмма показывает, из чего складывается лидерство
Изображение: Wepik

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

Диаграмма показывает государства Британских островов
Изображение: ConceptDraw

Как и круглые секторные диаграммы, эта визуализация довольно приблизительная, точные значения по ней не считываются. По размеру пересечения трудно сходу понять, соответствует ли оно 20% или 30%. Диаграмма Венна подходит преимущественно для визуализации несложных вещей.

Как правило, графики никто не рисует руками — для этого используют специальные сервисы:

  • плагины в Figma: Chart Maker, Charts или NB Charts;
  • сервис Datawrapper: в него можно импортировать свои данные и строить даже сложные диаграммы — а потом скачивать их в PNG и использовать в своём дизайне;
  • Raw Graphs — аналогичный инструмент: можно создавать диаграммы и скачивать в разных форматах;
  • ChartBlocks — онлайн-сервис для визуализации данных, где чуть меньше видов диаграмм, зато больше возможностей для кастомизации их дизайна;
  • Google Sheets и Excel — помогут вам сделать график из данных прямо в вашей таблице;
  • инструменты для создания презентаций — у нас есть отдельная подборка.

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

Больше о визуализации данных

Научитесь: Профессия Графический дизайнер
Узнать больше

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

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

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

Сопоставимость
по кругу охватываемых объектов
означает
сравнение
совокупностей с равным числом элементов.

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

Однако сопоставимость
не нарушается, если в отрасли в строй
введены

новые
предприятия или отдельные предприятия
или отдельные предприятия прекратили
работу.

Сопоставимость
по времени регистрации
для
интервальное
обеспечивается равенством периодов
времени, за которые приводятся данные.

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

Для моментных
рядов динамики показатели следует при
водить на одну и ту же дату. Так, переоценку
в сопоставимые цены основных фондов по
отраслям экономики в условиях переходного
периода нужно производить ежегодно по
состоянию на 1 января. Или другой пример:
если учет численности скота в течение
ряда лет проводился по состоянию на 1
октября, а затем — на 1 января, то
соединение в один ряд показателей (за
несколько лет) с разной датой учета даст
несопоставимые уровни (численность
скота осенью обычно больше, чем зимой).

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

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

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

Вполне очевидна
несопоставимость денежных единиц разных
стран, несопоставимость денежных единил
внутри одной страны за разные периоды
времени (при изменении курса.
валюты).

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

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

Соседние файлы в папке факторн анализ- 2010

  • #
  • #
  • #
  • #
  • #

    15.02.20161.31 Mб28Регрессион анализ.rtf

  • #
  • #
  • #

    15.02.20162.21 Mб24теория статистики.rtf

  • #

Понравилась статья? Поделить с друзьями:
  • Как найти организацию в самаре
  • Как найти родственников воевавших в вов сайты
  • Забыла свой майл как найти
  • Как мне найти родственников по фамилии
  • Как найти профиль человека в спотифай