У меня есть массив, содержащий имена элементов. Я хочу дать пользователю возможность создавать элементы без указания их имени, поэтому моя программа должна будет предоставить уникальное имя по умолчанию, например «Item 1».Эффективный алгоритм для поиска первого доступного имени
Проблема заключается в том, что имя должно быть уникальным, поэтому я должен проверить весь массив для этого имени по умолчанию, и если есть элемент с тем же именем, я должен изменить имя как «Item 2» и так что пока я не найду доступное имя.
Очевидное решение будет что-то вроде этого:
String name = "Item ";
for (int i = 0; !isAvailable(name + i) ; i++);
Моя проблема с этим алгоритмом, что он работает в O (N^2).
Интересно, существует ли известный (или новый) более эффективный алгоритм для решения этого случая.
Другими словами, мой вопрос заключается в следующем: существует ли какой-либо алгоритм, который найдет первое большее, чем нулевое число, которое доза НЕ существует в данном массиве и работает меньше, чем N^2?
Должно ли это имя быть уникальным или оно должно быть первой доступной строкой в последовательности «Пункт 1», «Пункт 2» и т. Д.? Вы можете значительно снизить ожидаемое время исполнения, выбрав научное имя («Item xF3g7a»). Вы также можете улучшить массив для структуры данных: если порядок не важен, не используйте массив, и, если важно, возможно, сохраните вторичный индекс имен, а также массив. –
+1 Ace вопрос! –