|
|
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
Я так понимаю, что SkipList в java это как раз "Список с пропусками" http://ru.wikipedia.org/wiki/Список_с_пропусками Как-то тут посредственно объяснено,а больше ничего я не нашёл. Помогите понять, что это за структура данных такая, как реализовать ее самому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 23:38 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
нашёл. Человек красиво всё расписал. http://habrahabr.ru/post/139870/ Но всё-таки как при вставке(удалении) балансировать скип-лист не совсем понятно. Как выбирать количество уровней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 00:07 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
и идея Lock-Free для ConcurrentSkipListSet не ясна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 00:12 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
redwhite90Но всё-таки как при вставке(удалении) балансировать скип-лист не совсем понятно. Как выбирать количество уровней. http://ru.wikipedia.org/wiki/Красно-чёрное_дерево redwhite90и идея Lock-Free для ConcurrentSkipListSet не ясна.ConcurrentSkipListSet использует ConcurrentSkipListMap (см. doPut, doGet...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 01:05 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
Usman, Usman http://ru.wikipedia.org/wiki/Красно-чёрное_дерево СкипЛист это ж не то, что красно-черное - вообще не дерево. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 11:30 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
Usman, UsmanConcurrentSkipListSet использует ConcurrentSkipListMap (см. doPut, doGet...) doGet то тут вообще не причем. по doPut: всю логику я не осознал как это работает, но вот что увидел: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. Код: java 1. похоже реально рандом. Что-то мне кажется в таком случае мы не получим сбалансированного скиплиста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 11:54 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
redwhite90СкипЛист это ж не то, что красно-черное - вообще не дерево.RB-дерево - структура для хранения данных (элементов списка) внутри SkipList'а.redwhite90всю логику я не осознал как это работаетКак я понял, там используется хитро-мутный неблокирующий алгоритм вставки.redwhite90похоже реально рандом. http://en.literateprograms.org/Skip_list_(Java)#Random_Levels redwhite90Что-то мне кажется в таком случае мы не получим сбалансированного скиплистаWiki Красно-чёрное дерево — это одно из самобалансирующихся двоичных деревьев поиска... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 13:10 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
Usman, по поводу Random_Levels: wikiThis gives us a 50% chance of the random_level() function returning 0, a 25% chance of returning 1, a 12.5% chance of returning 2 and so on. Согласен, но не понятно как это влияет на баланcировку. для меня дерево это а скиплист это: непонятно где кто у кого внутри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 14:41 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 14:43 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
redwhite90непонятно где кто у кого внутри ConcurrentSkipListSet использует ConcurrentSkipListMap (который хранит данные ввиде дерева) redwhite90Согласен, но не понятно как это влияет на баланcировку.Вероятность того, что новый элемент будет добавлен на нулевой уровень в два раза выше, чем на 1-й... и т.д. Само по себе ничего несбалансируется. Придется восстанавливать структурное свойство дерева: сравнения, перемещения... (хорошая визуализация алгоритма вставки: демо-апплет ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 15:39 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
Usman, UsmanConcurrentSkipListMap (который хранит данные ввиде дерева) кто Вам это сказал? java docThis class implements a tree-like two-dimensionally linked skip list in which the index levels are represented in separate nodes from the base nodes holding data только вообще не понимаю что за двумерный скип лист ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 16:20 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
redwhite90только вообще не понимаю что за двумерный скип лист ConcurrentSkipListMap реализует интерфейс NavigableMap для того, чтобы совершать движения по коллекции ключей (в т.ч. и для получения срезов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 16:34 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
Usman, Usman чтобы совершать движения по коллекции ключей (в т.ч. и для получения срезов) Что вы понимаете под срезом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 16:39 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
redwhite90кто Вам это сказал?см. Index<K,V> redwhite90Что вы понимаете под срезом?имел ввиду метод subMap: Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 16:43 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
Usman, авторсм. Index<K,V> где ? а как же моя картинка? я неправильно нарисовал? как связана субМапа и двумерный скиплист ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 16:45 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
Usman, ну и то, что скиплист это не дерево это сто пудов. Я тут читаю сейчас, что его в конкарренси и поместили потому, что если мы что-то удаляем из дерева - ему надо целиком перебалансироваться, соответсвенно на это время мы залочим всё дерево, а скиплисту надо первести пару указателей и всё и блочиться целиком нет нужды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 17:30 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
redwhite90где ? тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 03:28 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
redwhite90а как же моя картинка? я неправильно нарисовал?Дерево нарисовано правильно. redwhite90как связана субМапа и двумерный скиплист ? тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 03:32 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
redwhite90Usman, ну и то, что скиплист это не дерево это сто пудов. Я тут читаю сейчас, что его в конкарренси и поместили потому, что если мы что-то удаляем из дерева - ему надо целиком перебалансироваться, соответсвенно на это время мы залочим всё дерево, а скиплисту надо первести пару указателей и всё и блочиться целиком нет нужды.Грубо говоря: ConcurrentSkipListSet это обертка над ConcurrentSkipListMap (копайте в сторону ConcurrentSkipListMap ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 03:41 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
Usman, UsmanГрубо говоря: ConcurrentSkipListSet это обертка над ConcurrentSkipListMap (копайте в сторону ConcurrentSkipListMap). В этом я и не сомневался) Как HashSet и HashMap) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 11:44 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
Usman, UsmanДерево нарисовано правильно. а скиплист? Usmanкак связана субМапа и двумерный скиплист ? вот честно не понял - объясните пожалуйста на пальцах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 11:47 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
redwhite90а скиплист?Пойдет. (Дуговые стрелки можно сделать другим цветом)redwhite90вот честно не понял - объясните пожалуйста на пальцах subSet вызывает subMap , который возвращает фрагмент ConcurrentSkipListMap'а в виде ConcurrentNavigableMap начиная с fromKey по toKey (см. SubMap<K,V> ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 15:17 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
Usman, UsmansubSet вызывает subMap, который возвращает фрагмент ConcurrentSkipListMap'а в виде ConcurrentNavigableMap начиная с fromKey по toKey (см. SubMap<K,V>) согласен, только не понимаю причём тут двумерность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 16:18 |
|
||
|
Структура данных "Список с пропусками"
|
|||
|---|---|---|---|
|
#18+
redwhite90согласен, только не понимаю причём тут двумерностьЕсть узлы и индексы: Node<K,V> Код: java 1. 2. 3. 4. 5. 6. 7. Index<K,V> Код: java 1. 2. 3. 4. 5. 6. 7. java doctree-like two-dimensionally linked skip listНе двумерный, а двусвязный список, т.е. связь узлов (ссылки на соседние узлы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 16:38 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=173&tid=2127107]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 344ms |

| 0 / 0 |
