Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что еще можно оптимизировать? Задача поб. диагонали требует опимизации 
:(
    Опции темы
centel
  Дата 8.12.2013, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 2.11.2005

Репутация: нет
Всего: нет



Дано число n, n <= 100 . Создайте массив n×n и заполните его по следующему правилу:
- числа на диагонали, идущей из правого верхнего в левый нижний угол, равны 1;
- числа, стоящие выше этой диагонали, равны 0;
- числа, стоящие ниже этой диагонали, равны 2. 

Код

#include <stdio.h>
#define N 100

int main()
{
   size_t i, j, n, n1;
   int a[N][N];

   scanf( "%d", &n );
   n1=n-1;
   for ( i = 0; i < n; ++i ) {
        for ( j = 0; j < n; ++j ) {
            if (i+j>n1){
                a[i][j]=2;
              }
            else if (i+j<n1){
                a[i][j]=0;
            }
            else{
                a[i][j]=1;
            }
          }
      
   }
   
   for ( i = 0; i < n; ++i ) {
        for ( j = 0; j < n; ++j ) {    
      printf( " %i", a[i][j] );}
      printf( "\n" );
   }
    return 0;
}


Что можно сделать для минимизации времени выполнения?
PM MAIL   Вверх
Pavia
Дата 8.12.2013, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: нет
Всего: 12



Вынести условия за цикл, т.е циклы поместить в условия.
PM MAIL   Вверх
volatile
Дата 8.12.2013, 11:18 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(centel @  8.12.2013,  06:59 Найти цитируемый пост)
Что можно сделать для минимизации времени выполнения? 

В вашей функции, вывод (printf) займет 99.99% времени выволнения.
Все остальное что вы придумаете для оптимизации, будет влиять только на оставшиеся 0.01% 

PM MAIL   Вверх
darkart
Дата 8.12.2013, 23:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: нет
Всего: 31



Попробуйте убрать условия, и не пересматривать весь массив...

Код

    n--;

    for( i = 0; i <= n; i++ )
    {
        a[ i ][ n - i ] = 1;
        for( j = 0; j < n - i; j++ )
        {
            a[ i ][ j ] = 0;
            a[ n - i ][ n - j ] = 2;
        }
    }

    n++;

PM MAIL WWW ICQ Skype GTalk   Вверх
tzirechnoy
Дата 9.12.2013, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: -1
Всего: 16



Использовать char вместо int, и memset+bzero для заполнения.
PM MAIL   Вверх
kolobok0
  Дата 9.12.2013, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 24.12.2008

Репутация: нет
Всего: 2



Цитата(centel @ 8.12.2013,  06:59)
Дано число n, n <= 100...для минимизации времени выполнения?

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

для понимания чего мона убрать и как сделать - пройдитесь мысленно на маленьком размере по данному алгоритму. это квадратная матрица с диоганалью значением одын. с меньшей стороны индексов она вся нулёвая. в большей - значения два. двойками (по второму размеру) заполняется всегда размер матрицы минус смещение по первому размеру минус одын. т.е. оптимизация будет более чем на 50% по скорости.

ик?

(круглый)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1339 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.