Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Help with hash function!

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
PolAR



Зарегистрирован: 01.11.2004
Сообщения: 133

СообщениеДобавлено: Вс Май 15 2005 15:10    Заголовок сообщения: Help with hash function! Ответить с цитатой

Sorry for english, still cannot set RU typing on my Linux Smile And my english is not really good

Problem:
I write program, working with network. I need to create & support TCP connection table. So i need halp with creating hash function, wich can associate INT with Socket ( IP1:port1-IP2:port2)!
and somehow need to remember that IP1 and IP2 can change their places ( because packets goes in to ways TUDA & OBRATNO Smile Exclamation

I want to find the best way, because perfomance in my program is one of the MAINest things.

Language is C++

P.S. program is capture all packets Exclamation
_________________
Come Together!! Right Now....
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
критикан



Зарегистрирован: 18.02.2005
Сообщения: 247

СообщениеДобавлено: Пн Май 16 2005 16:41    Заголовок сообщения: how-to-fly2elephant Ответить с цитатой

It's no need to calculate hash value from IP1:port1-IP2:port2 pair for it is already too short
-----------------------------
how-to-fly2elephant
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
PolAR



Зарегистрирован: 01.11.2004
Сообщения: 133

СообщениеДобавлено: Вт Май 17 2005 08:37    Заголовок сообщения: Re: how-to-fly2elephant Ответить с цитатой

критикан писал(а):
It's no need to calculate hash value from IP1:port1-IP2:port2 pair for it is already too short
-----------------------------
how-to-fly2elephant


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

Я вообще решил эту проблему: сварганил класс ( Socket )с 4-мя полями данных ( 2 для IP и 2 для портов ) и загнал в map<Socket, data> .
Но если есть еще варианты - буду благодарен!!
_________________
Come Together!! Right Now....
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
критикан



Зарегистрирован: 18.02.2005
Сообщения: 247

СообщениеДобавлено: Вт Май 17 2005 16:04    Заголовок сообщения: how-to-fly2whale Ответить с цитатой

PolAR писал(а):
А как выполнять преобразование (или слияние )этих 4-х типов к одному, чтобы получит необходимый индекс в таблице?

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

Но если гражданин желает принципиально пользовать однократный поиск, то можно упорядочить (например, по возрастанию) элементы внутри четвёрки и, соответственно, перед поиском упорядочивать искомую четвёрку (при таком варианте быстрым должно быть упорядочивание). Главное -- обеспечить уникальность положения элемента внутри четвёрки. Кстати, если использовать хэш для обеспечения уникальности, то упорядочивать всё равно придётся.
-----------------------------
Re: how-to-fly2whale
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Wladimir



Зарегистрирован: 02.03.2005
Сообщения: 150
Откуда: Ставропольский край

СообщениеДобавлено: Вт Май 17 2005 20:34    Заголовок сообщения: Ответить с цитатой

2 Polar:
Но IP-адрес-то - по определению - 4-байтовое целое (т.е. unsigned int или long). Разве с целыми есть проблемы?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
PolAR



Зарегистрирован: 01.11.2004
Сообщения: 133

СообщениеДобавлено: Ср Май 18 2005 10:40    Заголовок сообщения: Ответить с цитатой

Wladimir писал(а):
2 Polar:
Но IP-адрес-то - по определению - 4-байтовое целое (т.е. unsigned int или long). Разве с целыми есть проблемы?


С ним нет проблем, а вот когда их 2, да еще 2 порта ( unsigned short ) - и ключем в таблице является именно комбинация всех 4-х переменных!

Я так сделал: при формировании ключа сравниваю IP между собой, например:
есть класс:
Код:
class Sock_Pair{
    long ip1,ip2; // ip-addrs
    u_short p1,p2;// ports
     ...
}

есть IP1:port1 IP2:port2,тогда :
Код:
if(IP1>IP2){ip1=IP2; ip2=IP1; p1=port2; p2=port1;}
else{наоборот}

Класс Sock_Pair является ключем в
Код:
map<Sock_Pair, MY_DATA> table


Меня интересует насколько производительна будет эта схема!
Вариант с 4-хкратным поиском тоже хорош ( если использовать какой-нить метод золотого сечения ? ).
Короче - которое решение быстрее?

map выигрывает за счет того что не надо ниче делать Smile
_________________
Come Together!! Right Now....
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Wladimir



Зарегистрирован: 02.03.2005
Сообщения: 150
Откуда: Ставропольский край

СообщениеДобавлено: Ср Май 18 2005 20:19    Заголовок сообщения: Ответить с цитатой

А хеш-функции библиотеки Boost (boost.org) не смотрел?
Расширение STL, не вошедшее в прошлый стандарт C++.
Наверняка вполне пригоден и обычный перебор - но если тебя интересует хеш, там были несколько типовых релизаций.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...