![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
case +string
07002 © (2007-08-16 20:23:00)Я приавильно понимаю, что в операторе case использовать string не представляется возможным?
var
ss: string[40];
s1, s2: string[40];
begin
case ss of
s1: Halt(1);
s2: Halt(0);
end;
end;
Leonid Troyanovsky (2007-08-18 10:28:00) [1]
> DevilDevil © (17.08.07 15:56) [39]
> приведи простенький алгоритм хеширования строк
THashedStringList Class (RTFM: Delphi Help)
See also: IniFiles.pas
--
Regards, LVT.
Leonid Troyanovsky (2007-08-17 17:23:00) [2]
> DevilDevil © (17.08.07 15:23) [37]
> следовательно, существует вероятность (и немаленькая), что
> сравнение может произойти некорректно. Т.е. если 2 строки
> не эквивалентны, а хеш-коды совпадают
Это называется коллизией. Ничего страшного.
Обычно ключи сортируют по хешу, а окончательное решение
принимают после полного сравнения ключей.
Выигрыш достигается, если поиск по хешу + перебор ключей
с одинаковым хешем, дешевле, чем полный перебор.
--
Regards, LVT.
palva (2007-08-17 16:48:00) [3]
> DevilDevil © (17.08.07 16:19) [42]
> у тебя ненамного лучше
А чем вам не понравилась моя реплика?
DevilDevil (2007-08-17 16:48:00) [4]> Jeer © (17.08.07 16:39) [43]
да, прикольно
Jeer (2007-08-17 16:39:00) [5]// Case-string:
case CaseStr(s, ['Первый', 'Второй', 'Третий']) of
0: ShowMessage('1: ' + s);
1: ShowMessage('2: ' + s);
2: ShowMessage('3: ' + s);
else
ShowMessage('else: ' + s);
end;
function CaseStr(const s: string; lstStr: array of string): integer;
var
i: integer;
begin
result := -1;
for i := 0 to High(s) do
if s = lstStr[i] then begin
result := i; break;
end;
end;
DevilDevil (2007-08-17 16:19:00) [6]> palva © (17.08.07 16:04) [41]
у тебя ненамного лучше
> tesseract © (17.08.07 15:59) [40]
а как тогда? только посимвольно?
palva (2007-08-17 16:04:00) [7]> реплики типа "пограммистский маразм" я бы посоветовал оставлять при себе
Это не моя реплика, тем более что я с ней не согласен.
tesseract (2007-08-17 15:59:00) [8]
> приведи простенький алгоритм хеширования строк, я постараюсь
> найти две неравные строки... Контрольная сумма, например
См пост DrPass. Контрольная сумма она для такого хэширования не предназначена.
DevilDevil (2007-08-17 15:56:00) [9]> tesseract © (17.08.07 15:36) [38]
приведи простенький алгоритм хеширования строк, я постараюсь найти две неравные строки... Контрольная сумма, например
tesseract (2007-08-17 15:36:00) [10]
> следовательно, существует вероятность (и немаленькая), что
> сравнение может произойти некорректно.
Нет такой вероятности. См описание хэш функции. Так индексы полей CHAR на всех БД строяться.
DevilDevil (2007-08-17 15:23:00) [11]> DrPass © (17.08.07 01:35) [6]
>
> Это, кстати, будет эффективнее, чем делать if ... then,
> т.к. оно строит хеш-таблицу строк
следовательно, существует вероятность (и немаленькая), что сравнение может произойти некорректно. Т.е. если 2 строки не эквивалентны, а хеш-коды совпадают
tesseract (2007-08-17 15:10:00) [12]
> Хеш-функция - это функция возвращающая один и тот жерезультат
> для любых двух одинаковых аргументов.
Во загнул, круче чем в маркетинге определение......
В принципе то же самое, вид сбоку.
sdts (2007-08-17 15:02:00) [13]
> слишком всё просто
http://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
DevilDevil (2007-08-17 14:57:00) [14]> Leonid Troyanovsky © (17.08.07 14:52) [33]
спасибо. это точное определение ?
что то неверится, слишком всё просто
Leonid Troyanovsky (2007-08-17 14:52:00) [15]
> tesseract © (17.08.07 14:11) [31]
> Хэш функция - это функция возвращающая различный результат
> на всём диапазоне значений аргумента.
Хеш-функция - это функция возвращающая один и тот же
результат для любых двух одинаковых аргументов.
Т.е., если хеши не совпадают, то аргументы различны.
Обратное, в общем случае, неверно.
--
Regards, LVT.
DevilDevil (2007-08-17 14:28:00) [16]> там хэширование строк
там хеширование СИМВОЛОВ, для каждого символа строки
говоря про удобство я имею ввиду удобноеcaseвместо бесконечногоif else if else if else
> Хэш функция - это функция возвращающая различный результат
> на всём диапазоне значений аргумента.
а если более предметно ?
tesseract (2007-08-17 14:11:00) [17]
> :)) ну вот и где там strung-case ? там приведён алгоритм
> быстрого сравнения строк без учёта регистра.
там хэширование строк - его в case и пихай, если уж тебе лень писать алготим с числовыми константами.
> кстати, что есть "хеш" ?
Хэш функция - это функция возвращающая различный результат на всём диапазоне значений аргумента.
Крипто хэш : по значению функции нельзя восстановить аргумент.
Игорь Шевченко (2007-08-17 14:07:00) [18]
> кстати, что есть "хеш" ?
> сколько лет живу, до сих пор незнаю. просто ранее расчитанная
> таблица ?
А туда же.
DevilDevil (2007-08-17 13:55:00) [19]> tesseract © (17.08.07 13:31) [28]
:)) ну вот и где там strung-case ? там приведён алгоритм быстрого сравнения строк без учёта регистра.
кстати, что есть "хеш" ?
сколько лет живу, до сих пор незнаю. просто ранее расчитанная таблица ?
tesseract (2007-08-17 13:31:00) [20]
> - если бы такая возможность поддерживалась в Delphi, хуже
> было бы ?
В delphi такая возможность есть. Вот пример :
http://delphimaster.ru/cgi-bin/forum.pl?id=1187184079&n=3