Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2009, 15:29   #1
RunForest
Новичок
Джуниор
 
Регистрация: 08.08.2009
Сообщений: 2
По умолчанию Хеширование

Задача. Есть файл с имейлами, каждый начинается с новой строки. Их примерно 1 миллион. Пользователь вводит сервер (mail.ru к примеру) и ему выдаются все адреса из файла, соответствующие этому серверу. Собственно нужно этот файл каким-то образом хешировать, чтобы все проходило относительно быстро. Подскажите, кто знает. Желательно поскорее, если есть возможность. Заранее спасибо.

ПС Пишу под .NET, поэтому оставил тему тут.
RunForest вне форума Ответить с цитированием
Старый 08.08.2009, 17:23   #2
Mixasik
New Delphi Coder
Форумчанин Подтвердите свой е-майл
 
Аватар для Mixasik
 
Регистрация: 20.07.2008
Сообщений: 874
По умолчанию

Это называется кэширование. Самое простое хранить все ящики отсортированные по алфавиту(всмысле домены отсортированы по алфавиту) + хранить файл с индексами первого вхождения домена в файл, потом находить по заданной букве, из индекс-файла по домену считать позицию первого вхождения в БД.
Например:
его файл индекс будет содержать вид(на примере не записи а текста)
Цитата:
list.ru 1
mail.ru 3
Если нужны только list.ru то найдя в индексе его первое вхождение вы можете просто скопировать все записи с 1 по позицию вхождения слудующего домена - одну запись.

p.s. Не знаю понятно ли объяснил. Реализовать легко.
Страх это слабость и потому, кто испугался уже побежден.

Последний раз редактировалось Mixasik; 08.08.2009 в 17:26.
Mixasik вне форума Ответить с цитированием
Старый 08.08.2009, 18:12   #3
RunForest
Новичок
Джуниор
 
Регистрация: 08.08.2009
Сообщений: 2
По умолчанию

Спасибо, более-менее понял.

А каким функциями реализовать в .NET? Я пользуюсь таким вариантом:
StreamReader^ nR;
nR=gcnew StreamReader("mails.txt");
Хороший это вариант или плохой? Как мне можно с его помощью сразу попасть в определенную строку?
RunForest вне форума Ответить с цитированием
Старый 10.08.2009, 12:31   #4
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Вообще есть метод
Код:
int Read(byte[] buf, int offset, int numBytes);
но проблема в том, что ты не знаешь свой offset(это индекс с которого начать читать). Есть другие методы кэширования, почитай про них.
Hollander вне форума Ответить с цитированием
Старый 10.08.2009, 15:21   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Сделайте хеш-таблицу с динамическими списками.
Индекс строчки - ASCII-код первого символа. В следствие чего будете индексировать по первому символу строки.
Ну а закешировать это все прийдется всетаки.
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хеширование для алгоритма TEA на Си. NooDle Общие вопросы C/C++ 4 15.10.2010 20:50
Хеширование для алгоритма TEA на C. NooDle Помощь студентам 0 13.04.2009 12:01