Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / почему так долго считает программа? / 19 сообщений из 19, страница 1 из 1
17.08.2006, 23:41
    #33926399
shtril
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
class Tmp
{
public static void main(String[] args)
{
int j=0,i=0;

for(i=1000; i<999999;i++)
{

for( j=2;j<i;j++)
{
if(i%j==0) {break ;}

}
if(i==j) System.out.print(i+",");

}
System.out.println("Hello World!");
}
Вот и весь код....
ПРоверил для чисел от 1 до 1000
все пучком
Запустил от 1000 до ...
считает 2 часа.... и не вижу конца
АМД7-550
...
Рейтинг: 0 / 0
18.08.2006, 01:03
    #33926473
fjord
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
     public   static   void  main(String[] args) {
         int  j= 0 ,i= 0 ;
         long  count= 0 ;
        
         for (i= 1000 ; i< 999999 ;i++)
        {
             for ( j= 2 ;j<i;j++){
                 if (i%j== 0 ) { break  ;}
                count++;
            }
             if (i==j) System.out.println(i); 
        }
        System.out.println("Hello World!");
        System.out.println("Жесть " + count);
    }

мдее.., мой Athlon 3000 пыхтел (total time: 17 minutes 3 seconds).count досчитал до 37566327799. За что же вы так компьютеры не любите ))
...
Рейтинг: 0 / 0
18.08.2006, 09:53
    #33926863
Satrac
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
Поставь два System.out.println, будет еще дольше. Вывод в консоль занимает много времени.
...
Рейтинг: 0 / 0
18.08.2006, 10:42
    #33927022
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
SatracПоставь два System.out.println, будет еще дольше. Вывод в консоль занимает много времени.

ага, а если умножить время вывода в консоль System.out.println на количество итераций то и получим большое время выполнения. :)

отсюда вывод - в цикле предназначенном для операций одного класса трудоемкости (например арифметическим операциям) нельзя совмещать операции дргугого класса трудоемкости (ввод/вывод например)..

если нужно выводить на экран результат каждой итерации, воспользуйтесь строковым буффером либо потоком, вот так:


1 вариант оптимизации - Строковый Буффер:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 public   static   void  main(String[] args)
{

StringBuilder buff =  new  StringBuilder ();
 int  j= 0 ,i= 0 ;

 for (i= 1000 ; i< 999999 ;i++)
{

 for ( j= 2 ;j<i;j++)
{
 if (i%j== 0 ) { break  ;}

}
 if (i==j) 
   //System.out.print(i+",");            
   buff.append(i).append(",");

}
System.out.println("Hello World!");
System.out.println("result is ");
System.out.println(buff.toString());

}



2. Вариант с потоком
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 public   static   void  main(String[] args)  throws  Exception
{

OutputStream os =  new  ByteArrayOutputStream();
 int  j= 0 ,i= 0 ;

 for (i= 1000 ; i< 999999 ;i++)
{

 for ( j= 2 ;j<i;j++)
{
 if (i%j== 0 ) { break  ;}

}
 if (i==j) 
   //System.out.print(i+",");            
   os.write(Integer.toString(i).getBytes());
   os.write(",".getBytes());
}

os.flush();
System.out.println("Hello World!");
System.out.println("result is " +  new  String (os.toByteArray()) );
os.close();

}
...
Рейтинг: 0 / 0
18.08.2006, 12:26
    #33927616
й
й
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
сижу читаю книжку про .NET, самое начало, как раз рассказывается как выполняются методы на примере writeline и говорится о том что только при первом вызове "теряется производительность", и все последующие обращения выполняются "на полной скорости" : повторная верификация и компиляция не производится. - значит ли что там не будет проблем подобной здесь?
впрочем, прога простая, сейчас проверю :)
...
Рейтинг: 0 / 0
18.08.2006, 12:29
    #33927641
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
йсижу читаю книжку про .NET, самое начало, как раз рассказывается как выполняются методы на примере writeline и говорится о том что только при первом вызове "теряется производительность", и все последующие обращения выполняются "на полной скорости" : повторная верификация и компиляция не производится. - значит ли что там не будет проблем подобной здесь?
впрочем, прога простая, сейчас проверю :)
Причем тут верификация и затраты на ввод-вывод?
...
Рейтинг: 0 / 0
18.08.2006, 12:51
    #33927775
Satrac
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
значит ли что там не будет проблем подобной здесь?
Не путай кислое с длинным. Вызов метода - это вызов метода. Тормоза вызывает выполнение метода. Итерации без вывода пройдут гораздо быстрее, т.к. главный поток не будет тормозить for для вывода.
...
Рейтинг: 0 / 0
18.08.2006, 13:09
    #33927890
ы
ы
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
йсижу читаю книжку про .NET

Дружок, а ты форумом не ошибся?
...
Рейтинг: 0 / 0
18.08.2006, 13:22
    #33927977
