2015-11-16 2 views
0

я следующее решение таблицы:Java - объекты, сравнивающие алгоритм

Decision table

Моя задача состоит в том, чтобы сравнить все объекты (S1, S2, S3 ...) друг с другом с помощью Выбирается атрибутов множества (например, { Удаленность, Вместимость}). Поэтому для этого я должен создать два LOOPS (один вложенный) и использовать условие IF.

Когда набор объектов маленький, все работает нормально. Но когда установлено большое (например, 10000 объектов) производительность этого решения ухудшается ...

Это еще один, более быстрый, «умный» способ сделать это?

+0

Что именно ваш выход? Вы сортируете? – ergonaut

+2

Вы должны рассказать нам больше о цели цели всего алгоритма. Если вы хотите сравнить все объекты друг с другом, нет лучшего способа сделать это, чем иметь вложенные циклы 'for' и, следовательно, квадратичное время выполнения. Вопрос в том, действительно ли вам нужно сравнивать все возможные пары объектов или вам нужен какой-то порядок? –

+0

Пример: когда атрибуты установлены {Емкость, Требования}, выход может быть {{S5, S6}, {S1, S4}} Сортировка: как выполнять спортивные соревнования в подобной ситуации? – Wicia

ответ

1

псевдокод:

Шаг 1. HashMap<String, ArrayList<String>> hashMap = new HashMap<>();
Шаг 2. Для каждого объекта s сделать

String key = getSelectedAttributesValueInString(); 
if (!hashMap.containsKey(key)) { 
    hashMap.put(key, new ArrayList<String>()); 
} 
hashMap.get(key).add(s.getName); 

Здесь getSelectedAttributesValueInString является конкатенация всех выбранных атрибутов значения.

Например: объект s1 Атрибуты {Distance, Capacity} Функция возвращает ShortYES.

Шаг 3. Теперь напечатает значение ArrayList HashMap, которые имеют длину больше, чем 1.

Сложность анализа:

Ваш подход O (N^2)

Мой подход O (п) (Потому что HashMap добавляет и получает сложность O (1))

Смежные вопросы