Используете ASCII символьную сумму для бинарного поиска строки? - PullRequest
0 голосов
/ 08 октября 2011

Я делаю мини-проект - базу данных студентов, используя связанный список, часть моего первого семестра.Спецификация состоит в том, что пользователь должен иметь возможность искать запись, используя инициалы имени, которые в структуре имеют тип char [4].

Теперь есть два способа поиска инициалов, один из которых - линейный поиск, которыйдействительно неэффективно (на самом деле меня это не волнует, потому что это не будет основным делом какой-то фирмы и т. д.) или бинарным поиском.

Бинарный поиск требует сортированных массивов, поэтому я подумал, что если поискиспользование ASCII-суммы в строке имело бы смысл?

Например, запись 1 имеет начальный = "AB", а запись 2 имеет "CD".Суммы обоих ASCII равны 65 + 66 = 131 и 67 + 68 = 135, а список отсортирован по инициалам (с использованием strcmp).

Поэтому, когда пользователь вводит «AB», я просто посмотрю наномер 131, и если есть, показать запись?

Это может быть очень плохой идеей, пожалуйста, не сердитесь на меня и не объясните, почему она плохая.

Ответы [ 4 ]

1 голос
/ 08 октября 2011

Если бы я правильно понял, это был бы очень неправильный способ поиска инициалов. Первая проблема, которую я вижу:

AD = 65+68 = 133
BC = 66+67 = 133

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

AD = 65.68 = 6568
BC = 66.67 = 6667

Много не спал, возможно, все, что я пишу, совсем не так.

1 голос
/ 08 октября 2011

Похоже, хорошее начало для меня. Как вы будете различать «TON» и «NOT»? Суммируют ли они одно и то же значение («столкновение»)? Вы предлагаете двухуровневый подход? Во-первых, с помощью поиска ascii-sum, а во-вторых, каким-то методом, чтобы разобраться в столкновениях? Похоже, здесь есть хорошая информация о хешировании: http://burtleburtle.net/bob/hash/index.html

0 голосов
/ 10 октября 2011

Если вы собираетесь построить отсортированный массив в любом случае, нет смысла вычислять это (с потерями, смещенное) хеш-значение и искать его в отсортированном списке - будет так же быстро выполнить бинарный поиск всписок для инициалов напрямую.

0 голосов
/ 08 октября 2011

Будет много столкновений.Перейти на расширяемое хеширование:

Википедия

Алгоритм объяснил

...