Количество элементов | ДДП | КЧД | Постоянно сортированный массив | Несортированный массив | Массив с постсортировкой |
1000 | 4243 | 108 | 136 | 1354 | 134 |
2000 | 19295 | 250 | 289 | 5401 | 286 |
3000 | 71271 | 391 | 448 | 25373 | 441 |
4000 | 79819 | 560 | 615 | 23861 | 607 |
5000 | 124468 | 759 | 787 | 38862 | 776 |
6000 | 180029 | 956 | 954 | 55303 | 941 |
7000 | 246745 | 1199 | 1165 | 75570 | 1111 |
8000 | 487187 | 1412 | 1307 | 98729 | 1330 |
9000 | 1062128 | 1906 | 1494 | 134470 | 1474 |
10000 | 1807235 | 2068 | 1719 | 154774 | 1688 |
Таблица 2. Поиск элемента (возрастающие ключи).
Количество элементов | ДДП | КЧД | Постоянно сортированный массив | Несортированный массив | Массив с постсортировкой |
1000 | 308 | 419 | 2077 | 2047 | 2080 |
2000 | 639 | 876 | 13422 | 8046 | 8179 |
3000 | 1001 | 1372 | 25092 | 30902 | 18407 |
4000 | 1380 | 1831 | 32572 | 32473 | 32651 |
5000 | 1680 | 2286 | 50846 | 51001 | 50962 |
6000 | 2105 | 2891 | 73321 | 73114 | 73202 |
7000 | 2569 | 3514 | 99578 | 100059 | 99801 |
8000 | 3025 | 4384 | 129833 | 129897 | 130054 |
9000 | 3484 | 5033 | 164846 | 194361 | 164264 |
10000 | 4050 | 5690 | 203207 | 202979 | 202738 |
Таблица 3. Удаление элемента по ключу (возрастающие ключи).
Количество элементов | ДДП | КЧД | Постоянно сортированный массив | Несортированный массив | Массив с постсортировкой |
1000 | 547 (25) | 548 (13) | 1800 | 34 | 362 |
2000 | 1133 (25) | 1171 (14) | 5534 | 70 | 734 |
3000 | 1723 (28) | 1905 (14) | 12065 | 150 | 1174 |
4000 | 2891 (28) | 2985 (15) | 20867 | 223 | 1626 |
5000 | 3604 (28) | 4024 (15) | 32927 | 248 | 1962 |
6000 | 4336 (29) | 4970 (15) | 44720 | 373 | 2537 |
7000 | 5196 (29) | 5794 (16) | 60723 | 443 | 2977 |
8000 | 6051 (30) | 6972 (16) | 77482 | 511 | 3485 |
9000 | 6994 (30) | 7519 (16) | 104219 | 590 | 3821 |
10000 | 9544 (31) | 10303 (16) | 118760 | 584 | 4408 |
Таблица 4. Добавление элемента (случайные ключи)
Количество элементов | ДДП | КЧД | Постоянно сортированный массив | Несортированный массив | Массив с постсортировкой |
1000 | 181 | 136 | 159 | 1354 | 155 |
2000 | 406 | 307 | 347 | 5412 | 339 |
3000 | 653 | 494 | 551 | 12927 | 538 |
4000 | 925 | 702 | 765 | 23936 | 747 |
5000 | 1223 | 949 | 1024 | 37861 | 962 |
6000 | 1532 | 1142 | 1216 | 55124 | 1185 |
7000 | 1893 | 1494 | 1453 | 75628 | 1403 |
8000 | 2477 | 1833 | 1679 | 98802 | 1631 |
9000 | 2943 | 2390 | 1994 | 125570 | 1858 |
10000 | 3395 | 2937 | 2228 | 154791 | 2108 |
Таблица 5. Поиск элемента (случайные ключи)
Количество элементов | ДДП | КЧД | Постоянно сортированный массив | Несортированный массив | Массив с постсортировкой |
1000 | 469 | 517 | 1149 | 2014 | 1195 |
2000 | 995 | 1079 | 4381 | 8054 | 4387 |
3000 | 1557 | 1756 | 9673 | 18191 | 9639 |
4000 | 2272 | 2424 | 17071 | 32451 | 17105 |
5000 | 3070 | 3019 | 27380 | 50665 | 26954 |
6000 | 3528 | 3618 | 39294 | 72996 | 39227 |
7000 | 4322 | 4542 | 53255 | 99402 | 53309 |
8000 | 5299 | 5531 | 71406 | 129964 | 70766 |
9000 | 6180 | 6553 | 89583 | 164943 | 89935 |
10000 | 7527 | 7797 | 112190 | 202993 | 111439 |
Таблица 6. Удаление элемента по ключу (случайные ключи)
Постоянно сортированный массив – это массив, в который элементы вставляются так, что бы он сохранял свойство упорядоченности. Массив с постсортировкой – это массив, в который сначала вставляются все элементы, а потом он сортируется алгоритмом быстрой сортировки. Данные таблицы, безусловно, не являются истиной в последней инстанции, но позволят вам прикинуть, какая из структур данных будет наиболее производительна в вашей программе, учитывая предполагаемую вероятность операций вставки, удаления и поиска. Так, например, массив с постсортировкой является весьма привлекательным по производительности, но совершенно не подходит для комплексных работ, так как предполагает фиксированный порядок действий – сначала только добавление элементов, а после использование полученной информации. Другие структуры данных лишены этого недостатка. Для большого числа (порядка 10 000) случайных элементов время поиска в ДДП и КЧД становится практически одинаковым. Как следствие, можно реализовать более простые алгоритмы, исходя из некоторых свойств входных данных. С другой стороны, в крайнем случае (возрастающие элементы) ДДП отстают от КЧД на несколько порядков. Постоянно сортированный массив является абсолютным победителем по скорости, но не имеет естественной поддержки отношений родитель-ребёнок. Если они вам нужны, придётся реализовывать их поддержку самостоятельно. Также надо всегда помнить, что при количестве элементов порядка тысячи, асимптотические показатели скорости ещё не вполне вступили в силу и теоретически более быстрые структуры данных на практике могут оказаться более медленными. Так, например, скорость поиска в КЧД и массиве с пресортировкой до 5000-7000 практически одинакова. Так же надо заметить, что тестирование производилось на объектах относительно малого размера (8 байт), сравнимого с размером указателя (4 байта). Все виды массивов сортированных подразумевают весьма интенсивное копирование элементов, в то время как деревья работают с указателями. При размере элемента, на порядки превышающем размеры указателя, акценты сместятся весьма значительно. Например, ниже приведены результаты испытания с ключом типа int (32-x битное целое) и битовыми данными размером в 256 байт.
Количество элементов | ДДП | КЧД | Постоянно сортированный массив | Не сортированный массив | Массив с постсортировкой |
1000 | 5868 (1000) | 1663 (17) | 1430 | 1154 | 1035 |
2000 | 140888 (2000) | 3694 (19) | 3476 | 2460 | 2808 |
3000 | 368748 (3000) | 5815 (20) | 5372 | 3848 | 4382 |
4000 | 721328 (4000) | 7271 (21) | 7274 | 5175 | 6035 |
5000 | 1208373 (5000) | 9349 (22) | 9247 | 6670 | 7619 |
6000 | 1752135 (6000) | 11395 (22) | 11046 | 7778 | 9168 |
7000 | 2501167 (7000) | 13503 (23) | 13327 | 9378 | 10764 |
8000 | 3334948 (8000) | 15753 (23) | 18222 | 12560 | 15267 |
9000 | 4266560 (9000) | 21600 (24) | 20564 | 15391 | 17430 |
10000 | 5421499 (10000) | 24105 (24) | 24064 | 17152 | 19341 |
Таблица 7. Добавление элемента (возрастающие ключи)
Количество элементов | ДДП | КЧД | Постоянно сортированный массив | Не сортированный массив | Массив с постсортировкой |
1000 | 4289 | 132 | 242 | 1621 | 230 |
2000 | 134074 | 303 | 605 | 6903 | 530 |
3000 | 359985 | 457 | 961 | 24268 | 806 |
4000 | 706129 | 787 | 1336 | 27610 | 1121 |
5000 | 1183405 | 959 | 1736 | 44660 | 1516 |
6000 | 1730699 | 1116 | 2138 | 69068 | 1841 |
7000 | 2462759 | 1344 | 2494 | 103158 | 2251 |
8000 | 3293519 | 1565 | 2871 | 159274 | 2617 |
9000 | 4215750 | 1840 | 3284 | 278697 | 2923 |
10000 | 5361524 | 2060 | 3698 | 513268 | 3303 |
Таблица 8. Поиск элемента (возрастающие ключи)