![]() |
|
Модераторы: bsa |
![]()
|
|
| dominiqtm |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.3.2009 Репутация: нет Всего: нет |
Необходимо написать программу для работы с перемешанной таблицей, использующей перемешивание сложением, по запросам оператора.
Перемеганная таблица организована вектором; каждый элемент таблицы имеет следующую структуру: Struct Item { int busy; //признак занятости элемента int key; /*ключ элемента*/ int release; //номер версии элемента char *info /*указатель на информацию*/ }; Нигде не могу найти статей или хоть какого нть кода для работы с перемешанными таблицами. Надеюсь на вашу помощь |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
что это? немного поподробнее, ничего не понял. |
|||
|
||||
| dominiqtm |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.3.2009 Репутация: нет Всего: нет |
Могу написать полный текст программы - выглядит так.
Написать программу для работы с перемешанной таблицей, использующей перемешивание сложением, по запросам оператора. Перемеганная таблица организована вектором; каждый элемент таблицы имеет следующую структуру: Struct Item{ int busy; int key; /*ключ элемента*/ int release; char *info /*указатель на информацию*/ }; Максимальный размер таблицы ограничен (для задания максимального размера таблицы использовать константу) Предусмотреть следующие операции: - включение нового элемента в таблицу при условии, что в таблице не может быть двух элементов с одинаковыми ключами ; если при включении нового элемента возникает такая ситуация, на экран должно быть выведено сообщение об ошибке; - поиск элемента по заданному ключу и вывод на экран значения ключа и информации (символьной строки) для найденного элемента или сообщение об ошибке, если элемент не найден; - удаление из таблицы всех версий элемента, заданного ключом, или конкретной версии элемента, также заданного своим ключом, без организации таблицы; - вывод содержимого таблицы на экран. Разработать два варианта программы: 1) и сама таблица, и информация, относящаяся к элементу таблицы, храняться в основной памяти; 2) и сама таблица, и информация, относящаяся к элементу таблицы, храняться во внешней памяти (используется двоичный файл доступа). Все операции выполняются с таблицей, размещенной в основной памяти. Таблица считывается из файла (или создается в первый раз) в начале сеанса работы и записывается в конце сеанса работы. Информация, относящаяся к элементу таблицы, записывается в файл сразу же при выполнении операции включения в таблицу. Имя файла вводится по запросу из программы. Примечания: 1. программа должна содержать нескотлко функций; функция main должна выполнять: вывод меню; ввод и анализ ответа; вызов на исполнение требуемой функции; 2. в программе нужно предусмотреть проверку правильности ввода данных; 3. для второго варианта следует модифицировать структуру, определяющую элемент таблицы, включив в неё длину информации и её смещение в файл; а для работы с файлом использовать функции пакета stdio.h ; чтение и запись выполнять с помощью fread() и fwrite(), в которых должна быть указана реальная длина информации. Вот такая вот шлыпа |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
хэш-таблица есть в некоторых реализациях STL. В стандарт они не вошли. Но вы уверенны что это то что вам нужно? Лично мне термин "перемешанная таблица" ничего не говорит. Добавлено через 2 минуты и 12 секунд посмотрите http://www.stlport.com/ и http://www.sgi.com/ разные реализации, в обоих должен быть hash_set и hash_map |
|||
|
||||
| dominiqtm |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 26.3.2009 Репутация: нет Всего: нет |
я так понимаю что необходимо описать hash table через линейный однонаправленный список
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
azesmcar, а std::map разве не оно?
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Хеш таблица реализует интерфейс ассоциативного массива, но внутреняя структура данных отличается от std::map. http://ru.wikipedia.org/wiki/%D0%A5%D0%B5%...%B8%D1%86%D0%B0 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
задача вроде простая, видимо поле key это хеш строки-ключа, простейший хеш это
h=h*M+s[i] где M-некоторая константа-множитель, какоенибудь большое число типа 0x80580501 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
такой способ подсчета хеша выдаст вам тоже самое для двух разных строк: Например для слов "кот" и "ток" Добавлено @ 15:27 список алгоритмов для хэш функций
Это сообщение отредактировал(а) azesmcar - 26.3.2009, 15:27 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
azesmcar, перед тем как чтото писать, лучше немного подумать, это несложно, попробуй
Добавлено через 6 минут и 14 секунд осталось только прочитать их описания и понять что больше половины не подходят т.к. нужен 32-разрядный хеш короткой строки |
|||
|
||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
у меня нету желания с тобой спорить..но думать не помешало бы тебе. тут и пробовать ничего не надо чтобы понять, люди долго думали и придумывали алгоритмы для расчета хэша. Этот примитив тут однозначно не прокатит, это раз. Во вторых: твой множитель не добавляет НИЧЕГО!!! абсолютно НИЧЕГО! никакой гарантии что хеш не повторится, а только увеличивает вероятность что будет переполнение. но раз ты настаиваешь - на, проверяй сколько душе угодно.
Добавлено через 2 минуты и 27 секунд
замечательно..но другая половина - подходит, я и не предлагал использовать все Это сообщение отредактировал(а) azesmcar - 26.3.2009, 15:40 |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
a жульничать не хорошо попробуйте так :
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
я писал так как было написано, где тут жульничество? Добавлено через 4 минуты и 12 секунд mes это бы сработало - еслиб не переполнение..а поскольку тут идет переполнение буффера, то есть вероятность что для разных слов разной длины будет тот же хеш. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
не равно Это сообщение отредактировал(а) mes - 26.3.2009, 15:58 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
azesmcar, ты написал h=h*(M+s[i])
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |