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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2013, 21:05   #1
22hope22
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию как уменьшить время работы программы

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

int n1 = int.Parse(Console.ReadLine());
int[] a = new int[n1];
for (int i = 0; i < n1; i++)
{
a[i] = int.Parse(Console.ReadLine());
}

int n2 = int.Parse(Console.ReadLine());
int[] b = new int[n2];
for (int j = 0; j < n2; j++)
{
b[j] = int.Parse(Console.ReadLine());
}

Array.Sort(a);
int k=0;
for (int j = 0; j < b.Length; j++)
{
for (int i = 0; i < a.Length; i++)
{
if (b[j] == a[i])
{
k++;
break;
}
}
}
Console.WriteLine(k);
22hope22 вне форума Ответить с цитированием
Старый 26.05.2013, 21:23   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Отсортируйте оба массива и "идите" по ним, сравнивая элементы.
Перемещайте указатель в том массиве, где текущий элемент меньше. Если текущие элементы совпадают, то увеличивайте счетчик. Если один из массивов закончился, то выводите значение счетчика.
Примерно:
Код:
Array.Sort(a);
Array.Sort(b);
int k = 0;
int i = 0;
int j = 0;
do {
  if (a[i] < b[j]) {
    i++;
  } else {
    if (b[j] == a[i]) {
      k++;
    }
    j++;
  }
} while (i != a.Length && j != b.Length);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 26.05.2013 в 21:28.
BDA вне форума Ответить с цитированием
Старый 26.05.2013, 21:24   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

А что? код выполняется дольше чтоли?
Максимальные задержки тут будут зависеть от пользователя пока он в консоли строку введет.

Ну если хотите можете разузнать про метод Sort() и попытатся реализовать более быструю сортировку. Мне по крайней мере неизвестно какой метод реализован в этом методе. Уж не пузырем ли.

Можно разбить последнюю группу циклов на 2 отдельных цикла.
O(n) + O(n) < On(n*n)
Вроде так.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 26.05.2013, 21:25   #4
22hope22
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

я по условию задачи не могу отсортировать второй массив
22hope22 вне форума Ответить с цитированием
Старый 26.05.2013, 21:27   #5
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Сколько время выполенния вашего кода?? замерять можно в классе StopWatch
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 26.05.2013, 21:30   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от 22hope22 Посмотреть сообщение
я по условию задачи не могу отсортировать второй массив
Тогда используйте двоичный поиск (двоичный поиск).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 26.05.2013, 21:34   #7
22hope22
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

Это единственный вариант? время выполнения программы 2.046 а надо не больше 2
22hope22 вне форума Ответить с цитированием
Старый 26.05.2013, 21:35   #8
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Откуда такое время??? Где тут самый долгий кусок?? Проанализируйте код.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 26.05.2013, 21:38   #9
22hope22
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

Не подскажите как его проанализировать?
22hope22 вне форума Ответить с цитированием
Старый 26.05.2013, 21:41   #10
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от 22hope22 Посмотреть сообщение
Не подскажите как его проанализировать?
System.Diagnistics.Stopwatch stw = new ...

после каждого блока, цикла, метода ставьте stw.stop() смотрите сколько там EllapsedMilliseconds.
Затем stw.restart() и до следующего стопа.
Только учтите что таймер идет даже если вы в брэйке стоите. Поэтому код должен выполнятся от stw.restart() до stw.stop() без остановок
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Время Работы Программы shilovec5377 Общие вопросы Delphi 1 17.04.2012 17:15
Как можно уменьшить время выполнения запроса. ajevgen PHP 4 07.09.2011 15:55
VS 2010 - как поменять текст у кнопки во время работы программы, из .cpp файла? MrRockchip Общие вопросы C/C++ 3 21.02.2011 22:44
Время работы программы Magist Компоненты Delphi 5 24.10.2009 20:52
Как узнать время работы программы в паскаль? bullvinkle Помощь студентам 2 26.12.2008 11:20