й
й
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
SatracНе путай кислое с длинным. Вызов метода - это вызов метода. Тормоза вызывает выполнение метода. Итерации без вывода пройдут гораздо быстрее, т.к. главный поток не будет тормозить for для вывода.

я потому книжки и читаю, вопросы на форумах задаю - чтоб меньше путать )
только что выполнил с выводом и без, в обоих случаях выполнение заняло ровно 20 минут , интересно кто-что путает,а ? :)

ыДружок, а ты форумом не ошибся?
да нет, я вообще яву люблю ) чисто случайно книжка под руку попалась, строчка в ней и этот тред, всё так совпало - наверно звёзды..))
...
Рейтинг: 0 / 0
18.08.2006, 13:39
    #33928081
fjord
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
(total time: 17 minutes 3 seconds) count = 37566327799
17*60+3=1023
37566327799/1023=36721728 итераций в сек.
а может это нормаьно?
...
Рейтинг: 0 / 0
18.08.2006, 14:37
    #33928374
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
fjord(total time: 17 minutes 3 seconds) count = 37566327799
17*60+3=1023
37566327799/1023=36721728 итераций в сек.
а может это нормаьно?

оптимизировать нужно алгоритм который вы задали..
попробуйте развернуть цикл немного или заменить операцию i%j какой нибудь другой. а что касается операции вывода System.out... то в любом лучше ее выносить за пределы цикла где идет расчет
...
Рейтинг: 0 / 0
18.08.2006, 14:41
    #33928397
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
й что только при первом вызове "теряется производительность", и все последующие обращения выполняются "на полной скорости" : повторная верификация и компиляция не производится. - значит ли что там не будет проблем подобной здесь?
впрочем, прога простая, сейчас проверю :)

в яве тоже есть такое - называется JIT-компилятор.
...
Рейтинг: 0 / 0
18.08.2006, 14:57
    #33928466
Satrac
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
только что выполнил с выводом и без, в обоих случаях выполнение заняло ровно 20 минут , интересно кто-что путает,а ? :)
Я недавно писал приладу, в которой логгировал на экран. Выводилось порядка 10000 записей. Работала она 20 секунд. Без вывода на экран работала 4.
А почему так у тебя... Хз. В код не вдумывался, просто наступал на подобные грабли.
...
Рейтинг: 0 / 0
18.08.2006, 15:19
    #33928597
й
й
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
Satrac
Работала она 20 секунд. Без вывода на экран работала 4.
А почему так у тебя... Хз. я ведь в вижуал студии тестил, не в яве.. вот в чём вопрос ))

unicornmirage

в яве тоже есть такое - называется JIT-компилятор.
на свете столько всего интересного ))
...
Рейтинг: 0 / 0
18.08.2006, 20:56
    #33929680
почему так долго считает программа?
shtrilВот и весь код....
ПРоверил для чисел от 1 до 1000
все пучком
Запустил от 1000 до ...
считает 2 часа.... и не вижу конца
АМД7-550

Нельзя же так грубо считать простые числа...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
     public   static   void  main(String[] args) {
         for  ( int  i =  1000 ; i <  999999 ; i++) {
             if  (isPrime(i)) {
                System.out.println(i);
            }
        }
        System.out.println("Hello World!");
    }

     private   static   boolean  isPrime( int  i) {
         for  ( int  j =  2 ; j < Math.sqrt(i); j++) {
             if  (i % j ==  0 ) {
                 return  false;
            }
        }
         return  true;
    }
...
Рейтинг: 0 / 0
18.08.2006, 23:32
    #33929833
shtril
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
Да знаю я как искать простые числа....
Соль не в этом....
Задача решилась простым перенапралением вывода в массив, а затем массива на экран.... Все прошло быстро и качественно
А я то думал, что цифирки будут по 1 выскакивать, а я играть в карты и смотреть появление их на экране, просто поразмышлять ...
Ну нет у меня опыта писать на Джаве... Ну и напоролся на грабли-очевидно все цифирки ложились куда-то в буфер, запоминались, преобразовывались....
А время шло...
Спасибо всем ответившим
...
Рейтинг: 0 / 0
22.08.2006, 17:38
    #33935609
ПсоП
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
А если еще не на J делить, а сделать массив простых чисел, а J - индекс по этому массиву...
...
Рейтинг: 0 / 0
22.08.2006, 17:49
    #33935640
Athlon Barton 2500+
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
ПсоПА если еще не на J делить, а сделать массив простых чисел, а J - индекс по этому массиву...

а если развернуть внутренний цикл хотя бы на 16 подряд итераций, то ваще будет круто!
...
Рейтинг: 0 / 0
23.08.2006, 10:20
    #33936539
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему так долго считает программа?
Athlon Barton 2500+ ПсоПА если еще не на J делить, а сделать массив простых чисел, а J - индекс по этому массиву...

а если развернуть внутренний цикл хотя бы на 16 подряд итераций, то ваще будет круто!

А ты сначала разверни.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / почему так долго считает программа? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]