Как увеличить скорость программы

Код в самом внизу. У меня есть матрица размером n x m . В ней нужно найти подматрицу наибольшей площади состоящих из отрицательных чисел. Программа выводит координаты верхнего левого угла подматрицы и правого нижнего угла подматрицы. Например, у меня матрица

1 -9 -2 8 6 1 8 -1 -11 -7 6 4 10 12 -1 -9 -12 14 8 10 -3 -5 17 8 6 4 10 -13 -16 19
1 2 3 3

Код работает, но для матриц гигантских размеров, код работает слишком медленно. Хотелось бы, чтобы программа считала за O(n*log(n)) или O(n^2) (n — это количество элементов в матрице.

def check_matrix(matrix, i0, j0, size_x, size_y): for j in range(j0, j0 + size_y): for i in range(i0, i0 + size_x): if matrix[j][i] >= 0: return False return True def main(): f = open(«matrix.txt», «r») matrix=[] for line in f: matrix.append(list(map(int, line.split()))) size_max, data = 0, (-1, -1, 0, 0) for j in range(len(matrix)-1): for i in range(len(matrix[j])-1): if matrix[j][i] < 0: for size_y in range(1, len(matrix) — j): for size_x in range(1, len(matrix[j]) — i): if check_matrix(matrix, i, j, size_x, size_y): if size_max < size_x * size_y: size_max = size_x * size_y data = j, i, i+size_x-1,j+size_y-1 print(data[0], data[1]) print(data[2], data[3]) main()
Отслеживать
задан 17 ноя 2021 в 21:22
121 10 10 бронзовых знаков

Объясните, как вы получили желаемый ответ, если ваша подматрица должна состоять из отрицательных чисел, и в то-же время подматрица с диагональными координатами (1,2) и (3,3) содержит число 12 (с координатой 3,2)?

Как увеличить скорость Торрента до Максимума? 10 практических шагов!

17 ноя 2021 в 21:36

1,2 это значит по индексу 1 ряд и по индексу второй столбец. Нормальным языком это 2 ряд и 3 столбец. (3,3) это 4 ряд и 4 столбец. Подматрица не обязательно должна быть квадратной

17 ноя 2021 в 21:45

не надо фантазировать. Открываем Википедию и читаем «Ма́трица — математический объект, записываемый в виде ПРЯМОУГОЛЬНОЙ таблиц». Напоминаю — квадрат — частный случай прямоугольника. Если вы выдумываете свою трактовку термина, то хотя-бы проинформируйте об этом окружающих. Иначе ваш вопрос и пример выглядит по меньшей мере противоречащими друг другу.

18 ноя 2021 в 8:15
18 ноя 2021 в 8:22

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Метод с линейным временем O(nm), требует использования непростого в понимании субалгоритма.

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

Читайте также:
Подготовка документов средствами программы Microsoft word

А для задачи нахождения максимальной площади под столбиками («под гистограммой»)

введите сюда описание изображения

есть хитрый алгоритм на основе (мотононного) стека.

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

Полный код с площадью и позицией:

Увеличь скорость интернета! Загрузки полетят, сайты откроются быстрее, а PING в играх снизится!


A = [[ 1, -9, -2, 8, 6 , 1], [8, -1, -11, -7, 6, 4], [10, 12, -1, -9, -12, 14], [8, 10, -3, -5, 17, 8], [6, 4, 10, -13, -16, 19]] def maxAreaInHist(arr): best = 0 bstart = 0 blen = 0 bhgt = 0 stack = [] for i in range(len(arr)): while (len(stack) > 0) and (arr[stack[-1]] >= arr[i]): #нашли меньший столбик, удаляем все бОльшие smallest = arr[stack.pop()] if len(stack) == 0: start = 0 else: start = stack[-1]+ 1 #range_length * smallest_weight_in_range ar = smallest * (i — start) if ar > best: best = ar bstart = start blen = i — start bhgt = smallest stack.append(i) return best, bstart, blen, bhgt def maxar(A): r = len(A) c = len(A[0]) for i in range(c): A[0][i] = 1 if A[0][i] < 0 else 0 for y in range(1, r): for i in range(c): A[y][i] = 1 + A[y-1][i] if A[y][i] < 0 else 0 maxarea = 0 for y in range(r): best, bstart, blen, bhgt = maxAreaInHist(A[y]) if best >maxarea: maxarea = best y0, x0, y1, x1 = y — bhgt + 1, bstart, y, bstart + blen — 1 print(maxarea, y0, x0, y1, x1) maxar(A) >>6 1 2 3 3

Источник: ru.stackoverflow.com

Оптимизация кода

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

Возможности языка

В следующих разделах описываются некоторые функции оптимизации в C/C++.

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

Параметры компилятора, упорядоченные по категориям
Список параметров компилятора /O, которые влияют на скорость выполнения или размер кода.

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

Прагма optimize

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

Заключите код между двумя прагмами, как показано ниже:

#pragma optimize(«», off) // some code here #pragma optimize(«», on)

Рекомендации по программированию

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

Читайте также:
Системная программа это Microsoft

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

В следующих разделах рассматриваются оптимальные методы программирования.

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

Рекомендации по оптимизации
Общие рекомендации по эффективной оптимизации приложения.

Отладка оптимизированного кода

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

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

  • Отладка в Visual Studio
  • Практическое руководство. Отладка оптимизированного кода
  • Почему может уменьшиться точность чисел с плавающей запятой

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

  • Улучшение производительности компилятора
  • При использовании имен функций без скобок () код не создается
  • Оптимизация встроенного кода на языке ассемблера
  • Настройка оптимизации компилятора для проекта ATL
  • Методы увеличения скорости загрузки клиентского приложения

Источник: learn.microsoft.com

Тормозит игра? Как ускорить игру — 7 простых советов

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

Чтобы ускорить работу uTorrent, вам нужно открыть меню «Настройки устройства» и перейти на вкладку «Дополнительно». Там пользователь должен изменить следующие значения:

Как увеличить скорость загрузки вашего торрента с помощью настроек «uTorrent»

  1. «Bt.allow_same_ip» — правда.
  2. «Gui.show_notorrents_node» неверно.
  3. «Интервал обновления» — 20.

Чтобы все изменения вступили в силу, необходимо поставить флажок «ДА» на значение параметра, затем нажать «Применить» или «ОК».

Увеличение скорости отдачи и загрузки

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

  1. В uTorrent эти два показателя находятся в разделе «Скорость» в меню «Настройки программы».

Как увеличить скорость загрузки вашего торрента с помощью настроек «uTorrent»

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

Как увеличить скорость загрузки вашего торрента с помощью настроек «uTorrent»

  1. Однако изменение этих параметров может привести к потере скорости. Во избежание проблем необходимо также настроить значения трех форматов подключения:
      «Максимальное количество подключений» — 2500;
  2. «Слот для торрента» — 4.
  3. «Максимальное количество пиров, подключенных за один торрент» — 500;

SoftPerfect WiFi Guard: обзор программы-защитника Wi-Fi сетей

Читайте также:
Какую программу криптопро нужно установить для эцп

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

Разгружаем производительность интернета

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

Когда появился Wi-Fi: версии появления беспроводной технологии

Чтобы получить максимальную скорость загрузки, вам необходимо:

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

Если сетевой прием направлен только на программу-трекер, это может увеличить скорость загрузки торрента.

Аппаратное ускорение компьютера

Виной медленной работы компьютера может быть неактивное аппаратное ускорение

При затруднении работы видеокарты компьютера (неправильном изображении, запаздывании, самопроизвольном отключении визуальных эффектов) следует использовать аппаратное ускорение компьютера.

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

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

Как включается аппаратное ускорение

На операционной системе windows 7 аппаратное ускорение включается так:

  • устанавливается специальный драйвер (в большинстве случаев);
  • щелчок правой кнопкой мыши на Рабочем столе —> «Персонализация» —> в графе «Экран» выбираем настройки параметров, дополнительные параметры. Далее, изменяем параметры во вкладке «Диагностика». В этой вкладке будет находиться регулировка режима аппаратного ускорения:
  • Настройка видеокарт отдельных фирм в специализированных программах ( в разделе аппаратного ускорения и преобразования видео):

За настройками аппаратного ускорения чаще всего следит драйвер

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

Видео: как включить и отключить аппаратное ускорение?

Firefox

В Firefox вам понадобится расширение Multithreaded Download Manager. Установите его, затем нажмите на значок в панели инструментов, щёлкните плюсик и добавьте URL, которых хотите скачать.

Максимальное число потоков — 6. Чтобы увеличить его, введите в адресную строку about:config, затем наберите в поиске network.http.max-persistent-connections-per-server и укажите в параметре вместо 6 другое число.

В пункте network.http.max-persistent-connections-per-proxy сделайте то же самое. Не рекомендуется злоупотреблять и выставлять больше 16 потоков.

Multithreaded Download Manager от jingyu9575

Источник: getikea-spb.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru