Форум программистов, компьютерный форум CyberForum.ru

Необходимо ускорить выполнение - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Температура процессора и мат.платы http://www.cyberforum.ru/cpp/thread653705.html
Коллеги нужна очень срочна ваша помощь. Надо написать на С++ программу. Чтобы она определяла температуру как процессора так мат.платы.
C++ Нужно написать программу в Visual c++)) Нужно написать программу в Visual c++)) http://www.cyberforum.ru/cpp/thread653491.html
Создание класса на с++ C++
Ребят срочно помогите решить задачку плиз... Создайте класс Rectangle (прямоугольник). Класс имеет атрибуты length (длина) и width (ширина), каждый из которых по умолчанию равен 1. Он имеет функции-элементы, которые вычисляют пе-риметр (perimeter) и площадь (area) прямоугольника. Имеются функции записи и чтения как для length, так и для width. Функции записи должны проверять, что length и...
C++ Прошу реализовать программу из предложенных языков программирования: Си, С++, С#, Java, Паскаль, Делфи
Выполнить программу на любом из предложенных языков программирования: Си, С++, С#, Java, Паскаль, Делфи. 1) В двумерном массиве случайных чисел (М строк. N столбцов) определить номера столбцов, среднее арифметическое элементов которых меньше среднего арифметического элементов во всём массиве. 2) Описать структуру с именем ORDER, содержащую следующие поля: - Расчётный счёт плательщика; -...
C++ Матрицы http://www.cyberforum.ru/cpp/thread650454.html
Заполнить двумерный массив следующим образом: (см.карт.)
C++ Можно ли реализовать КПС на С+? Можно ли реализовать КПС (Компьютерную поисковую систему) на подобии вот такой - КПС на С+? Каким способом? подробнее

Показать сообщение отдельно
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
18.09.2012, 22:09     Необходимо ускорить выполнение
При решении задачи в лоб мы перебираем массив слева направо и нам постоянно не хватает информации о его правом хвосте, поэтому нам постоянно приходится запускать еще внутренний цикл для поиска ближайшего числа больше данного. Идея моего подхода в том, чтобы обрабатывать массив справа налево в один проход. Для этого нам нужно как-то хранить информацию об уже обработанном участке массива. Нас интересуют достаточно большие значения, расположенные достаточно близко от рассматриваемой позиции. Поэтому будем сохранять информацию об уже пройденном участке в виде отсортированного по убыванию массива cache, в начале которого будут находиться большие, но далекие значения, а в конце -- близкие, но не очень большие. И в зависимости от того, чему равен текущий элемент массива, мы возьмем из кеша самый близкий из тех элементов, что больше текущего. При этом прежде чем переходить к следующим элементам, сам кеш тоже надо будет обновить: все элементы, которые меньше текущего, станут более не нужными, так как они будут меньше и дальше, чем только что обработанный элемент. Для этого мы присваиваем новое значение переменной top, указывающей на дальний конец кеша.
Т.е., если кеш представляет из себя что-то вроде
Код
10 4 0 -6 -10 -12
и нам на обработку приходит элемент -9, то мы ему присваиваем значение -6, а кеш превращается в
Код
10 4 0 -6 -9
если теперь получаем -20, то присваиваем -9 и кеш превращается в
Код
10 4 0 -6 -9 -20
если теперь получаем 15, то присваиваем 0 и кеш превращается в
Код
15
 
Текущее время: 21:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru