Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЕсли упростить задачу, то у нас есть неупорядоченный массив с уникальными элементами. Для каждого элемента мне нужно определить сколько элементов до него(слева от него) больше него. Асимптотика n^2 и выше меня не устраивает Это построение индекса. Насколько я себе представляю, в сбалансированном индексе можно легко рассчитать количество элементов на "ветвях" справа и слева. По крайней мере добавляя в индекс последний ключ нужно будет обновить не более log(n) блоков индекса, чтобы скорректировать вес обновленной ветви от листа до корня. И еще два блока, если потребуется балансировка. Берем очередной элемент, добавляем его в индекс и одновременно суммируем на каждом ярусе дерева, сколько элементов оказалось (меньше/больше). Причем все они находятся до текущего элемента, ведь тех что после в индексе еще нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 15:16 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Саша давай макет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 15:20 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Структура блока такая: Код: plaintext 1. 2. 3. 4. 5. 6. 7. // Для затравки добавляем первый ключ. sm = 0; struct block *root = { a[0].key, null, bull, 0, 0, 0 }; a[0].i_gt = sm; ну и т.д. .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2015, 15:41 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mcureenabSashaMercuryЕсли упростить задачу, то у нас есть неупорядоченный массив с уникальными элементами. Для каждого элемента мне нужно определить сколько элементов до него(слева от него) больше него. Асимптотика n^2 и выше меня не устраиваетЭто как то уж очень упрощенно и очевидно. Получается нужно один раз пройти список подсчитывая количество просмотренных элементов и каждому элементу списка присвоить текущее значение счетчика. Но каждое удаление элемента приведет к сдвигу хвоста списка. В массиве, это сдвиг элементов, в односвязном списке это перенумерация элементов. Думаю, в этом смысле альтернатив нет. Так или иначе, после удаления придется пробегать весь хвост и выполнять декремент номеров, но искать элементы можно будет по индексу. Или перед удалением пробегать всю голову, но сравнивая ключ. Трудно сказать что быстрее. От данных зависит. Асимптотика должна быть одинаковой, так что ничего не быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 02:06 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Асимптотика добавления в дерево зависит от его высоты, а высота его зависит от того в каком порядке в него попадают данные, и может варьироваться от до . Нельзя гарантировать что порядок данных будет хорошим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 02:14 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryАсимптотика добавления в дерево зависит от его высоты, а высота его зависит от того в каком порядке в него попадают данные, и может варьироваться от до . Нельзя гарантировать что порядок данных будет хорошим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 02:18 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercury, эх, вот придумал бы ты балансировку для 2-D дерева за log(n), сразу стал бы знаменитым позвали бы тебя для баз всяких алгоритмы придумывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 06:45 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercurySashaMercuryАсимптотика добавления в дерево зависит от его высоты, а высота его зависит от того в каком порядке в него попадают данные, и может варьироваться от до . Нельзя гарантировать что порядок данных будет хорошим Высота сбалансированного дерева (АВЛ-дерево) равна log(n) для любых исходных данных. От распределения данных зависит только число вращений вершин во время добавления или удаления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 09:09 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mcureenabSashaMercuryпропущено... Высота сбалансированного дерева (АВЛ-дерево) равна log(n) для любых исходных данных. От распределения данных зависит только число вращений вершин во время добавления или удаления. Это близко, но на самом деле не так. Если использовать сбалансированные деревья (AVL или RB), то задачу пожалуй можно решить. Я ещё думаю, стоит ли оно того, может быть есть другие способы её решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 09:18 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercurymcureenabпропущено... Высота сбалансированного дерева (АВЛ-дерево) равна log(n) для любых исходных данных. От распределения данных зависит только число вращений вершин во время добавления или удаления. Это близко, но на самом деле не так. Разница длинны двух любых маршрутов от корня к листьям в АВЛ дереве 0 или 1. Это существенно только для совсем маленького объема данных, когда в дереве мало ярусов. Но наверное никакая структура или алгоритм не даст в общем случае все маршруты равной длинны. Форма дерева в общем случае будет зависеть от порядка исходных данных, но когда ярусов много, это несущественно. У тебя еще какие то соображения есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 10:43 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
mcureenabSashaMercuryпропущено... Это близко, но на самом деле не так. Разница длинны двух любых маршрутов от корня к листьям в АВЛ дереве 0 или 1. Это существенно только для совсем маленького объема данных, когда в дереве мало ярусов. Но наверное никакая структура или алгоритм не даст в общем случае все маршруты равной длинны. Форма дерева в общем случае будет зависеть от порядка исходных данных, но когда ярусов много, это несущественно. У тебя еще какие то соображения есть? Ваше первое утверждение не совсем верно, вот и всё. Одно дело если вы используете O нотацию и говорите об оценках, но если вы говорите конкретные функции, то вы ошибаетесь. Используя O-нотацию мы имеем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 12:52 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Сделал макет Код: plaintext 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. Там решение только перебором. Но есть генератор исходных данных, замер времени, вывод данных и результата с контрольной суммой. Кому интересно: писать свою функцию вместо perebor(). Перебор не быстро работает. 1,5 сек для массива в 50 тыс. элементов. 6 сек для 100 тыс. Чистый N^2 Попробую свою идею 18266267 затестить на скорость. Надо только определиться можно исходные данные портить или нет. Предлагаю портить, т.к. несложно биткарту добавить для пометок, сложность от этого не изменится, но лишний код добавится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 17:14 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Почему используется именно 12347? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 01:53 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПочему используется именно 12347? 12345 как-то не очень перемешивало, взял ближайшее простое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2015, 05:41 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Известно что некоторые структуры данных можно реализовать разными способами. Например, очередь можно реализовать с использованием двусвязного списка, либо с использованием непрерывной области памяти, и др. Но как нам известно у любой очереди существуют интерфейсы(если это слово корректно употребить в данном случае) dequeue и enqueue. Правильно ли я понимаю, что для того чтобы реализовать различный вариации определения очередей(здесь слово 'определение' понимается в контексте class definition) грамотным будет первым делом создать некий базовый тип(класс), и наследовать вариации различных определений от него ? Но тогда возникает такой вопрос, данный класс должен быть абстрактным классов, либо достаточно определить все методы этого класса с меткой protecded ? Подскажите пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 05:00 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. Известно что некоторые структуры данных можно реализовать разными способами. Например, очередь можно реализовать с использованием двусвязного списка, либо с использованием непрерывной области памяти, и др. Но как нам известно у любой очереди существуют интерфейсы(если это слово корректно употребить в данном случае) dequeue и enqueue. Правильно ли я понимаю, что для того чтобы реализовать различный вариации определения очередей(здесь слово 'определение' понимается в контексте class definition) грамотным будет первым делом создать некий базовый тип(класс), и наследовать вариации различных определений от него ? Но тогда возникает такой вопрос, данный класс должен быть абстрактным классов, либо достаточно определить все методы этого класса с меткой protecded ? Подскажите пожалуйста если в плане ООП, то да, наследование от базового класса но в плане эффективности это не гуд, поэтому и используют шаблоны\макросы где все вызовы в итоге можно сделать статическими и компилятор может агрессивно задействовать оптимизацию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 07:01 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)SashaMercuryЗдравствуйте. Известно что некоторые структуры данных можно реализовать разными способами. Например, очередь можно реализовать с использованием двусвязного списка, либо с использованием непрерывной области памяти, и др. Но как нам известно у любой очереди существуют интерфейсы(если это слово корректно употребить в данном случае) dequeue и enqueue. Правильно ли я понимаю, что для того чтобы реализовать различный вариации определения очередей(здесь слово 'определение' понимается в контексте class definition) грамотным будет первым делом создать некий базовый тип(класс), и наследовать вариации различных определений от него ? Но тогда возникает такой вопрос, данный класс должен быть абстрактным классов, либо достаточно определить все методы этого класса с меткой protecded ? Подскажите пожалуйста если в плане ООП, то да, наследование от базового класса но в плане эффективности это не гуд, поэтому и используют шаблоны\макросы где все вызовы в итоге можно сделать статическими и компилятор может агрессивно задействовать оптимизацию Что такое ООП мы все понимаем по разному. Мне нужно чтобы это было грамотно и правильно. Использование типов должно быть. Но правильное проектирование типов(классов) вопрос сложный. Мне не очень понятно почему при таком проектировании, должны возникнуть проблемы на которые вы указали, поясните пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 07:37 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Вот только получается что абстрактный класс о котором я говорил выше должен быть оформлен в виде шаблона класса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 08:55 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЧто такое ООП мы все понимаем по разному. Мне нужно чтобы это было грамотно и правильно. Использование типов должно быть. Но правильное проектирование типов(классов) вопрос сложный. Мне не очень понятно почему при таком проектировании, должны возникнуть проблемы на которые вы указали, поясните пожалуйста В ООП как и в других ученьях есть различные философии и практики. Если следовать SOLID то я бы акцентировал внимание на 4-й принцип (буква I) рекомендует Interface segregation principle (Много специализированных интерфейсов лучше, чем один универсальный.) . Если в queue на базе памяти и двузсвязного списка можно выделить два и более интерфейса - то я бы это сделал. Не знаю про какую такую эффективность толкует Руслан - но скорее всего речь идёт об оптимизации вирутального вызова. Если говорить о макросах - то это не есть ООП. Это нечто более примитивное и механическое. В С++ шаблоны+макросы возведены в особый ранг технических приёмов которые и делают С++ быстрым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 09:15 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВот только получается что абстрактный класс о котором я говорил выше должен быть оформлен в виде шаблона класса ну вот видишь, смысл тогда от всей этой дребедени с наследованием, полиморфизмом, сделал шаблон и не паришься названия одинаковые методам дай да и всё, хочешь массив, используй шаблон с массивом, хочешь классическую - тоже проблем нет всё у тебя разложится в конкретный код, нужный тебе именно для этого типа и с нужным тебе алгоритмом и структурой хранения в STL работает, ёжики колются, но .. - эффективнее по использованию и скорости придумать малореально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2015, 10:30 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)SashaMercuryВот только получается что абстрактный класс о котором я говорил выше должен быть оформлен в виде шаблона класса ну вот видишь, смысл тогда от всей этой дребедени с наследованием, полиморфизмом, сделал шаблон и не паришься названия одинаковые методам дай да и всё, хочешь массив, используй шаблон с массивом, хочешь классическую - тоже проблем нет всё у тебя разложится в конкретный код, нужный тебе именно для этого типа и с нужным тебе алгоритмом и структурой хранения в STL работает, ёжики колются, но .. - эффективнее по использованию и скорости придумать малореально Шаблоны будут для нескольких реализаций независимо от того будет ли абстрактный класс или нет. В любом случае спасибо всем, решил отказаться от этой идеи в силу того что не так глубоко изучил абстрактные классы, и советов выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2015, 01:46 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Только вот что странно, раньше, когда у меня был просто класс, и было три файла: q.h, q.cpp, и в main.cpp я подключал q.h программа собиралась корректно. Теперь я сделал класс шаблонным, определение методов в q.cpp выглядит следующим образом Код: plaintext 1. 2. 3. 4. 5. происходит ошибка при сборке. Становятся невидимыми определения этих методов(из q.cpp). Это связано с тем что класс стал шаблонным, и собирать его нужно иначе ? PS когда подключаю в main q.cpp всё ок, но мне это не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2015, 07:10 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
SashaMercuryТолько вот что странно, раньше, когда у меня был просто класс, и было три файла: q.h, q.cpp, и в main.cpp я подключал q.h программа собиралась корректно. Теперь я сделал класс шаблонным, определение методов в q.cpp выглядит следующим образом Код: plaintext 1. 2. 3. 4. 5. происходит ошибка при сборке. Становятся невидимыми определения этих методов(из q.cpp). Это связано с тем что класс стал шаблонным, и собирать его нужно иначе ? PS когда подключаю в main q.cpp всё ок, но мне это не нравится. весь код шаблоный должен быть в заголовке . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2015, 07:30 |
|
||
|
Различные структуры данных. Реализация
|
|||
|---|---|---|---|
|
#18+
Почему так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2015, 07:37 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39075088&tid=2018439]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 194ms |

| 0 / 0 |
