Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Напишите пожалуйста примеры работы с перемешанными, работа с перемешанными таблицами 
:(
    Опции темы
dominiqtm
Дата 26.3.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.3.2009

Репутация: нет
Всего: нет



Необходимо написать программу для работы с перемешанной таблицей, использующей перемешивание сложением, по запросам оператора.
Перемеганная таблица организована вектором; каждый элемент таблицы имеет следующую структуру:
Struct Item
{
int busy; //признак занятости элемента
int key; /*ключ элемента*/
int release; //номер версии элемента
char *info /*указатель на информацию*/
};

Нигде не могу найти статей или хоть какого нть кода для работы с перемешанными таблицами. Надеюсь на вашу помощьsmile)))) smile 
PM MAIL   Вверх
azesmcar
Дата 26.3.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

перемешивание сложением


что это? немного поподробнее, ничего не понял.
PM   Вверх
dominiqtm
Дата 26.3.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.3.2009

Репутация: нет
Всего: нет



Могу написать полный текст программы - выглядит так.



Написать программу для работы с перемешанной таблицей, использующей перемешивание сложением, по запросам оператора.
Перемеганная таблица организована вектором; каждый элемент таблицы имеет следующую структуру:
Struct Item{
int busy;
int key; /*ключ элемента*/
int release;
char *info /*указатель на информацию*/
};

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

Разработать два варианта программы:
1)    и сама таблица, и информация, относящаяся к элементу таблицы, храняться в основной памяти;
2)    и сама таблица, и информация, относящаяся к элементу таблицы, храняться во внешней памяти (используется двоичный файл доступа). Все операции выполняются с таблицей, размещенной в основной памяти. Таблица считывается из файла (или создается в первый раз) в начале сеанса работы и записывается в конце сеанса работы. Информация, относящаяся к элементу таблицы, записывается в файл сразу же при выполнении операции включения в таблицу. Имя файла вводится по запросу из программы.

Примечания:
1.    программа должна содержать нескотлко функций; функция main должна выполнять: вывод меню; ввод и анализ ответа; вызов на исполнение требуемой функции;
2.    в программе нужно предусмотреть проверку правильности ввода данных;
3.    для второго варианта следует модифицировать структуру, определяющую элемент таблицы, включив в неё длину информации и её смещение в файл;
а для работы с файлом использовать функции пакета stdio.h ; чтение и запись выполнять с помощью fread() и fwrite(), в которых должна быть указана реальная длина информации.

Вот такая вот шлыпа smile Могу предположить что перемешанная таблица это хэш-таблица  smile  Как с этим работать не знаю поэтому интересуюсь где взять хоть какую нибудь информацию.
PM MAIL   Вверх
azesmcar
Дата 26.3.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

Вот такая вот шлыпа smile Могу предположить что перемешанная таблица это хэш-таблица  smile  Как с этим работать не знаю поэтому интересуюсь где взять хоть какую нибудь информацию. 


хэш-таблица  есть в некоторых реализациях STL. В стандарт они не вошли. Но вы уверенны что это то что вам нужно? Лично мне термин "перемешанная таблица" ничего не говорит.

Добавлено через 2 минуты и 12 секунд
посмотрите
http://www.stlport.com/ и http://www.sgi.com/

разные реализации, в обоих должен быть hash_set и hash_map
PM   Вверх
dominiqtm
Дата 26.3.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.3.2009

Репутация: нет
Всего: нет



я так понимаю что необходимо описать hash table через линейный однонаправленный список  smile 
PM MAIL   Вверх
GoldFinch
Дата 26.3.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



azesmcar, а std::map разве не оно?
PM MAIL ICQ   Вверх
azesmcar
Дата 26.3.2009, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

azesmcar, а std::map разве не оно? 


Хеш таблица реализует интерфейс ассоциативного массива, но внутреняя структура данных отличается от std::map.
http://ru.wikipedia.org/wiki/%D0%A5%D0%B5%...%B8%D1%86%D0%B0
PM   Вверх
GoldFinch
Дата 26.3.2009, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



задача вроде простая, видимо поле key это хеш строки-ключа, простейший хеш это
  h=h*M+s[i]
где M-некоторая константа-множитель, какоенибудь большое число типа 0x80580501
PM MAIL ICQ   Вверх
azesmcar
Дата 26.3.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

