Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
SashaMercury, я вот читал-читал, а вы сделать-то что пытаетесь? функциональный аналог массива делается на весо-сбалансированных бинарных деревьях, вставка-удаление O(log(N)), поиск элемента по номеру тоже на них легко делается - O(log(N)) если нужно по-быстрому, то на декартовых с поддержкой агрегации но тот же массив на малых объёмах проигрывает обычному - за исключенеим случаев массовых операций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2015, 16:26 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
Dima Tдля data[8] можно сразу взять cnt_tree[2][0], но у меня посчитается cnt_tree[0][3]+cnt_tree[0][2]+cnt_tree[1][0] data[9] будет cnt_tree[0][4]+cnt_tree[1][1]+cnt_tree[1][0] хотя можно было cnt_tree[0][4]+cnt_tree[2][0] Небольшой задел для оптимизации есть :) Поправил. Не зря расписывал, сам лучше понял как работает. Теперь 8 млн. за 1.59 сек. (было 1.84 сек.) Версия 2.1 Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2015, 18:10 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)SashaMercury, я вот читал-читал, а вы сделать-то что пытаетесь? Тут Саша человеческим языком писал 18265745 Наиболее точно ТЗ описывает этот пост SashaMercuryЕсли упростить задачу, то у нас есть неупорядоченный массив с уникальными элементами. Для каждого элемента мне нужно определить сколько элементов до него(слева от него) больше него Есть уточнения. SashaMercuryникакие элементы в список не добавляются. Один раз добавятся и всё. Дальше будут только удаляться. В цикле. На каждой итерации цикла мне нужно искать минимальный элемент и мне необходимо узнать сколько элементов от него слева. Удаляю этот элемент и проделываю аналогичные действия. Итерации продолжаются пока есть элементы kealon(Ruslan)функциональный аналог массива делается на весо-сбалансированных бинарных деревьях, вставка-удаление O(log(N)), поиск элемента по номеру тоже на них легко делается - O(log(N)) Про деревья в том топике предлагали. Я не большой знаток деревьев, точнее теорию знаю, реально ни разу не использовал. Все пытаюсь понять как решать деревом эту задачу. Даже если мы в каждом узле будем хранить сколько в его окончаниях листьев, то все равно потребуется обход достаточно большого количества узлов чтобы посчитать сколько листьев перед свеже вставленным. Заметно больше чем log2(n) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2015, 19:04 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
Да, это дерево отрезков, классическя олимпиадная задачка, в кажом узле дерева хранится min, max и количество элементов в дереве SashaMercuryЗдравствуйте. Подскажите пожалуйста, существует ли структура данных(организована линейно) со следующими характеристиками: 1. Поиск индекса минимального/максимального элемента поиск O(Log(N)) SashaMercury2. Удаление элемента вставка-удаление O(Log(N)) Dima TПро деревья в том топике предлагали. Я не большой знаток деревьев, точнее теорию знаю, реально ни разу не использовал. Все пытаюсь понять как решать деревом эту задачу. Даже если мы в каждом узле будем хранить сколько в его окончаниях листьев, то все равно потребуется обход достаточно большого количества узлов чтобы посчитать сколько листьев перед свеже вставленным. Заметно больше чем log2(n) не больше, завтра постараяюсь написать, к сожалению времени в последнее время особо нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2015, 19:41 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryМне, вообще говоря, интересна 2 постановкаСаша вы молодец! Очень интересно было бы посмотреть /поучаствовать/ в дискуссиях: - виды деревьев, применимость их и способы представления в памяти и на диске; - форматы данных и способы их представления в памяти и на диске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2015, 20:08 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)не больше, завтра постараяюсь написать, к сожалению времени в последнее время особо нет Не забудь. Интересно. Обещаю затестить в равных условиях со своими поделками. Я тут заготовку для тестов давал 18274025 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2015, 20:11 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryМожет быть я не так перевожу, но в англоязычной литературе встречается термин superlinear function. Скорость роста данной функции выше чем у линейной функции, например, асимптотика quick sort принадлежит классу superlinear function, и составляет . Так и тут Роберт Седжвик пишет об этой функции N Log N - Время выполнения, пропорциональное N log N имеет место когда алгоритм решает задачу разбивая ее на подзадачи меньших размеров, решая их независимо и затем объединяя решения. Из за отсутствия подходящего прилагательного ("линерифмический" - linerihmic ?) мы просто говорим что время выполнения такого алгоритма равно N log N. Когда N равно 1000 000, N log N возрастает примерно до 20 млн. Когда N удваивается то время N log N возрастает более чем вдвое (но не намного более). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2015, 20:22 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) я вот читал-читал, а вы сделать-то что пытаетесь? В первом посте этого топика отправил код. Продублирую Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 01:44 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
Dima_Tберем pos-1 находим для него счетчик нулевого уровня, если начало счетчика не совпадает с началом счетчика следующего уровня, то берем предыдущий счетчик, начала уровней совпало - переходим на уровень выше и берем там предыдущий и т.д. Например для подсчета сколько перед data[7] складываем cnt_tree[0][3]+cnt_tree[0][2]+cnt_tree[1][0] для data[8] можно сразу взять cnt_tree[2][0], но у меня посчитается cnt_tree[0][3]+cnt_tree[0][2]+cnt_tree[1][0] data[9] будет cnt_tree[0][4]+cnt_tree[1][1]+cnt_tree[1][0] хотя можно было cnt_tree[0][4]+cnt_tree[2][0] Небольшой задел для оптимизации есть :) Принцип понятен? Мне кажется что данный алгоритм аналогичен алгоритму выше. Только у меня дерево фигурирует явно, а у тебя нет. Если я всё правильно понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 02:37 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryМне кажется что данный алгоритм аналогичен алгоритму выше. Только у меня дерево фигурирует явно, а у тебя нет. Если я всё правильно понял Потестил твой код на скорость. ЭлементовДерево (сек.)Версия 2.1 (сек.)100 тыс.0.070.02200 тыс.0.270.04400 тыс.0.390.07800 тыс.4.230.141600 тыс.3.730.31 Смотрим не на время, а на скорость прироста в разах. Твой растет быстрее и как-то неравномерно. Вот еще замер, от количества элементов зависит как они перемешаются. ЭлементовДерево (сек.)Версия 2.1 (сек.)8000004.230.148000011.950.148000021.420.148000031.850.14 Деревья могут вырождаться, тогда производительность от их использования резко падает. Похоже это твой это случай. Не могу точно сказать, как выше писал не силен в деревьях. Как минимум у тебя в коде надо оптимизировать выделение памяти. malloc() для каждого элемента - это не быстро. Сколько элементов будет в итоге примерно известно. Выдели сразу кусок памяти и выдавай оттуда по одному элементу, кончится - еще кусок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 07:31 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
Исправил C: Код: 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. 114. 115. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 07:45 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
Стало быстрее ЭлементовДерево 1.0 (сек.)Дерево 1.1 (сек.)8000004.232.998000011.951.328000021.420.908000031.851.25 Но неравномерность не исчезла. Надо алгоритм допиливать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 08:00 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryМне кажется что данный алгоритм аналогичен алгоритму выше. Только у меня дерево фигурирует явно, а у тебя нет. Если я всё правильно понял Почитал немного про деревья. Думаю разница именно в сбаллансированности дерева. Классическое дерево при наполнении вырождается, поэтому есть более продвинутые алгоритмы чтобы этого избегать: АВЛ-дерево , Красно-чёрное дерево Там упоминают ... контейнеры set и map в большинстве реализаций библиотеки STL языка C++[2], класс TreeMap языка Java[3], так же, как и многие другие реализации ассоциативного массива в различных библиотеках, основаны на красно-чёрных деревьях. Думаю отсюда можно предположить что заполнение std::set будет примерно таким же по времени как и при решении твоей задачи. Т.е. считаем что std::set это идеально реализованное дерево. Затестил такой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Результаты ЭлементовДерево 1.0 (сек.)Дерево 1.1 (сек.)Fill setClear set8000004.232.990.437.48000011.951.320.433.678000021.420.900.420.428000031.851.250.433.13 Скорость заполнения стабильная, но все тормоза почему-то перешли на очистку. Причем общее время пропорционально твоему. Интересно. Похоже MS коряво очистку реализовал. Надо в линуксе потестить. PS Ты в своем коде освобождение памяти забыл добавить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 09:29 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
Dima TДеревья могут вырождаться, тогда производительность от их использования резко падает. Похоже это твой это случай. Не могу точно сказать, как выше писал не силен в деревьях. Могут, если не балансировать. Пока не сделаешь сбалансированное дерево проводить измерения времени нет смысла. Результат будет сильно зависеть от исходных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 09:38 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
Dima T Похоже MS коряво очистку реализовал. Надо в линуксе потестить. Разобрался. Из-за отладчика у МС тормоза даже при запуске в релизе. Позапускал просто exe. Нет тормозов. Заполнение стабильно 0.13 сек. Очистка 0.07 сек. Мой код в обоих вариантах 0.14 сек. Потестил в линуксе. Железо тоже самое. Компилятор g++ 4.7.2 Заполнение 800 тыс. в std::set стабильно 0.07 сек, очистка 0.02 сек. Мой код даже чуть дольше виндового варианта 0.17 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 10:07 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
Спасибо. Попробую поправить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 13:23 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
привет всем понял теперь вашу задачку Index любого элемента так просто не найдёшь, это да Dima T, тут что-то хитрее надо на постоянном массиве достаточно "пронумеровать" массив и отсортировать этот индекс по значению быстрее чем дерево будет SashaMercury, а элементы действительно нужно удалять и вставлять? может саму задачу скажешь зачем тебе такая структура? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 19:40 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)Dima T, тут что-то хитрее надо ИМХУ Сашино дерево из первого поста взлетит если балансировку добавить. kealon(Ruslan)на постоянном массиве достаточно "пронумеровать" массив и отсортировать этот индекс по значению быстрее чем дерево будет Разверни свою мысль поподробней. Как пронумеровать? Я тоже об этом думал. Ничего не придумал. kealon(Ruslan)SashaMercury, а элементы действительно нужно удалять и вставлять? может саму задачу скажешь зачем тебе такая структура? На 99% уверен что задачка академическая из серии олимпиадных. Саша несколько задач отсюда уже выносил на местное обсуждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2015, 20:05 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)на постоянном массиве достаточно "пронумеровать" массив и отсортировать этот индекс по значению быстрее чем дерево будет положим, у нас массив уже упорядочен. Что нам даст нумерация его элементов? Номер элемента совпадает с индексом, значит слева нет "лишних" элементов. Пусть в исходном массиве первый элемент не на своем месте. После сортировки он встанет на место n, а элементы от 2 до n сдвинутся. У этих элементов номер будет на 1 больше индекса. У переставленного элемента номер 1 на n меньше индекса n+1. Остальные элементы остались на своих местах. Только сложность алгоритма быстрой сортировки может достигать О(N*N). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 00:11 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
Прочитал статью Тадао Такаока(учёный не так давно решивший новым способом проблему Maimum subarray sum) о новых мерах энтропии неупорядоченного массива, захотел посмотреть алгоритмы работы со старыми. Информации особой по реализации не нашёл, потому решил самостоятельно этим заняться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 03:49 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
mcureenabkealon(Ruslan)на постоянном массиве достаточно "пронумеровать" массив и отсортировать этот индекс по значению быстрее чем дерево будет положим, у нас массив уже упорядочен. Что нам даст нумерация его элементов? Номер элемента совпадает с индексом, значит слева нет "лишних" элементов. Пусть в исходном массиве первый элемент не на своем месте. После сортировки он встанет на место n, а элементы от 2 до n сдвинутся. У этих элементов номер будет на 1 больше индекса. У переставленного элемента номер 1 на n меньше индекса n+1. Остальные элементы остались на своих местах. в индексе будут позиции элементов в исходном массиве Код: pascal 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. Код: plaintext 1. 2. 3. 4. 5. 6. вообще-то всегда O(N*Log(N)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 06:45 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПрочитал статью Тадао Такаока(учёный не так давно решивший новым способом проблему Maimum subarray sum) о новых мерах энтропии неупорядоченного массива, захотел посмотреть алгоритмы работы со старыми. Информации особой по реализации не нашёл, потому решил самостоятельно этим заняться ох уж эти японцы, суровые ребята - чуть мозг не поломал пока весо-сбалансированное дерево делал (тоже японцы придумали) только как к теме вопроса относится "Maximum subarray sum" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 06:51 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)в индексе будут позиции элементов в исходном массиве Код: plaintext 1. 2. 3. Ты не то посчитал. Надо не сколько всего элементов больше конкретного, а сколько больших элементов между началом и конкретным. Затем сложить полученное. У меня первая мысль была что можно отсортировать, а затем как-то в один проход посчитать используя только 2 индекса элемента: в изначальном массиве и отсортированном. Но запнулся на такой последовательности 1,5,3,2,4. Результат у нее 0+0+1+2+1. ЗЫ про С/С++ форум. Паскаль запустить негде. Тут заготовка теста с перебором 18274025 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 07:42 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПрочитал статью Тадао Такаока(учёный не так давно решивший новым способом проблему Maimum subarray sum) о новых мерах энтропии неупорядоченного массива, захотел посмотреть алгоритмы работы со старыми. Информации особой по реализации не нашёл, потому решил самостоятельно этим заняться Там критично именно так считать? Может взять за основу что-нибудь близкое, но легче считаемое? Например получить сумму смещений вперед после сортировки. Например: 1,5,3,2,4 исходный 1,2,3,4,5 отсортированный тут только 5 уехало на 3 вперед, т.е. итого 3. Это быстрее считается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 07:56 |
|
||
|
Мера неупорядоченности линейного массива и некоторые вопросы
|
|||
|---|---|---|---|
|
#18+
В случае если многократного 'неудачного выбора' опорной точки асимптотика quicksort будет О(n^2). Maximum subarray sum известная задача, в отличие от меры упорядоченности массива. Потому я думал по ней все поймут кто этот японец ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2015, 09:57 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39080610&tid=2018790]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 275ms |
| total: | 444ms |

| 0 / 0 |
