Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Владимир Дашукевич

FrontFest
November 21, 2017

Владимир Дашукевич

FrontFest

November 21, 2017
Tweet

More Decks by FrontFest

Other Decks in Programming

Transcript

  1. 1

  2. 4

  3. 5

  4. 6

  5. 7

  6. 8

  7. 9

  8. 10

  9. Структура данных — программная единица, позволяющая хранить и обрабатывать множество

    однотипных и/или логически связанных данных в вычислительной технике. Wikipedia Алгори́тм — набор инструкций, описывающих порядок действий исполнителя для достижения некоторого результата. Wikipedia “ “ 11
  10. 12

  11. 13

  12. 14

  13. 15

  14. Структуры данных помогают решать правильно и эффективно поставленные задачи, путем

    наилучшего представления информации под использующиеся алгоритмы. Дашукевич Владимир “ 16
  15. 18

  16. Типы деревьев: 1. Красно-чёрное дерево 2. Куча 3. Префиксное дерево

    4. B-дерево 5. R-дерево 6. АВЛ-дерево 7. и другие 19
  17. 21

  18. Операция Сложность Метод Добавление O(1) insertBefore, appendChild, append, prepend, after,

    before Удаление O(1) removeChild, remove, replaceWith Поиск O(1)/O(n) querySelector, querySelectorAll, getElementById, getElementsByClassName 22
  19. 27

  20. 30

  21. 32

  22. 33

  23. Старое дерево Новое дерево <li key=" key1 ">Первый</li> <li key="

    key1 ">Первый</li> <li key=" key2 ">Второй</li> <li key=" key3 ">Третий</li> <li key=" key3 ">Третий</li> Хэш-таблица Ключ Компонент key1 <li key="key1">Первый</li> key2 <li key="key2">Второй</li> key3 <li key="key3">Третий</li> 40
  24. Старое дерево Новое дерево Результат <li key="key1">Первый</li> <li key="key1">Первый</li> <li

    key="key1">Первый</li> <li key="key2">Второй</li> <li key="key3">Третий</li> <li key="key2">Второй</li> <li key="key3">Третий</li> <li key="key3">Третий</li> Хэш-таблица Ключ Компонент key1 <li key="key1">Первый</li> key2 <li key="key2">Второй</li> key3 <li key="key3">Третий</li> 41
  25. Старое дерево Новое дерево Результат <li key="key1">Первый</li> <li key=" key1

    ">Первый</li> <li key="key1">Первый</li> <li key="key2">Второй</li> <li key="key3">Третий</li> <li key="key2">Второй</li> <li key="key3">Третий</li> <li key="key3">Третий</li> Хэш-таблица Ключ Компонент key1 <li key="key1">Первый</li> key2 <li key="key2">Второй</li> key3 <li key="key3">Третий</li> 42
  26. Старое дерево Новое дерево Результат <li key="key1">Первый</li> <li key=" key1

    ">Первый</li> <li key="key1">Первый</li> <li key="key2">Второй</li> <li key="key3">Третий</li> <li key="key2">Второй</li> <li key="key3">Третий</li> <li key="key3">Третий</li> Хэш-таблица Ключ Компонент key1 <li key="key1">Первый</li> key2 <li key="key2">Второй</li> key3 <li key="key3">Третий</li> 43
  27. Старое дерево Новое дерево Результат <li key="key1">Первый</li> <li key="key1">Первый</li> <li

    key="key1">Первый</li> <li key="key2">Второй</li> <li key=" key3 ">Третий</li> <li key="key2">Второй</li> <li key="key3">Третий</li> <li key="key3">Третий</li> Хэш-таблица Ключ Компонент key1 <li key="key1">Первый</li> key2 <li key="key2">Второй</li> key3 <li key="key3">Третий</li> 44
  28. Старое дерево Новое дерево Результат <li key="key1">Первый</li> <li key="key1">Первый</li> <li

    key="key1">Первый</li> <li key="key2">Второй</li> <li key=" key3 ">Третий</li> <li key="key3">Третий</li> <li key="key3">Третий</li> <li key="key2">Второй</li> Хэш-таблица Ключ Компонент key1 <li key="key1">Первый</li> key2 <li key="key2">Второй</li> key3 <li key="key3">Третий</li> 45
  29. Старое дерево Новое дерево Результат <li key="key1">Первый</li> <li key="key1">Первый</li> <li

    key="key1">Первый</li> <li key="key2">Второй</li> <li key="key3">Третий</li> <li key="key3">Третий</li> <li key="key3">Третий</li> <li key="key2">Второй</li> Хэш-таблица Ключ Компонент key1 <li key="key1">Первый</li> key2 <li key="key2">Второй</li> key3 <li key="key3">Третий</li> 46
  30. Старое дерево Новое дерево Результат <li key="key1">Первый</li> <li key="key1">Первый</li> <li

    key="key1">Первый</li> <li key="key2">Второй</li> <li key="key3">Третий</li> <li key="key3">Третий</li> <li key="key3">Третий</li> <li key="key2">Второй</li> Хэш-таблица Ключ Компонент key1 <li key="key1">Первый</li> key2 <li key="key2">Второй</li> key3 <li key="key3">Третий</li> 47
  31. i => i.key lit-html const render = () => html`

    <ul> ${repeat(items, , (i, index) => html` <li>${index}: ${i.name}</li>`)} </ul> `; 01. 02. 03. 04. 05. 06. 49
  32. Где ещё используются деревья: 1. Специфические доменные области 2. AST

    (abstract syntax tree) 3. Файловая структура 4. Неизменяемые данные 50
  33. var arr = ["a", "b", "c", "z", "f", "k"]; function

    render(items) { return arr .map(item => `<div>${ item }</div>`) .join(", "); } nav.innerHTML = render(arr.sort()); div.innerHTML = render(arr); 01. 02. 03. 04. 05. 06. 07. 08. 52
  34. arr.sort() var arr = ["a", "b", "c", "z", "f", "k"];

    function render(items) { return arr .map(item => `<div>${ item }</div>`) .join(", "); } nav.innerHTML = render( ); div.innerHTML = render(arr); 01. 02. 03. 04. 05. 06. 07. 08. 53
  35. slice() var arr = ["a", "b", "c", "z", "f", "k"];

    function render(items) { return arr .map(item => `<div>${ item }</div>`) .join(", "); } nav.innerHTML = render(arr. .sort()); div.innerHTML = render(arr); 01. 02. 03. 04. 05. 06. 07. 08. 54
  36. {...state, first : { ...state.first, second : { ...state.first.second, [action.someId]

    : { ...state.first.second[action.someId], fourth : action.someValue } } }} 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 56
  37. ...state ...state.first ...state.first.second ...state.first.second[action.someId] { , first : { ,

    second : { , [action.someId] : { , fourth : action.someValue } } }} 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 57
  38. 65

  39. 68

  40. List в ImmutableJS const originalList = List([ 0 ]); //

    List [ 0 ] const newList = originalList.set(1, 1); // List [ 0, 1 ] const newList2 = originalList.set(0, 'overwritten'); // List [ "overwritten" ] originalList.get(0); // "overwritten" 01. 02. 03. 04. 05. 06. 07. 08. 75
  41. 76

  42. List в ImmutableJS 1. До 32 элементов - обычный массив

    2. Свыше 32 элементов - массив массивов до 32 элементов 3. Свыше 32*32 элементов - массив массивов массивов до 32 элементов 4. Прямая ссылка на последний массив 77
  43. 78

  44. Map в ImmutableJS const originalMap = Map({ a: 1 });

    // Map { a: 1 } const newMap = originalMap.set("b", 1); // Map { a: 1, b: 1 } const newMap2 = originalMap.set(a, 'overwritten'); // Map { a: 'overwritten' } originalMap.get(a, 'overwritten'); // 'overwritten' 01. 02. 03. 04. 05. 06. 07. 08. 79
  45. 80

  46. Map в ImmutableJS 1. До 8 элементов - обычный массив

    [[ключ, значение], ...] 2. Свыше 8 (до 32) элементов - Bitmap хэш таблица 3. Свыше 32 элементов - хэш массив из Bitmap хэш таблиц 81
  47. 84

  48. Приоритеты React Fiber 1. Синхронные операции 2. Задачи для следующего

    такта 3. Анимации 4. Высокоприоритетные 5. Низкоприоритетные 6. Задачи на изменения вне экрана 87
  49. 88

  50. 90

  51. 92

  52. Кучи 1. Двоичная куча 2. Биномиальная куча 3. Фибоначчиева куча

    4. Тонкая куча 5. Толстая куча 6. и другие 97
  53. Двоичная куча для максимума 1. Значение в любой вершине не

    меньше, чем значения её потомков 2. На i-ом слое 2^i вершин, кроме последнего. 3. Последний слой заполнен слева направо 98
  54. 99

  55. 101

  56. 102

  57. 103

  58. Очередь на двоичной куче Операция Сложность Добавление элемента О(log n)

    Получение элемента О(log n) Поиск макс. элемента О(1) 104
  59. Очередь с приоритетами Операция/Сложность Куча Связанный список Добавление элемента О(log

    n) О(n) Получение элемента О(log n) О(1) Поиск макс. элемента О(1) О(1) 107
  60. 108

  61. Выводы 1. Интересуйтесь структурами данных и соответствующими им алгоритмами 2.

    Почаще заглядывайте в код инструментов, которыми вы пользуетесь 3. Не бойтесь неизменяемых структур данных 4. Использование правильной структуры данных, позволяет решить задачу эффективнее 109
  62. Для отрисовки форм на любом фреймворке или написания алгоритма валидации

    данных не нужны знания о структурах данных, но для действительно серьезных и сложных задач эти знания необходимы. Дашукевич Владимир “ 111