Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
1

Нужно ускорить или уменьшить код

14.05.2015, 00:19. Показов 654. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа находит определенное количество подмножеств заданного множества
Нужно ее либо ускорить либо уменьшить количество символов.(Можно перекодить в с++ но мне не хватает знаний)

Java
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.util.*;
import java.io.*;
 
public class MAD {
    static public String[] fun(String M[]){
        int w = M.length;
        String t[] = new String[(int) (Math.pow(2, w))];
        int n =(int) (Math.pow(2, w));
        for (int i = 0; i < n; i++ ) 
        {
            String s = "";
            s += "{";
            for (int j = 0; j < w; j++ ) 
                if ( (i & (1 << j)) !=0 ) 
                    s+=  " " + M[j] + " ";
            s+= "}";
            t[i] = s;
        }
        
        return t;
    }
 
    public static void main(String[] args) {
        Scanner c = new Scanner(System.in);
        int P = c.nextInt(); //Количество подмножеств
        int w = c.nextInt(); // Количество елементов в массиве
        String r[] = new String[w];
        for(int x = 0 ;x < w; x++ ){
            r[x] = c.next();
        }
        String x [] = fun(r);
        
        for(int s = 1; s < P; s++){
            x = fun(x);
        }
        
        
        for(int i = 0; i < x.length; i++){
            System.out.print(x[i] + ", ");
        }
        System.out.println(x.length);
    }
 
}
Добавлено через 1 час 16 минут
Попробовал StringBuffer но тогда проблемы с инициализацией(
Java
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package MAD;
import java.io.BufferedReader;
import java.io.InputStreamReader;
 
 
public class MAD {
    static public StringBuffer[] fun(StringBuffer M[]){
        int w = M.length;
        StringBuffer t[] = new StringBuffer[(int) (Math.pow(2, w))];
        int n =(int) (Math.pow(2, w));
        for (int i = 0; i < n; i++ ) 
        {
            
            t[i].append("{");
            for (int j = 0; j < w; j++ ) 
                if ( (i & (1 << j)) !=0 ) 
                   t[i].append( " " + M[j] + " ");
            t[i].append("}");
            
        }
        
        return t;
    }
 
    public static void main(String[] args) throws Exception {
        BufferedReader c = new BufferedReader(new InputStreamReader(System.in));
        int P = Integer.parseInt(c.readLine());
        int w = Integer.parseInt(c.readLine());
        StringBuffer[] r = new StringBuffer[w];
        for(int x = 1 ;x < w ; x++ ){
            r[x].append(c.readLine());
        }
        StringBuffer x [] = fun(r);
        
        for(int s = 1; s < P; s++){
            x = fun(x);
        }
        
        
        for(int i = 0; i < x.length; i++){
            System.out.print(x[i] + ", ");
        }
        System.out.println(x.length);
    }
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2015, 00:19
Ответы с готовыми решениями:

Нужно ускорить код
Мне нужно написать программу, для преобразования коэффициентов системы и столбца свободных членов ...

Код работает долго, нужно ускорить
Программа считает, сколько в среднем времени занимает процедура. На 1 000 итераций и массиве в 1...

Нужно ускорить код. Буду очень благодарен
Условие задачи: Вводиться число n, затем вводятся n чисел. Нужно с последней введенной цифры до...

Данные из одномерного массива в SQL запрос (или как уменьшить код)
Всем добрый день! Товарищи, опять я себе проблему придумал, которую не могу сам решить :) Прошу...

2
95 / 95 / 15
Регистрация: 11.11.2010
Сообщений: 424
15.05.2015, 10:31 2
Что значит параметр P? Вы хотите найти количество подмножеств считанного с консоли множества? Тогда непонятно, зачем вам строчки 33-35 первого сниппета. Окей. Предположим, что всё таки вы ищете множество подмножеств считанного с консоли множества (обзовём M). Потом вы ищете количество подмножеств M и т.д.. Тогда встаёт вопрос, какие у вас ограничения на P и w? Потому что сложность этого алгоритма оценивается как 2^(2^(2^(2....(2^w)))), где возведение в степень повторяется P раз. В принципе уже понятно, что на P >= 5 и w >= 5 мы не дождёмся результата. Микрооптимизациями, мне кажется, тут не спастись. Если же у вас P и w малы, то поменяйте StringBuffer на StringBuilder (так как StringBuffer использует synchronized, который нам не нужен). Дальше можете попробовать распаралеллить программу.
Всё это написано в предположении, что я верно понял ваш код=)
0
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
15.05.2015, 10:56  [ТС] 3
Да в случает если P > 5 и элементов не ноль программа не работает. И да тут ищется определенное количество подмножеств множества. Я просто искал наиболее быструю реализацию. Попробовал BufferedReadr + String , BufferedReader + StringBuffer, Scanner + String и самым быстрым оказалась первая связка. Переписав тот же код в Ruby и Python я получил прирост в скорости при расчете в Ruby и Python при (1 3 {2 3 5} и 2 2 {0 1}) а в джаве при (5 0)
0
15.05.2015, 10:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2015, 10:56
Помогаю со студенческими работами здесь

Как ускорить выполнение и уменьшить вес программы?
using System; using System.IO; namespace zadacha { class Program { static...

Ускорить загрузку программы и уменьшить количество потребляемой памяти
День добрый! Очень важно, чтобы программа не тратила слишком много оперативки, а также загружалось...

Как ускорить время выполнения и уменьшить вес программы?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Как можно ускорить производительность HDD (уменьшить активное время)?
День добрый! Скорость работы компа уменьшается, когда активное время производительности жёсткого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru