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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите написать прогу hash-таблица 
:(
    Опции темы
Алёнка
Дата 22.2.2005, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Народ!Может кто-нибудь сможет мне помочь. Мне нужно написать прогу hash-таблица. Т.е. все операции с хэш-таблицей: поиск, добавить, найти, минимум.
PM MAIL   Вверх
sergejzr
Дата 22.2.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Начинай, мы поможем, если будут вопросы smile темка интересная.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
chaos
Дата 22.2.2005, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



на сколько я понимаю хаш таблица это в стл map и multimap
советую заглянуть в реализацию по этим классам, станет легче )
Ну а что не ясно обращайся, "поможем", как сказал sergej.z
PM WWW   Вверх
pablo
Дата 22.2.2005, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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



Цитата
на сколько я понимаю хаш таблица это в стл map и multimap
советую заглянуть в реализацию по этим классам, станет легче )
Ну а что не ясно обращайся, "поможем", как сказал sergej.z


Нет. Таблица хаш это не map, multimap, т.к они реализованы ввиде сбалансированного бинарного дерева.
Это чуток из другой оперы. smile



--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
chaos
Дата 22.2.2005, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



Цитата(pablo @ 22.2.2005, 18:28)
Цитата
на сколько я понимаю хаш таблица это в стл map и multimap
советую заглянуть в реализацию по этим классам, станет легче )
Ну а что не ясно обращайся, "поможем", как сказал sergej.z


Нет. Таблица хаш это не map, multimap, т.к они реализованы ввиде сбалансированного бинарного дерева.
Это чуток из другой оперы. smile

хорошо!!!
Объясни тогда что это такое, что бы знать на будущее smile
PM WWW   Вверх
sergejzr
Дата 22.2.2005, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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





--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Алёнка
Дата 22.2.2005, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



все внимательно прочитала. даже фигню какую то по аглицки. тока мало что поняла. про хэш таблицу нам на лекциях впаривали. я экзамен сдавала. что это такое я знаю. сама могу кому угодно объяснить. у меня проблема именно с программой.
PM MAIL   Вверх
sergejzr
Дата 22.2.2005, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Алёнка, а ссылку chaos попросил. smile

В чём проблема с программой? Не знаешь как начать? Как закончить? Уже есть наброски? Выкладывай что есть. (фигню по англицки не надо smile )


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
bel_nikita
Дата 22.2.2005, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Вот, примерчик ХЭШ smile
Код

#ifndef __id2string_h__
#define __id2string_h__

#include <wtypes.h>

class cIDStrings
{
 DWORD *pdwStringID;
 DWORD *pdwStringHash;
 char **pszStrings;
 char **pszCompareString;
 int iCapacity, iCount;
public:
 cIDStrings(int iMaxSize);
 ~cIDStrings(void);
 void  AddString(DWORD dwID, char *szString);
 int   FindIDByString(char *szString);
 char* FindStringByID(DWORD dwID);
};

#endif

Код

#include "id2String.h"

char szNULLString[2]="";

#define COMPUTE_HASH(StrLengh,String) ((StrLengh)&0xFFFF)|((BYTE)((String)[0])<<16)|((BYTE)((String)[1])<<24)

cIDStrings::cIDStrings(int iMaxSize)
{
 iCapacity=iMaxSize; iCount=0;
 pdwStringID      = (DWORD*)malloc(iCapacity*sizeof(DWORD));
 pdwStringHash    = (DWORD*)malloc(iCapacity*sizeof(DWORD));
 pszStrings       = (char**)malloc(iCapacity*sizeof(char*));
};

cIDStrings::~cIDStrings(void)
{
 if (pdwStringID)      free(pdwStringID),      pdwStringID=NULL;
 if (pdwStringHash)    free(pdwStringHash),    pdwStringHash=NULL;
 if (pszStrings)       free(pszStrings);       pszStrings=NULL;
 iCapacity=0; iCount=0;
};

void cIDStrings::AddString(DWORD dwID, char *szString)
{
 if ((iCount>=iCapacity)||(!pdwStringID)||(!pdwStringHash)||(!pszStrings)) return;
 pszStrings[iCount]       = szString;
 pdwStringID[iCount]      = dwID;
 pdwStringHash[iCount]    = COMPUTE_HASH(strlen(szString),szString);
 iCount++;
};

int cIDStrings::FindIDByString(char *szString)
{
 if ((iCount>=iCapacity)||(!pdwStringID)||(!pdwStringHash)||(!pszStrings)||(!szString)) return -1;
 char  **pszLines=pszStrings;
 DWORD *pdwHash=pdwStringHash, dwSize=iCount;
 int iLength=strlen(szString);
 DWORD dwHash=COMPUTE_HASH(iLength,szString);
 int iResult;
 __asm
 {
   mov edx,pszLines
   mov edi,pdwHash
   mov ecx,dwSize
   mov eax,dwHash
   cld
 fc_loop:
   jcxz fc_err_end
   repne scasd
   jnz fc_err_end
   push ecx
   push edi
   mov ebx,dwSize
   sub ebx,ecx
   dec ebx
   mov esi,[edx+4*ebx]
   mov edi,szString
   mov ecx,eax
   and ecx,0xFFFF
   repz cmpsb
   pop edi
   pop ecx
   jnz fc_loop
   mov iResult,ebx
   jmp fc_ok_end
 fc_err_end:
   xor ebx,ebx
   not ebx
   mov iResult,ebx
 fc_ok_end:
 };
 if (iResult>=0) iResult=pdwStringID[iResult];
 return iResult;
};

char* cIDStrings::FindStringByID(DWORD dwID)
{
 if ((iCount>=iCapacity)||(!pdwStringID)||(!pdwStringHash)||(!pszStrings)) return szNULLString;
 DWORD *pdwID=pdwStringID, dwSize=iCount;
 int iResult;
 __asm
 {
   mov edi,pdwID
   mov ecx,dwSize
   mov eax,dwID
   cld
   jcxz fc_err_end
   repne scasd
   jnz fc_err_end
   mov ebx,dwSize
   sub ebx,ecx
   dec ebx
   mov iResult,ebx
   jmp fc_ok_end
 fc_err_end:
   xor ebx,ebx
   not ebx
   mov iResult,ebx
 fc_ok_end:
 };
 if (iResult>=0) return pszStrings[iResult]; else return szNULLString;
};

Типа использование. Думаю понятно, особо объяснять не нужно
Код

 cIDStrings     *StrHelp;
 StrHelp=    new cIDStrings(12);
 StrHelp->AddString(ID_DIR,"DIR");
 StrHelp->AddString(ID_DEL,"DEL");
 StrHelp->AddString(ID_CD,"CD");
 StrHelp->AddString(ID_RD,"RD");
 StrHelp->AddString(ID_MD,"MD");
 StrHelp->AddString(ID_COPY,"COPY");
 StrHelp->AddString(ID_REN,"REN");
 StrHelp->AddString(ID_CMD_EXECUTE,"Command executing\r\n");
 StrHelp->AddString(ID_CMD_BAD,"Bad command\r\n");
 StrHelp->AddString(ID_CMD_BADPARAM,"Bad parameter(s)\r\n");

 dwCmdID=StrHelp->FindIDByString(pszCmd);

char *pszResult=StrHelp->FindStringByID(dwCmdResult);



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 23.2.2005, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



bel_nikita, а теперь без ассемблера и не только для стрингов, плиз smile


--------------------
user posted image
PM MAIL WWW   Вверх
pablo
Дата 23.2.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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



Цитата(chaos @ 22.2.2005, 18:48)
Цитата (pablo @ 22.2.2005, 18:28)
Цитата
на сколько я понимаю хаш таблица это в стл map и multimap
советую заглянуть в реализацию по этим классам, станет легче )
Ну а что не ясно обращайся, "поможем", как сказал sergej.z



Нет. Таблица хаш это не map, multimap, т.к они реализованы ввиде сбалансированного бинарного дерева.
Это чуток из другой оперы. 


хорошо!!!
Объясни тогда что это такое, что бы знать на будущее 


Извините за дизинформацию.
Map прекрасно подходит для этих целей, но надо прeдусмотреть выявление коллизий.

Согласно дяде Бъерну Страуструпу, для организации хеш таблиц в стандартной библиотеке предусмотрены два контейнера.

map<string, int> m1; //сравнение строк при помоши оператора <

map<string, int, Nocase> // сравнение строк при помощи оператора Nocase

hash_map<string, int, hfct> //хеширование при помощи hfct, бес этой функции хеширование будет при помощи Hash<string> и сравнение при помощи оператора ==

hash_map<string, int, hfct, eql> //хеширование при помощи hfct, сравнение при помощи eql









--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
Алёнка
Дата 24.2.2005, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



само задание звучит так: хэш таблица + минимум. для реализации минимума испльзовать кучу.
куча это такая штука, когда сыновья меньше чем отец.
т.е. самый главный папаша самый большой. его сыновья меньше. сыновья сыновей еще меньше и т.д.по крайней мере препод так объяснял.
пусть у нас будет 10 ячеек в хэш таблице. в хэш таблицу приходит данное с некоторым ключом например 13. оно помещается в ячейку 3. если придет данное с ключом 23. то оно поместится в ячейку 4 т.к. ячейка 3 уже занята. либо можно на каждой ячейке использовать указатель на ключ.
вот такие дела. smile
если честно проблема с самим заданием. ни начать ни закончить не могу. еще более или менее могу с вычматом разобратся, но указатели это не моё. а препод уже пообещал троих отчислить из-за того что группа большая smile.
а этот код который мне написал bel nikita он на ассемблере написан? я уже сотню раз такое встречала но нас такому не учили. он чем то на C++ похож. а насколько они похожи мне кто нибудь сказать может?

Это сообщение отредактировал(а) Алёнка - 24.2.2005, 15:33
PM MAIL   Вверх
En_t_end
Дата 24.2.2005, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Алёнка 
У асм'а с С++ ничего общего нет. Просто большинство компиляторов для( + если я не ошибаюсь, в си вообще стандартом предусмотрены вставки из асм'а) си поддерживает вставки из асм'а + дебугер разбирает код переведенный на асм.

Это сообщение отредактировал(а) En_t_end - 24.2.2005, 16:34
PM MAIL ICQ Skype GTalk Jabber   Вверх
Алёнка
Дата 24.2.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



хорошо. а как ту штуку с ассемблера на с++ перевести. мне этот язык абсолютно незнаком. я пару раз видела какие то программы которые переводят с одного языка на другой, но это было давно. где их можно найти?
PM MAIL   Вверх
En_t_end
Дата 24.2.2005, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Не знаю, я только встречал дизассемблеры - программы дизассемблирующие машинный код. Одним я как раз активно пользуюсь. smile
Логически возможен перевод с одного языка на другой, но я о таком не слышал, набери в гугле запрос. smile
PM MAIL ICQ Skype GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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