В книге «Алгоритм проектирования Руководство» по Skiena, вычисляя режим (наиболее частый элемент) из набора, как говорят, Q (п лог п) нижняя граница (это озадачивает меня) , но также (верно, я думаю), что для вычисления режима не существует более быстрого алгоритма наихудшего случая. Я только озадачен нижней границей Ω (n log n).Вычисление режима (наиболее частого элемента) набора в линейном времени?
Смотрите страницу книги на Google Books
Но, конечно, это может в некоторых случаях быть вычислен в линейное время (лучший случай), например, с помощью кода Java, как показано ниже (находит наиболее частого символа в строке), «трюк» заключается в подсчете случаев с использованием хеш-таблицы. Это кажется очевидным.
Итак, что мне не хватает в моем понимании проблемы?
EDIT: (Тайна решена) Как StriplingWarrior указывает, нижняя граница не имеет место, если используются только сравнения, т.е. без индексации памяти, смотрите также: http://en.wikipedia.org/wiki/Element_distinctness_problem
// Linear time
char computeMode(String input) {
// initialize currentMode to first char
char[] chars = input.toCharArray();
char currentMode = chars[0];
int currentModeCount = 0;
HashMap<Character, Integer> counts = new HashMap<Character, Integer>();
for(char character : chars) {
int count = putget(counts, character); // occurences so far
// test whether character should be the new currentMode
if(count > currentModeCount) {
currentMode = character;
currentModeCount = count; // also save the count
}
}
return currentMode;
}
// Constant time
int putget(HashMap<Character, Integer> map, char character) {
if(!map.containsKey(character)) {
// if character not seen before, initialize to zero
map.put(character, 0);
}
// increment
int newValue = map.get(character) + 1;
map.put(character, newValue);
return newValue;
}
Ничего не упоминается в списке ошибок: http://www.cs.sunysb.edu/~skiena/algorist/book/errata –
Не удается прочитать страницу. Некоторое диковинное послание, по-видимому, датское. –
Измените google.dk на google.com, и он будет работать. – StriplingWarrior