Получи случайную криптовалюту за регистрацию!

Computer Science

Логотип телеграм канала @cscience1 — Computer Science C
Логотип телеграм канала @cscience1 — Computer Science
Адрес канала: @cscience1
Категории: Технологии
Язык: Русский
Количество подписчиков: 10.58K
Описание канала:

По всем вопросам: @altmainf
Уважаемый менеджер: @altaiface

Рейтинги и Отзывы

3.00

2 отзыва

Оценить канал cscience1 и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

0

3 звезд

2

2 звезд

0

1 звезд

0


Последние сообщения 2

2023-07-12 11:59:54 Что такое недостижимый код?

Недостижимый код - это код в программе, который никогда не будет выполнен в процессе ее работы.

Пример:
int foo(int a) {
int b;
b = a << 2;
return b;
b = 47; // Недостижимый код
return 0; // Недостижимый код
}
1.4K views08:59
Открыть/Комментировать
2023-07-11 11:59:54 Применение хвостовой рекурсии

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

Создатели функционального языка Scheme, одного из диалектов Lisp, оценили важность хвостовой рекурсии настолько, что в спецификации языка предписали каждому транслятору этого языка в обязательном порядке реализовывать оптимизацию хвостовой рекурсии и описали точный набор условий, которым должна отвечать рекурсивная функция, чтобы рекурсия в ней была оптимизирована.
1.6K views08:59
Открыть/Комментировать
2023-07-10 11:59:54 Что такое хвостовая рекурсия?

Хвостовая рекурсия - это способ рекурсивной функции, в котором вызов функции является последней операцией в теле функции.

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

Пример хвостовой рекурсии в языках программирования, поддерживающих оптимизацию хвостовой рекурсии, таких как Scheme или Clojure, может быть таким:
(define (factorial-iter n acc)
(if (<= n 1)
acc
(factorial-iter (- n 1) (* acc n))))

(define (factorial n)
(factorial-iter n 1))
1.7K views08:59
Открыть/Комментировать
2023-07-08 11:59:54 Удаление мёртвого кода

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

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

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

3. Тестирование. После удаления мертвого кода мы должны тестировать код, чтобы убедиться, что его удаление не имело никакого влияния на функционал проекта. Об этом не следует забывать, поскольку удаление кода может ухудшить состояние проекта.
1.8K views08:59
Открыть/Комментировать
2023-07-07 11:59:54 Что такое мёртвый код?

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

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

Чтобы избежать мертвого кода, следует регулярно проверять исходный код и удалять неиспользуемый код. Это также помогает сохранить исходный код более организованным и читаемым. Кроме того, код можно комментировать, чтобы сохранить его для будущих использований, если это необходимо.
1.8K views08:59
Открыть/Комментировать
2023-07-06 11:59:54 Методы снижения стоимости операций:

1. Автоматизация - внедрение автоматизированных систем и процессов может значительно сократить время и затраты на выполнение задач.

2. Оптимизация процессов производства - анализ и оптимизация процессов производства позволяют поднять эффективность работы и снизить затраты.

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

4. Управление запасами - оптимизация управления запасами позволяет снизить затраты на их хранение и обработку.

5. Управление процессом закупок - управление процессом закупок и работа с поставщиками позволяют сэкономить на затратах и получить лучшие условия поставки.

6. Улучшение качества работы персонала - постоянное повышение уровня квалификации и мотивация персонала позволяют повысить эффективность работы и снизить вероятность ошибок и изменений в производственных процессах.
1.8K views08:59
Открыть/Комментировать
2023-07-05 11:59:54 Распределение регистров

Распределение регистров – это процесс оптимизации использования регистров процессора в программной реализации вычислительных процессов.

Это распределение является одним из методов оптимизации производительности кода. Состоит из нескольких шагов:
1. Анализ исходного кода, позволяющий определить переменные, которые используются наиболее часто.
2. Распределение регистров таким образом, чтобы переменные, которые используются наиболее часто, сохранялись в регистрах.
3. Создание кода с использованием этих регистров.

Преимущества использования распределения регистров включают увеличение скорости выполнения программы, уменьшение количества доступов к памяти и улучшение использования ресурсов процессора.
1.6K views08:59
Открыть/Комментировать
2023-07-04 12:03:50 Размыкание цикла

Размыкание цикла или loop unswitching состоит в вынесении условия за пределы цикла и дублирования тела цикла с помещением соответствующих вариантов в соответствующие ветви условия. Это позволяет улучшить производительность за счёт того, что современные процессоры могут выполнять векторные операции.

Пример преобразования:
for (i = 0; i < 1000; i++) {
    x[i] += y[i];
  
    if (w)
        y[i] = 0;
}

Условие внутри тела цикла мешает его распараллеливанию. После размыкания оно принимает следующий вид:
if (w) {
    for (i = 0; i < 1000; i++) {
        x[i] += y[i];
        y[i] = 0;
    }
}
else {
    for (i = 0; i < 1000; i++)
        x[i] += y[i];
}
1.7K views09:03
Открыть/Комментировать
2023-07-03 12:01:41 Размотка цикла 

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

Пример, код:
int i;
for ( i = 1; i < n; i++) {
    a[i] = (i % b[i]);
}

преобразуется в:
int i;
for (i = 1; i < n - 3; i += 4) {
    a[i] = (i % b[i]);
    a[i + 1] = ((i + 1) % b[i + 1]);
    a[i + 2] = ((i + 2) % b[i + 2]);
    a[i + 3] = ((i + 3) % b[i + 3]);
}
1.7K views09:01
Открыть/Комментировать
2023-07-01 12:01:33 Разбиение цикла на блоки

Loop tiling - оптимизирующее преобразование, призванное сделать исполнение некоторых типов циклов более эффективным.

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

Пример: умножение матрицы на вектор
for (i = 0; i < N; i++)
     for (j = 0; j < N; j++)
         c[i] = c[i] + a[i, j] * b[j];
        
После разбиения цикла на блоки 2 × 2:
for (i = 0; i < N; i += 2)
     for (j = 0; j < N; j += 2)
         for (ii = i; ii < min(i+2, N); ii++)
             for (jj = j; jj < min(j+2, N); jj++)
                 c[ii] = c[ii] + a[ii, jj] * b[ii];
1.8K views09:01
Открыть/Комментировать