Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     01 Feb 2002  20:17:26
 To : Artem Chuprina
 Subject : Re: Как из списка @list    удалить скаляр $num
 -------------------------------------------------------------------------------- 
 
 Artem Chuprina wrote:
 
 > Здравствуй, Andrey Sapozhnikov.
 > AS> выясняем, что перлу пофиг на теорию. Он ищет перебором, O(N).
 > 
 > Hе от N, а от длины ячейки хэша. В исходники я не лазил, но Advanced Perl
 > Programming утверждает, что ширина оного хэша (xhv->xhv_max, если я правильно
 > понял код) растет, если длина списка в ячейке вырастает больше, чем хотелось
 > бы. После чего цепочки растаскиваются по другим корзинкам. Для чего,
 > собственно, и хранятся хэш-значения, помимо ускорения сравнения. Чтобы при
 > смене размера не пересчитывать. Тем самым то, от чего O(), определяется этим
 > "хотелось бы". Мои эксперименты показывают, что средний размер корзинки - 2-3
 > элемента, больше при росте хэша не лезет. Тем самым таки O(1). Правда, за счет
 > накладных расходов на разрастание хэша.
 Ты прав, детальнее расмотрев код, я нашел те кусочки. Размер таблицы удваивается
 если число ключей превышает размер таблицы, а индексация в таблице делается
 по остатку от деления хэш-значения на размер таблицы.Кстати, таблица не
 ужимается
 обратно при удалении элементов хэша. Функция близка к O(1), хотя статистика чуть
 портится с разрастанием. Hо операции вставки периодически приводят к тяжелым
 перестройкам таблицы (все же я бы реализовал через splay-tree, заодно привнеся
 упорядоченность по значению ключа, ну да поздно уже). Так что будем считать
 O(const)
 (которое кстати, частный случай O(log) :-)) Мои извинения Ларри Уоллу, если он
 вруг прочел предыдущее письмо и обиделся :-)
 
 Андрей
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Как из списка @list удалить скаляр $num   Andrey Titov   30 Jan 2002 21:35:48 
 Re: Как из списка @list удалить скаляр $num   Andrey Sapozhnikov   30 Jan 2002 22:00:27 
 Re: Как из списка @list удалить скаляр $num   Andrey Titov   30 Jan 2002 22:43:32 
 Как из списка @list удалить скаляр $num   kan   31 Jan 2002 11:34:13 
 Re: Как из списка @list удалить скаляр $num   Artem Chuprina   01 Feb 2002 13:02:11 
 Re: Как из списка @list удалить скаляр $num   Andrey Sapozhnikov   01 Feb 2002 16:06:30 
 Re: Как из списка @list удалить скаляр $num   Artem Chuprina   01 Feb 2002 17:18:39 
 Re: Как из списка @list удалить скаляр $num   Andrey Sapozhnikov   01 Feb 2002 20:17:26 
 Re: Как из списка @list удалить скаляр $num   Konstantin Stupnik   01 Feb 2002 14:12:12 
 Как из списка @list удалить скаляр $num   Aleksey Kotov   31 Jan 2002 17:47:39 
 Re: Как из списка @list удалить скаляр $num   Andrey Sapozhnikov   31 Jan 2002 20:01:19 
 Как из списка @list удалить скаляр $num   Aleksey Kotov   01 Feb 2002 00:24:10 
 Как из списка @list удалить скаляр $num   Ivan Frolcov   01 Feb 2002 20:37:24 
 Re: Как из списка @list удалить скаляр $num   Artem Chuprina   01 Feb 2002 20:33:50 
 Re: Как из списка @list удалить скаляр $num   vitus@ice.ru   01 Feb 2002 20:37:57 
 Re: Как из списка @list удалить скаляр $num   vitus@ice.ru   30 Jan 2002 22:55:51 
 Re: Как из списка @list удалить скаляр $num   Andrey Sapozhnikov   31 Jan 2002 03:18:28 
 Re: Как из списка @list удалить скаляр $num   Artem Chuprina   31 Jan 2002 12:26:01 
 Re: Как из списка @list удалить скаляр $num   Andrey Sapozhnikov   31 Jan 2002 17:37:14 
 Re: Как из списка @list удалить скаляр $num   Andrey Titov   01 Feb 2002 16:12:41 
 Как из списка @list удалить скаляр $num   Michael Savin   31 Jan 2002 04:51:33 
 Re: Как из списка @list удалить скаляр $num   Andrey Sapozhnikov   31 Jan 2002 02:57:57 
Архивное /ru.perl/5284ea23ac63.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional