Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм "строка в число однозначно" 
:(
    Опции темы
wesadex
Дата 15.2.2006, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



может где-то уже есть, но не нашел...
Всем привет!
Помогите плииз, может кто делал уже:
Нужно: из строки неопределенной (определенной) длины сделать число так, чтобы эта строка однозначно определялась числом, т.е. эта строка - это число, другая строка - другое число и не иначе. Число должно быть максимально возможно коротким. Если усложнить: число должно быть от 0 до 9. Т.е. из строки получается число, но только из какой-то определенной строки получится скажем 8, а изо всех остальных - другое...
smile
PM MAIL   Вверх
Демо
Дата 15.2.2006, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Это невозможно.


--------------------
    
PM MAIL ICQ Skype   Вверх
ТоляМБА
Дата 15.2.2006, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


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

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



Приведи пример чего ты хочешь. Например строка - из нее число 1. И так строки три. Опиши критерий присвоения числа к строке. По-моему ты имеешь ввиду что-то типа id в БД?
PM   Вверх
Akella
Дата 15.2.2006, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



а если строк 1000, как можно однозначно обозначить строку от 0 до 9???
PM MAIL   Вверх
Демо
Дата 15.2.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Akella @ 15.2.2006, 12:23 Найти цитируемый пост)
а если строк 1000, как можно однозначно обозначить строку от 0 до 9???


Да даже если использовать числа длиной 20 знаков, 30 знаков... Всегда найдется строка, хеш которой будет совпадать с уже существующим...


--------------------
    
PM MAIL ICQ Skype   Вверх
wesadex
Дата 15.2.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хорошо, а если усложнение убрать и попытаться уложиться в три десятичных разряда?
Сколько значений может принимать хэш-функция от строки длиной 20 разрядов, в которой только буквы латиницы (A-F заглавные) и цифры (написание шестнадцатиричного числа строкой)?
Или вот так еще можно вопрос задать: какой длины должна быть строка, чтобы результат возни с ней умещался в диапазон 0-999 и однозначно определял строку? Ну и соответственно какой алгоритм "даст" наибольшую длину строки?

Это сообщение отредактировал(а) wesadex - 15.2.2006, 13:09
PM MAIL   Вверх
Демо
Дата 15.2.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Функция получения хеша:

Код

function TDPJWHashEx(const aKey : string) : Cardinal;
var
  G : Cardinal;
  i : integer;
  Hash : Cardinal;
begin
  Hash := 0;
  for i := 1 to length(aKey) do begin
    Hash := (Hash shl 4) + ord(aKey[i]);
    G := Hash and $F0000000;
    if (G <> 0) then
      Hash := (Hash xor (G shr 24)) xor G;
  end;
  Result := Hash;
end;


© Джулиан Бакнелл, Фундаментальные стпуктуры и алгоритмы данных в DELPHI.


--------------------
    
PM MAIL ICQ Skype   Вверх
Bose
Дата 15.2.2006, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



Цитата(wesadex @ 15.2.2006, 13:07 Найти цитируемый пост)

в диапазон 0-999
целиком поместятся только 2 символа 16ричных.. FF

PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


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

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


 




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


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

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