h=h*M+s[i]


такой способ подсчета хеша выдаст вам тоже самое для двух разных строк: Например для слов "кот" и "ток"

Добавлено @ 15:27
список алгоритмов для хэш функций
  • Adler-32
  • CRC
  • SHA-1
  • SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
  • HAVAL
  • MD2
  • MD4
  • MD5
  • N-Hash
  • RIPEMD-160
  • RIPEMD-256
  • RIPEMD-320
  • Skein
  • Snefru
  • Tiger (TTH)
  • Whirlpool
  • ГОСТ Р34.11-94 (ГОСТ 34.311-95)
  • IP Internet Checksum (RFC 1071)


Это сообщение отредактировал(а) azesmcar - 26.3.2009, 15:27
PM   Вверх
GoldFinch
Дата 26.3.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



azesmcar, перед тем как чтото писать, лучше немного подумать, это несложно, попробуй

Добавлено через 6 минут и 14 секунд
Цитата(azesmcar @  26.3.2009,  15:19 Найти цитируемый пост)
список алгоритмов для хэш функций

    * Adler-32
    * CRC
    * SHA-1
    * SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
    * HAVAL
    * MD2
    * MD4
    * MD5
    * N-Hash
    * RIPEMD-160
    * RIPEMD-256
    * RIPEMD-320
    * Skein
    * Snefru
    * Tiger (TTH)
    * Whirlpool
    * ГОСТ Р34.11-94 (ГОСТ 34.311-95)
    * IP Internet Checksum (RFC 1071)

осталось только прочитать их описания и понять что больше половины не подходят т.к. нужен 32-разрядный хеш короткой строки
PM MAIL ICQ   Вверх
azesmcar
Дата 26.3.2009, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

azesmcar, перед тем как чтото писать, лучше немного подумать, это несложно, попробуй 


у меня нету желания с тобой спорить..но думать не помешало бы тебе. тут и пробовать ничего не надо чтобы понять, люди долго думали и придумывали алгоритмы для расчета хэша. Этот примитив тут однозначно не прокатит, это раз. Во вторых: твой множитель не добавляет НИЧЕГО!!! абсолютно НИЧЕГО! никакой гарантии что хеш не повторится, а только увеличивает вероятность что будет переполнение. 

но раз ты настаиваешь - на, проверяй сколько душе угодно.

Код

int get_hash(const std::string& s)
{
    int h = 1;
    for (std::string::const_iterator it = s.begin(); it != s.end(); ++it)
    {
        h *= 0x80580501 + *it;
    }
    return h;
}

int main ()
{
    std::string s1 = "tok";
    std::string s2 = "kot";

    std::cout << get_hash( s1 ) << "\n" << get_hash( s2 ) << std::endl;
}



Добавлено через 2 минуты и 27 секунд
Цитата

осталось только прочитать их описания и понять что больше половины не подходят т.к. нужен 32-разрядный хеш короткой строки 


замечательно..но другая половина - подходит, я и не предлагал использовать все

Это сообщение отредактировал(а) azesmcar - 26.3.2009, 15:40
PM   Вверх
mes
Дата 26.3.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(azesmcar @  26.3.2009,  14:38 Найти цитируемый пост)
       h *= 0x80580501 + *it;

a жульничать не хорошо smile
попробуйте так :
Код

      h *= 0x80580501;
      h += *it;

smile


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 26.3.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

      h *= 0x80580501;
      h += *it;


я писал так как было написано, где тут жульничество?

Добавлено через 4 минуты и 12 секунд
mes это бы сработало - еслиб не переполнение..а поскольку тут идет переполнение буффера, то есть вероятность что для разных слов разной длины будет тот же хеш. 
PM   Вверх
mes
Дата 26.3.2009, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(azesmcar @  26.3.2009,  14:52 Найти цитируемый пост)
я писал так как было написано, где тут жульничество? 


Цитата(GoldFinch @  26.3.2009,  14:06 Найти цитируемый пост)
 h=h*M+s[i]

не равно
Цитата(azesmcar @  26.3.2009,  14:38 Найти цитируемый пост)
        h *= 0x80580501 + *it;



Это сообщение отредактировал(а) mes - 26.3.2009, 15:58


--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 26.3.2009, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



azesmcar, ты написал h=h*(M+s[i])
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0717 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.