Я думал, что буду использовать log4j - как упомянуто @ScArcher2, просто потому что все делают. Но после контакта с обеими опциями, я узнал, что java.util.logging достаточно далек достаточный для большинства моих потребностей - и я говорю об огромной системе со многим сотрудничеством компонентов распространения.
Так, по-моему, нет никакой потребности использовать альтернативные сервисы. Java.util.logging достаточно мощен для большинства случаев.
Предположим, что требуемая сумма = R
Как насчет сортировки массива, а затем перехода с обоих концов ?
Я не понимаю, почему подход с хеш-таблицей неэффективен, по крайней мере, с точки зрения анализа алгоритмов - по общему признанию, с точки зрения локальности памяти, это может быть довольно плохо. В любом случае, просканируйте массив дважды ...
Первое сканирование - поместите все элементы массива в хеш-таблицу - всего O (n). Отдельные вставки амортизируются только O (1), но аккуратная вещь о том, как работает амортизированный анализ, означает, что O (n) является абсолютным, а не амортизированным.
Второе сканирование - проверка (сумма - текущий) в хеш-таблице - O (n) всего.
Это превосходит методы сортировки и поиска O (n log n), по крайней мере, теоретически.
Затем обратите внимание, что вы можете объединить два сканирования в одно. Вы можете обнаружить пару, как только встретите вторую из этой пары во время первого сканирования. В псевдокоде ...
for i in array.range
hashset.insert (array [i])
diff = sum - array [i]
if hashset.includes (diff)
output diff, array [i]
Если вам нужны позиции элементов, используйте хэш-карту и сохраните в ней позиции элементов. Если вам нужно справиться с дублированием, вам может потребоваться сохранить счетчики в хэш-карте. Для позиций и дубликатов вам может понадобиться хэш-карта начальных указателей для связанных списков позиций.
Это делает предположения о реализации хеш-таблицы, но довольно безопасные, учитывая обычные реализации на большинстве современных языков и библиотек.
BTW - объединение сканированных изображений не следует рассматривать как оптимизацию. Накладные расходы на итерацию должны быть незначительными. Проблемы с локализацией памяти могут сделать один проход немного более эффективным для очень больших массивов, но реальные проблемы с локализацией памяти все равно будут в поисках по хеш-таблице.
ИМО единственная реальная причина для объединения сканирований заключается в том, что вы хотите, чтобы сообщалась только каждая пара один раз - обработка этого в подходе с двумя сканированиями была бы немного сложнее.
вам может потребоваться хранить счетчики в хэш-карте. Для позиций и дубликатов вам может понадобиться хэш-карта начальных указателей для связанных списков позиций.Это делает предположения о реализации хеш-таблицы, но довольно безопасные, учитывая обычные реализации на большинстве современных языков и библиотек.
BTW - объединение сканированных изображений не следует рассматривать как оптимизацию. Накладные расходы на итерацию должны быть незначительными. Проблемы с локализацией памяти могут сделать один проход немного более эффективным для очень больших массивов, но реальные проблемы с локализацией памяти все равно будут в поисках по хеш-таблице.
ИМО единственная реальная причина для объединения сканирований заключается в том, что вы хотите, чтобы сообщалась только каждая пара один раз - обработка этого в подходе с двумя сканированиями была бы немного сложнее.
вам может потребоваться хранить счетчики в хэш-карте. Для позиций и дубликатов вам может понадобиться хэш-карта начальных указателей для связанных списков позиций.Это делает предположения о реализации хеш-таблицы, но довольно безопасные, учитывая обычные реализации на большинстве современных языков и библиотек.
BTW - объединение сканированных изображений не следует рассматривать как оптимизацию. Накладные расходы на итерацию должны быть незначительными. Проблемы с локализацией памяти могут сделать один проход немного более эффективным для очень больших массивов, но реальные проблемы с локализацией памяти все равно будут в поисках по хеш-таблице.
ИМО единственная реальная причина для объединения сканирований заключается в том, что вы хотите, чтобы сообщалась только каждая пара один раз - обработка этого в подходе с двумя сканированиями была бы немного сложнее.
вам может понадобиться хэш-карта начальных указателей для связанных списков позиций.Это делает предположения о реализации хеш-таблицы, но довольно безопасные, учитывая обычные реализации в большинстве современных языков и библиотек.
Кстати - объединение сканирований не должно не следует рассматривать как оптимизацию. Накладные расходы на итерацию должны быть незначительными. Проблемы с локализацией памяти могут сделать один проход немного более эффективным для очень больших массивов, но реальные проблемы с локализацией памяти все равно будут в поисках по хеш-таблице.
ИМО единственная реальная причина для объединения сканирований заключается в том, что вы хотите, чтобы сообщалась только каждая пара один раз - обработка этого в подходе с двумя сканированиями была бы немного сложнее.
вам может понадобиться хэш-карта начальных указателей для связанных списков позиций.Это делает предположения о реализации хеш-таблицы, но довольно безопасные, учитывая обычные реализации в большинстве современных языков и библиотек.
Кстати - объединение сканирований не должно не следует рассматривать как оптимизацию. Накладные расходы на итерацию должны быть незначительными. Проблемы с локализацией памяти могут сделать один проход немного более эффективным для очень больших массивов, но реальные проблемы с локализацией памяти все равно будут в поисках по хеш-таблице.
ИМО единственная реальная причина для объединения сканирований заключается в том, что вы хотите, чтобы сообщалась только каждая пара один раз - обработка этого в подходе с двумя сканированиями была бы немного сложнее.
но довольно безопасные, учитывая обычные реализации на большинстве современных языков и библиотек.Кстати - объединение сканирований не следует рассматривать как оптимизацию. Накладные расходы на итерацию должны быть незначительными. Проблемы с локализацией памяти могут сделать один проход немного более эффективным для очень больших массивов, но реальные проблемы с локализацией памяти все равно будут в поисках по хеш-таблице.
ИМО единственная реальная причина для объединения сканирований заключается в том, что вы хотите, чтобы сообщалась только каждая пара один раз - обработка этого в подходе с двумя сканированиями была бы немного сложнее.
но довольно безопасные, учитывая обычные реализации на большинстве современных языков и библиотек.Кстати - объединение сканирований не следует рассматривать как оптимизацию. Накладные расходы на итерацию должны быть незначительными. Проблемы с локализацией памяти могут сделать один проход немного более эффективным для очень больших массивов, но реальные проблемы с локализацией памяти все равно будут в поисках по хеш-таблице.
ИМО единственная реальная причина для объединения сканирований заключается в том, что вы хотите, чтобы сообщалась только каждая пара один раз - обработка этого в подходе с двумя сканированиями была бы немного сложнее.