Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2016, 09:35   #1
Programmer121
Пользователь
 
Аватар для Programmer121
 
Регистрация: 05.12.2014
Сообщений: 12
По умолчанию оптимизация кода1

Помогите оптимизировать программу
мой код:
Код:
#include <iostream>
#include <cmath>
using namespace std;
int main ()
{

    int n,d,i,j,k=0,key;
    cin>>n;
    int arr[200000];
    for(i=1;i<=n;i++){
        cin>>arr[i];
}
    for (j = 2;j<=n;j++){
    key = arr[j];
    i = j - 1;
    while (i > 0 && arr[i] > key){
         arr[i+1] = arr[i];
         i = i - 1;}
    arr[i+1] = key;
         }
      for(i=1;i<=n;i++){
          if(abs(arr[i]-arr[i+1])<=d) {i+=2;k++;}
       }
        cout<<k;
        return 0;
     }


в задаче дан массив чисел размера n.
в этом массиве необходимо найти количество разниц которые меньше d.
в том смысле что к примеру abs(a[i]-a[j]) <=d -> p++; где p - счетчик.
если есть вопросы насчет условия задавать.
Помогите ускорить на МАКСИМАЛЬНЫЙ уровень программу


_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 12.01.2016 в 09:44.
Programmer121 вне форума Ответить с цитированием
Старый 12.01.2016, 10:07   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. отсортировать массив по возрастанию
2. берем b[i] и ищем к нему парные справа(большие чем он), те которые слева мы уже проверили при меньших значениях i (он тогда был справа).
3. нужные нам находятся НЕ ДАЛЕЕ чем на х шагов, так что b[i+x]-b[i] <=d<b[i+x+1]-b[i] {или так b[i+x]<=d-b[i]<b[i] }
4. p+=x; если это не было сделано при выполнении п.3.(поиске значения x)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 12.01.2016, 10:14   #3
Programmer121
Пользователь
 
Аватар для Programmer121
 
Регистрация: 05.12.2014
Сообщений: 12
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
1. отсортировать массив по возрастанию
2. берем b[i] и ищем к нему парные справа(большие чем он), те которые слева мы уже проверили при меньших значениях i (он тогда был справа).
3. нужные нам находятся НЕ ДАЛЕЕ чем на х шагов, так что b[i+x]-b[i] <=d<b[i+x+1]-b[i] {или так b[i+x]<=d-b[i]<b[i] }
4. p+=x; если это не было сделано при выполнении п.3.(поиске значения x)
напишите пожалуйста псевдокод...так непонятно...что такое х и сотальное
p.s (псевдокод код приближенный к ор игинальному коду...понятный для всех)
Programmer121 вне форума Ответить с цитированием
Старый 12.01.2016, 10:27   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
1. сортрировка исходного массива и получение массива b
2 for  i:=1 to n do
3. for j:=i+1 to n do
   if b[j]-b[i]<=d then p:=p+1 //нам подходит
   else {x:=j-1;} break; //все БОЛЬШЕ подходящих мы не найдем
4.--------{смотри курсив}
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 12.01.2016 в 10:33.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация KaSS Microsoft Office Excel 30 01.08.2013 17:46
Оптимизация Кащей Общие вопросы C/C++ 6 30.07.2013 09:55
Оптимизация IF Pirotexnik C# (си шарп) 5 10.10.2012 12:43
Оптимизация Красноглаз Паскаль, Turbo Pascal, PascalABC.NET 3 28.10.2011 13:40
Оптимизация Alex Cones Общие вопросы Delphi 9 07.07.2010 08:47