Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Лабораторная работа №1 по алгоритмам и структурам данных

Вводные

  • Матрица размером N = 2 ^ 13, M = 2 ^ X, X = 1..13
  • 2 типа заполнения матрицы ("FillType")
    • 0 - A[i][j] = (N / M * i + j) * 2, target = 2 * N + 1
    • 1 - A[i][j] = (N / M * i * j) * 2, target = 16 * N + 1
  • Выполнены 3 типа поиска
    • Лестничный ("LadderSearch")
    • Бинарный ("BinarySearch")
    • Экспоненциальный ("ExponentialSearch")

Окружение бенчмарка

BenchmarkDotNet v0.13.10, Arch Linux
AMD Ryzen 9 5980HX with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK 8.0.100-rc.2.23502.2
[Host] : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2
DefaultJob : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2

Результаты бенчмарка в виде таблицы

MethodFillTypeXMeanErrorStdDevMedianAllocated
LadderSearch014,276.144 ns79.6007 ns74.4586 ns4,279.363 ns-
LadderSearch026,568.505 ns36.6728 ns32.5095 ns6,560.073 ns-
LadderSearch037,493.771 ns114.8606 ns101.8210 ns7,472.445 ns-
LadderSearch048,201.763 ns44.1196 ns36.8419 ns8,199.045 ns-
LadderSearch058,276.689 ns25.3735 ns22.4929 ns8,268.411 ns-
LadderSearch069,018.737 ns33.4170 ns31.2583 ns9,014.769 ns-
LadderSearch079,550.450 ns49.2616 ns43.6691 ns9,553.458 ns-
LadderSearch088,688.111 ns27.3351 ns24.2318 ns8,686.822 ns-
LadderSearch099,719.340 ns23.0773 ns21.5865 ns9,717.460 ns-
LadderSearch01010,623.873 ns202.3660 ns207.8149 ns10,499.273 ns-
LadderSearch01116,921.323 ns112.1431 ns93.6445 ns16,944.971 ns-
LadderSearch01224,770.726 ns183.8242 ns143.5178 ns24,751.239 ns-
LadderSearch01344,688.950 ns892.8737 ns835.1946 ns44,256.337 ns-
LadderSearch118,435.526 ns48.2965 ns42.8136 ns8,432.161 ns-
LadderSearch128,390.068 ns30.5839 ns25.5389 ns8,389.270 ns-
LadderSearch138,727.407 ns35.0494 ns31.0704 ns8,726.476 ns-
LadderSearch148,962.839 ns37.3573 ns34.9440 ns8,965.929 ns-
LadderSearch158,480.261 ns35.6809 ns33.3759 ns8,485.645 ns-
LadderSearch169,079.187 ns14.9865 ns13.2851 ns9,074.077 ns-
LadderSearch179,375.424 ns37.4504 ns33.1988 ns9,382.281 ns-
LadderSearch1810,340.770 ns43.8161 ns38.8418 ns10,342.586 ns-
LadderSearch1912,483.891 ns168.2591 ns149.1573 ns12,512.567 ns-
LadderSearch11016,032.020 ns260.7283 ns243.8854 ns16,125.450 ns-
LadderSearch11122,969.610 ns457.6890 ns685.0473 ns23,145.818 ns-
LadderSearch11235,639.313 ns702.3914 ns937.6724 ns36,013.095 ns-
LadderSearch11359,099.267 ns1,120.4559 ns1,290.3187 ns59,373.644 ns-
BinarySearch0126.249 ns0.5312 ns0.7091 ns26.251 ns-
BinarySearch0247.070 ns0.0597 ns0.0558 ns47.074 ns-
BinarySearch0392.435 ns0.1865 ns0.1456 ns92.411 ns-
BinarySearch04194.061 ns0.6473 ns0.5738 ns194.182 ns-
BinarySearch05404.295 ns1.1678 ns0.9752 ns404.357 ns-
BinarySearch06833.888 ns3.0694 ns2.8712 ns833.412 ns-
BinarySearch071,815.645 ns10.3068 ns9.6409 ns1,816.818 ns-
BinarySearch083,696.759 ns7.6348 ns7.1416 ns3,697.391 ns-
BinarySearch097,261.100 ns31.0396 ns25.9195 ns7,255.448 ns-
BinarySearch01014,941.778 ns52.0900 ns46.1764 ns14,944.106 ns-
BinarySearch011108,945.076 ns2,115.2841 ns2,263.3303 ns109,389.714 ns-
BinarySearch012310,904.404 ns1,749.9439 ns1,551.2797 ns311,377.316 ns-
BinarySearch013736,010.604 ns3,936.4639 ns3,287.1256 ns735,770.214 ns1 B
BinarySearch1125.992 ns0.5470 ns0.7845 ns25.743 ns-
BinarySearch1248.448 ns0.4051 ns0.3790 ns48.403 ns-
BinarySearch1396.320 ns0.6682 ns0.6251 ns96.267 ns-
BinarySearch14204.415 ns0.3054 ns0.2707 ns204.389 ns-
BinarySearch15399.565 ns0.8670 ns0.8110 ns399.747 ns-
BinarySearch161,013.348 ns5.5267 ns5.1697 ns1,012.705 ns-
BinarySearch171,974.013 ns9.0339 ns8.0083 ns1,972.633 ns-
BinarySearch184,043.035 ns9.3130 ns8.2557 ns4,041.964 ns-
BinarySearch197,670.319 ns19.3475 ns16.1560 ns7,663.952 ns-
BinarySearch11015,823.482 ns182.8071 ns170.9979 ns15,855.284 ns-
BinarySearch11132,679.370 ns218.4291 ns193.6317 ns32,696.153 ns-
BinarySearch112180,156.946 ns1,130.6078 ns1,002.2544 ns180,208.268 ns-
BinarySearch113450,914.914 ns1,594.1643 ns1,413.1852 ns451,153.340 ns-
ExponentialSearch019.478 ns0.0289 ns0.0241 ns9.483 ns-
ExponentialSearch0211.398 ns0.0166 ns0.0147 ns11.402 ns-
ExponentialSearch0317.952 ns0.1038 ns0.0811 ns17.924 ns-
ExponentialSearch0429.138 ns0.0746 ns0.0661 ns29.148 ns-
ExponentialSearch0553.405 ns0.5534 ns0.4905 ns53.348 ns-
ExponentialSearch06718.933 ns16.2197 ns47.8242 ns724.369 ns-
ExponentialSearch071,498.035 ns33.8527 ns99.8155 ns1,529.641 ns-
ExponentialSearch082,905.603 ns86.6401 ns255.4603 ns2,923.974 ns-
ExponentialSearch096,009.610 ns118.4055 ns281.4031 ns6,080.731 ns-
ExponentialSearch01011,079.900 ns220.3434 ns397.3246 ns11,213.416 ns-
ExponentialSearch01121,808.645 ns435.6684 ns691.0162 ns21,877.266 ns-
ExponentialSearch01245,182.802 ns886.3359 ns1,431.2673 ns45,256.089 ns-
ExponentialSearch01392,178.113 ns1,618.8458 ns1,351.8095 ns91,700.340 ns-
ExponentialSearch119.784 ns0.0417 ns0.0370 ns9.785 ns-
ExponentialSearch1211.943 ns0.0345 ns0.0323 ns11.925 ns-
ExponentialSearch1318.501 ns0.1012 ns0.0845 ns18.474 ns-
ExponentialSearch1430.149 ns0.0796 ns0.0745 ns30.175 ns-
ExponentialSearch1553.555 ns1.0841 ns2.1144 ns52.748 ns-
ExponentialSearch16787.410 ns15.7835 ns35.9470 ns794.131 ns-
ExponentialSearch171,391.648 ns27.7470 ns62.0602 ns1,399.175 ns-
ExponentialSearch183,242.236 ns64.7799 ns115.1462 ns3,271.486 ns-
ExponentialSearch196,302.425 ns126.0188 ns248.7488 ns6,331.926 ns-
ExponentialSearch11012,459.095 ns245.4635 ns416.8156 ns12,531.328 ns-
ExponentialSearch11125,329.182 ns401.3728 ns375.4443 ns25,356.859 ns-
ExponentialSearch11249,895.819 ns994.5625 ns2,476.8058 ns50,302.644 ns-
ExponentialSearch11390,448.470 ns1,744.9978 ns1,791.9843 ns90,968.673 ns-

Результаты в виде графиков

График при первом заполненииЛогарифмический график при первом заполненииГрафик при втором заполненииЛогарифмический график при втором заполненииГрафик экспоненциального поиска при разных заполненияхСравнения графика экспоненциального поиска при разных заполнениях

Выводы

  1. Бинарный поиск является самым медленным из всех представленных, что сопоставляется с оценкой сложности O(m*log(n)). Несмотря на это, на маленьких данных он показывает лучший результат, чем поиск лестницей. Стоит отметить, что при x < 9 результаты бин. поиска при 1 и 2 заполнении похожи (результаты отличаются < 10%), однако при x >= 10 на 2 заполнении алгоритм выполняется заметно дольше.
  2. Лестничный поиск показал самые стабильные результаты. Его сложность O(n + m). Пусть при малых данных (при x < 10) он оказался самым неэффетивным, медленный (линейный) рост позволил ему оказаться самым быстрым при больших данных. Результаты подтверждаются при обоих вариантах заполнения матрицы, однако важно заметить, что при втором заполнении время выполнения лестничного поиска значительно выросло.
  3. Экспоненциальный поиск оказался самым эффективным при x < 10. Это связано с его сложностью O(M(logN - logM + 1)), однако он уступил лестничному при больших данных. Время выполнения не зависит от типа заполнения.
  4. При x = 10 все алгоритмы демонстрируют примерно одинаковое время исполнения.
  5. В целях максимальной производительности стоит использовать экспоненциальный поиск при x <= 10, а при x > 10 - лестничный.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Лабораторная работа №1 по алгоритмам и структурам данных

Вводные

  • Матрица размером N = 2 ^ 13, M = 2 ^ X, X = 1..13
  • 2 типа заполнения матрицы ("FillType")
    • 0 - A[i][j] = (N / M * i + j) * 2, target = 2 * N + 1
    • 1 - A[i][j] = (N / M * i * j) * 2, target = 16 * N + 1
  • Выполнены 3 типа поиска
    • Лестничный ("LadderSearch")
    • Бинарный ("BinarySearch")
    • Экспоненциальный ("ExponentialSearch")

Окружение бенчмарка

BenchmarkDotNet v0.13.10, Arch Linux
AMD Ryzen 9 5980HX with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK 8.0.100-rc.2.23502.2
[Host] : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2
DefaultJob : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2

Результаты бенчмарка в виде таблицы

MethodFillTypeXMeanErrorStdDevMedianAllocated
LadderSearch014,276.144 ns79.6007 ns74.4586 ns4,279.363 ns-
LadderSearch026,568.505 ns36.6728 ns32.5095 ns6,560.073 ns-
LadderSearch037,493.771 ns114.8606 ns101.8210 ns7,472.445 ns-
LadderSearch048,201.763 ns44.1196 ns36.8419 ns8,199.045 ns-
LadderSearch058,276.689 ns25.3735 ns22.4929 ns8,268.411 ns-
LadderSearch069,018.737 ns33.4170 ns31.2583 ns9,014.769 ns-
LadderSearch079,550.450 ns49.2616 ns43.6691 ns9,553.458 ns-
LadderSearch088,688.111 ns27.3351 ns24.2318 ns8,686.822 ns-
LadderSearch099,719.340 ns23.0773 ns21.5865 ns9,717.460 ns-
LadderSearch01010,623.873 ns202.3660 ns207.8149 ns10,499.273 ns-
LadderSearch01116,921.323 ns112.1431 ns93.6445 ns16,944.971 ns-
LadderSearch01224,770.726 ns183.8242 ns143.5178 ns24,751.239 ns-
LadderSearch01344,688.950 ns892.8737 ns835.1946 ns44,256.337 ns-
LadderSearch118,435.526 ns48.2965 ns42.8136 ns8,432.161 ns-
LadderSearch128,390.068 ns30.5839 ns25.5389 ns8,389.270 ns-
LadderSearch138,727.407 ns35.0494 ns31.0704 ns8,726.476 ns-
LadderSearch148,962.839 ns37.3573 ns34.9440 ns8,965.929 ns-
LadderSearch158,480.261 ns35.6809 ns33.3759 ns8,485.645 ns-
LadderSearch169,079.187 ns14.9865 ns13.2851 ns9,074.077 ns-
LadderSearch179,375.424 ns37.4504 ns33.1988 ns9,382.281 ns-
LadderSearch1810,340.770 ns43.8161 ns38.8418 ns10,342.586 ns-
LadderSearch1912,483.891 ns168.2591 ns149.1573 ns12,512.567 ns-
LadderSearch11016,032.020 ns260.7283 ns243.8854 ns16,125.450 ns-
LadderSearch11122,969.610 ns457.6890 ns685.0473 ns23,145.818 ns-
LadderSearch11235,639.313 ns702.3914 ns937.6724 ns36,013.095 ns-
LadderSearch11359,099.267 ns1,120.4559 ns1,290.3187 ns59,373.644 ns-
BinarySearch0126.249 ns0.5312 ns0.7091 ns26.251 ns-
BinarySearch0247.070 ns0.0597 ns0.0558 ns47.074 ns-
BinarySearch0392.435 ns0.1865 ns0.1456 ns92.411 ns-
BinarySearch04194.061 ns0.6473 ns0.5738 ns194.182 ns-
BinarySearch05404.295 ns1.1678 ns0.9752 ns404.357 ns-
BinarySearch06833.888 ns3.0694 ns2.8712 ns833.412 ns-
BinarySearch071,815.645 ns10.3068 ns9.6409 ns1,816.818 ns-
BinarySearch083,696.759 ns7.6348 ns7.1416 ns3,697.391 ns-
BinarySearch097,261.100 ns31.0396 ns25.9195 ns7,255.448 ns-
BinarySearch01014,941.778 ns52.0900 ns46.1764 ns14,944.106 ns-
BinarySearch011108,945.076 ns2,115.2841 ns2,263.3303 ns109,389.714 ns-
BinarySearch012310,904.404 ns1,749.9439 ns1,551.2797 ns311,377.316 ns-
BinarySearch013736,010.604 ns3,936.4639 ns3,287.1256 ns735,770.214 ns1 B
BinarySearch1125.992 ns0.5470 ns0.7845 ns25.743 ns-
BinarySearch1248.448 ns0.4051 ns0.3790 ns48.403 ns-
BinarySearch1396.320 ns0.6682 ns0.6251 ns96.267 ns-
BinarySearch14204.415 ns0.3054 ns0.2707 ns204.389 ns-
BinarySearch15399.565 ns0.8670 ns0.8110 ns399.747 ns-
BinarySearch161,013.348 ns5.5267 ns5.1697 ns1,012.705 ns-
BinarySearch171,974.013 ns9.0339 ns8.0083 ns1,972.633 ns-
BinarySearch184,043.035 ns9.3130 ns8.2557 ns4,041.964 ns-
BinarySearch197,670.319 ns19.3475 ns16.1560 ns7,663.952 ns-
BinarySearch11015,823.482 ns182.8071 ns170.9979 ns15,855.284 ns-
BinarySearch11132,679.370 ns218.4291 ns193.6317 ns32,696.153 ns-
BinarySearch112180,156.946 ns1,130.6078 ns1,002.2544 ns180,208.268 ns-
BinarySearch113450,914.914 ns1,594.1643 ns1,413.1852 ns451,153.340 ns-
ExponentialSearch019.478 ns0.0289 ns0.0241 ns9.483 ns-
ExponentialSearch0211.398 ns0.0166 ns0.0147 ns11.402 ns-
ExponentialSearch0317.952 ns0.1038 ns0.0811 ns17.924 ns-
ExponentialSearch0429.138 ns0.0746 ns0.0661 ns29.148 ns-
ExponentialSearch0553.405 ns0.5534 ns0.4905 ns53.348 ns-
ExponentialSearch06718.933 ns16.2197 ns47.8242 ns724.369 ns-
ExponentialSearch071,498.035 ns33.8527 ns99.8155 ns1,529.641 ns-
ExponentialSearch082,905.603 ns86.6401 ns255.4603 ns2,923.974 ns-
ExponentialSearch096,009.610 ns118.4055 ns281.4031 ns6,080.731 ns-
ExponentialSearch01011,079.900 ns220.3434 ns397.3246 ns11,213.416 ns-
ExponentialSearch01121,808.645 ns435.6684 ns691.0162 ns21,877.266 ns-
ExponentialSearch01245,182.802 ns886.3359 ns1,431.2673 ns45,256.089 ns-
ExponentialSearch01392,178.113 ns1,618.8458 ns1,351.8095 ns91,700.340 ns-
ExponentialSearch119.784 ns0.0417 ns0.0370 ns9.785 ns-
ExponentialSearch1211.943 ns0.0345 ns0.0323 ns11.925 ns-
ExponentialSearch1318.501 ns0.1012 ns0.0845 ns18.474 ns-
ExponentialSearch1430.149 ns0.0796 ns0.0745 ns30.175 ns-
ExponentialSearch1553.555 ns1.0841 ns2.1144 ns52.748 ns-
ExponentialSearch16787.410 ns15.7835 ns35.9470 ns794.131 ns-
ExponentialSearch171,391.648 ns27.7470 ns62.0602 ns1,399.175 ns-
ExponentialSearch183,242.236 ns64.7799 ns115.1462 ns3,271.486 ns-
ExponentialSearch196,302.425 ns126.0188 ns248.7488 ns6,331.926 ns-
ExponentialSearch11012,459.095 ns245.4635 ns416.8156 ns12,531.328 ns-
ExponentialSearch11125,329.182 ns401.3728 ns375.4443 ns25,356.859 ns-
ExponentialSearch11249,895.819 ns994.5625 ns2,476.8058 ns50,302.644 ns-
ExponentialSearch11390,448.470 ns1,744.9978 ns1,791.9843 ns90,968.673 ns-

Результаты в виде графиков

График при первом заполненииЛогарифмический график при первом заполненииГрафик при втором заполненииЛогарифмический график при втором заполненииГрафик экспоненциального поиска при разных заполненияхСравнения графика экспоненциального поиска при разных заполнениях

Выводы

  1. Бинарный поиск является самым медленным из всех представленных, что сопоставляется с оценкой сложности O(m*log(n)). Несмотря на это, на маленьких данных он показывает лучший результат, чем поиск лестницей. Стоит отметить, что при x < 9 результаты бин. поиска при 1 и 2 заполнении похожи (результаты отличаются < 10%), однако при x >= 10 на 2 заполнении алгоритм выполняется заметно дольше.
  2. Лестничный поиск показал самые стабильные результаты. Его сложность O(n + m). Пусть при малых данных (при x < 10) он оказался самым неэффетивным, медленный (линейный) рост позволил ему оказаться самым быстрым при больших данных. Результаты подтверждаются при обоих вариантах заполнения матрицы, однако важно заметить, что при втором заполнении время выполнения лестничного поиска значительно выросло.
  3. Экспоненциальный поиск оказался самым эффективным при x < 10. Это связано с его сложностью O(M(logN - logM + 1)), однако он уступил лестничному при больших данных. Время выполнения не зависит от типа заполнения.
  4. При x = 10 все алгоритмы демонстрируют примерно одинаковое время исполнения.
  5. В целях максимальной производительности стоит использовать экспоненциальный поиск при x <= 10, а при x > 10 - лестничный.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Лабораторная работа №1 по алгоритмам и структурам данных

Вводные

  • Матрица размером N = 2 ^ 13, M = 2 ^ X, X = 1..13
  • 2 типа заполнения матрицы ("FillType")
    • 0 - A[i][j] = (N / M * i + j) * 2, target = 2 * N + 1
    • 1 - A[i][j] = (N / M * i * j) * 2, target = 16 * N + 1
  • Выполнены 3 типа поиска
    • Лестничный ("LadderSearch")
    • Бинарный ("BinarySearch")
    • Экспоненциальный ("ExponentialSearch")

Окружение бенчмарка

BenchmarkDotNet v0.13.10, Arch Linux
AMD Ryzen 9 5980HX with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK 8.0.100-rc.2.23502.2
[Host] : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2
DefaultJob : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2

Результаты бенчмарка в виде таблицы

MethodFillTypeXMeanErrorStdDevMedianAllocated
LadderSearch014,276.144 ns79.6007 ns74.4586 ns4,279.363 ns-
LadderSearch026,568.505 ns36.6728 ns32.5095 ns6,560.073 ns-
LadderSearch037,493.771 ns114.8606 ns101.8210 ns7,472.445 ns-
LadderSearch048,201.763 ns44.1196 ns36.8419 ns8,199.045 ns-
LadderSearch058,276.689 ns25.3735 ns22.4929 ns8,268.411 ns-
LadderSearch069,018.737 ns33.4170 ns31.2583 ns9,014.769 ns-
LadderSearch079,550.450 ns49.2616 ns43.6691 ns9,553.458 ns-
LadderSearch088,688.111 ns27.3351 ns24.2318 ns8,686.822 ns-
LadderSearch099,719.340 ns23.0773 ns21.5865 ns9,717.460 ns-
LadderSearch01010,623.873 ns202.3660 ns207.8149 ns10,499.273 ns-
LadderSearch01116,921.323 ns112.1431 ns93.6445 ns16,944.971 ns-
LadderSearch01224,770.726 ns183.8242 ns143.5178 ns24,751.239 ns-
LadderSearch01344,688.950 ns892.8737 ns835.1946 ns44,256.337 ns-
LadderSearch118,435.526 ns48.2965 ns42.8136 ns8,432.161 ns-
LadderSearch128,390.068 ns30.5839 ns25.5389 ns8,389.270 ns-
LadderSearch138,727.407 ns35.0494 ns31.0704 ns8,726.476 ns-
LadderSearch148,962.839 ns37.3573 ns34.9440 ns8,965.929 ns-
LadderSearch158,480.261 ns35.6809 ns33.3759 ns8,485.645 ns-
LadderSearch169,079.187 ns14.9865 ns13.2851 ns9,074.077 ns-
LadderSearch179,375.424 ns37.4504 ns33.1988 ns9,382.281 ns-
LadderSearch1810,340.770 ns43.8161 ns38.8418 ns10,342.586 ns-
LadderSearch1912,483.891 ns168.2591 ns149.1573 ns12,512.567 ns-
LadderSearch11016,032.020 ns260.7283 ns243.8854 ns16,125.450 ns-
LadderSearch11122,969.610 ns457.6890 ns685.0473 ns23,145.818 ns-
LadderSearch11235,639.313 ns702.3914 ns937.6724 ns36,013.095 ns-
LadderSearch11359,099.267 ns1,120.4559 ns1,290.3187 ns59,373.644 ns-
BinarySearch0126.249 ns0.5312 ns0.7091 ns26.251 ns-
BinarySearch0247.070 ns0.0597 ns0.0558 ns47.074 ns-
BinarySearch0392.435 ns0.1865 ns0.1456 ns92.411 ns-
BinarySearch04194.061 ns0.6473 ns0.5738 ns194.182 ns-
BinarySearch05404.295 ns1.1678 ns0.9752 ns404.357 ns-
BinarySearch06833.888 ns3.0694 ns2.8712 ns833.412 ns-
BinarySearch071,815.645 ns10.3068 ns9.6409 ns1,816.818 ns-
BinarySearch083,696.759 ns7.6348 ns7.1416 ns3,697.391 ns-
BinarySearch097,261.100 ns31.0396 ns25.9195 ns7,255.448 ns-
BinarySearch01014,941.778 ns52.0900 ns46.1764 ns14,944.106 ns-
BinarySearch011108,945.076 ns2,115.2841 ns2,263.3303 ns109,389.714 ns-
BinarySearch012310,904.404 ns1,749.9439 ns1,551.2797 ns311,377.316 ns-
BinarySearch013736,010.604 ns3,936.4639 ns3,287.1256 ns735,770.214 ns1 B
BinarySearch1125.992 ns0.5470 ns0.7845 ns25.743 ns-
BinarySearch1248.448 ns0.4051 ns0.3790 ns48.403 ns-
BinarySearch1396.320 ns0.6682 ns0.6251 ns96.267 ns-
BinarySearch14204.415 ns0.3054 ns0.2707 ns204.389 ns-
BinarySearch15399.565 ns0.8670 ns0.8110 ns399.747 ns-
BinarySearch161,013.348 ns5.5267 ns5.1697 ns1,012.705 ns-
BinarySearch171,974.013 ns9.0339 ns8.0083 ns1,972.633 ns-
BinarySearch184,043.035 ns9.3130 ns8.2557 ns4,041.964 ns-
BinarySearch197,670.319 ns19.3475 ns16.1560 ns7,663.952 ns-
BinarySearch11015,823.482 ns182.8071 ns170.9979 ns15,855.284 ns-
BinarySearch11132,679.370 ns218.4291 ns193.6317 ns32,696.153 ns-
BinarySearch112180,156.946 ns1,130.6078 ns1,002.2544 ns180,208.268 ns-
BinarySearch113450,914.914 ns1,594.1643 ns1,413.1852 ns451,153.340 ns-
ExponentialSearch019.478 ns0.0289 ns0.0241 ns9.483 ns-
ExponentialSearch0211.398 ns0.0166 ns0.0147 ns11.402 ns-
ExponentialSearch0317.952 ns0.1038 ns0.0811 ns17.924 ns-
ExponentialSearch0429.138 ns0.0746 ns0.0661 ns29.148 ns-
ExponentialSearch0553.405 ns0.5534 ns0.4905 ns53.348 ns-
ExponentialSearch06718.933 ns16.2197 ns47.8242 ns724.369 ns-
ExponentialSearch071,498.035 ns33.8527 ns99.8155 ns1,529.641 ns-
ExponentialSearch082,905.603 ns86.6401 ns255.4603 ns2,923.974 ns-
ExponentialSearch096,009.610 ns118.4055 ns281.4031 ns6,080.731 ns-
ExponentialSearch01011,079.900 ns220.3434 ns397.3246 ns11,213.416 ns-
ExponentialSearch01121,808.645 ns435.6684 ns691.0162 ns21,877.266 ns-
ExponentialSearch01245,182.802 ns886.3359 ns1,431.2673 ns45,256.089 ns-
ExponentialSearch01392,178.113 ns1,618.8458 ns1,351.8095 ns91,700.340 ns-
ExponentialSearch119.784 ns0.0417 ns0.0370 ns9.785 ns-
ExponentialSearch1211.943 ns0.0345 ns0.0323 ns11.925 ns-
ExponentialSearch1318.501 ns0.1012 ns0.0845 ns18.474 ns-
ExponentialSearch1430.149 ns0.0796 ns0.0745 ns30.175 ns-
ExponentialSearch1553.555 ns1.0841 ns2.1144 ns52.748 ns-
ExponentialSearch16787.410 ns15.7835 ns35.9470 ns794.131 ns-
ExponentialSearch171,391.648 ns27.7470 ns62.0602 ns1,399.175 ns-
ExponentialSearch183,242.236 ns64.7799 ns115.1462 ns3,271.486 ns-
ExponentialSearch196,302.425 ns126.0188 ns248.7488 ns6,331.926 ns-
ExponentialSearch11012,459.095 ns245.4635 ns416.8156 ns12,531.328 ns-
ExponentialSearch11125,329.182 ns401.3728 ns375.4443 ns25,356.859 ns-
ExponentialSearch11249,895.819 ns994.5625 ns2,476.8058 ns50,302.644 ns-
ExponentialSearch11390,448.470 ns1,744.9978 ns1,791.9843 ns90,968.673 ns-

Результаты в виде графиков

График при первом заполненииЛогарифмический график при первом заполненииГрафик при втором заполненииЛогарифмический график при втором заполненииГрафик экспоненциального поиска при разных заполненияхСравнения графика экспоненциального поиска при разных заполнениях

Выводы

  1. Бинарный поиск является самым медленным из всех представленных, что сопоставляется с оценкой сложности O(m*log(n)). Несмотря на это, на маленьких данных он показывает лучший результат, чем поиск лестницей. Стоит отметить, что при x < 9 результаты бин. поиска при 1 и 2 заполнении похожи (результаты отличаются < 10%), однако при x >= 10 на 2 заполнении алгоритм выполняется заметно дольше.
  2. Лестничный поиск показал самые стабильные результаты. Его сложность O(n + m). Пусть при малых данных (при x < 10) он оказался самым неэффетивным, медленный (линейный) рост позволил ему оказаться самым быстрым при больших данных. Результаты подтверждаются при обоих вариантах заполнения матрицы, однако важно заметить, что при втором заполнении время выполнения лестничного поиска значительно выросло.
  3. Экспоненциальный поиск оказался самым эффективным при x < 10. Это связано с его сложностью O(M(logN - logM + 1)), однако он уступил лестничному при больших данных. Время выполнения не зависит от типа заполнения.
  4. При x = 10 все алгоритмы демонстрируют примерно одинаковое время исполнения.
  5. В целях максимальной производительности стоит использовать экспоненциальный поиск при x <= 10, а при x > 10 - лестничный.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Лабораторная работа №1 по алгоритмам и структурам данных

Вводные

  • Матрица размером N = 2 ^ 13, M = 2 ^ X, X = 1..13
  • 2 типа заполнения матрицы ("FillType")
    • 0 - A[i][j] = (N / M * i + j) * 2, target = 2 * N + 1
    • 1 - A[i][j] = (N / M * i * j) * 2, target = 16 * N + 1
  • Выполнены 3 типа поиска
    • Лестничный ("LadderSearch")
    • Бинарный ("BinarySearch")
    • Экспоненциальный ("ExponentialSearch")

Окружение бенчмарка

BenchmarkDotNet v0.13.10, Arch Linux
AMD Ryzen 9 5980HX with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK 8.0.100-rc.2.23502.2
[Host] : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2
DefaultJob : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2

Результаты бенчмарка в виде таблицы

MethodFillTypeXMeanErrorStdDevMedianAllocated
LadderSearch014,276.144 ns79.6007 ns74.4586 ns4,279.363 ns-
LadderSearch026,568.505 ns36.6728 ns32.5095 ns6,560.073 ns-
LadderSearch037,493.771 ns114.8606 ns101.8210 ns7,472.445 ns-
LadderSearch048,201.763 ns44.1196 ns36.8419 ns8,199.045 ns-
LadderSearch058,276.689 ns25.3735 ns22.4929 ns8,268.411 ns-
LadderSearch069,018.737 ns33.4170 ns31.2583 ns9,014.769 ns-
LadderSearch079,550.450 ns49.2616 ns43.6691 ns9,553.458 ns-
LadderSearch088,688.111 ns27.3351 ns24.2318 ns8,686.822 ns-
LadderSearch099,719.340 ns23.0773 ns21.5865 ns9,717.460 ns-
LadderSearch01010,623.873 ns202.3660 ns207.8149 ns10,499.273 ns-
LadderSearch01116,921.323 ns112.1431 ns93.6445 ns16,944.971 ns-
LadderSearch01224,770.726 ns183.8242 ns143.5178 ns24,751.239 ns-
LadderSearch01344,688.950 ns892.8737 ns835.1946 ns44,256.337 ns-
LadderSearch118,435.526 ns48.2965 ns42.8136 ns8,432.161 ns-
LadderSearch128,390.068 ns30.5839 ns25.5389 ns8,389.270 ns-
LadderSearch138,727.407 ns35.0494 ns31.0704 ns8,726.476 ns-
LadderSearch148,962.839 ns37.3573 ns34.9440 ns8,965.929 ns-
LadderSearch158,480.261 ns35.6809 ns33.3759 ns8,485.645 ns-
LadderSearch169,079.187 ns14.9865 ns13.2851 ns9,074.077 ns-
LadderSearch179,375.424 ns37.4504 ns33.1988 ns9,382.281 ns-
LadderSearch1810,340.770 ns43.8161 ns38.8418 ns10,342.586 ns-
LadderSearch1912,483.891 ns168.2591 ns149.1573 ns12,512.567 ns-
LadderSearch11016,032.020 ns260.7283 ns243.8854 ns16,125.450 ns-
LadderSearch11122,969.610 ns457.6890 ns685.0473 ns23,145.818 ns-
LadderSearch11235,639.313 ns702.3914 ns937.6724 ns36,013.095 ns-
LadderSearch11359,099.267 ns1,120.4559 ns1,290.3187 ns59,373.644 ns-
BinarySearch0126.249 ns0.5312 ns0.7091 ns26.251 ns-
BinarySearch0247.070 ns0.0597 ns0.0558 ns47.074 ns-
BinarySearch0392.435 ns0.1865 ns0.1456 ns92.411 ns-
BinarySearch04194.061 ns0.6473 ns0.5738 ns194.182 ns-
BinarySearch05404.295 ns1.1678 ns0.9752 ns404.357 ns-
BinarySearch06833.888 ns3.0694 ns2.8712 ns833.412 ns-
BinarySearch071,815.645 ns10.3068 ns9.6409 ns1,816.818 ns-
BinarySearch083,696.759 ns7.6348 ns7.1416 ns3,697.391 ns-
BinarySearch097,261.100 ns31.0396 ns25.9195 ns7,255.448 ns-
BinarySearch01014,941.778 ns52.0900 ns46.1764 ns14,944.106 ns-
BinarySearch011108,945.076 ns2,115.2841 ns2,263.3303 ns109,389.714 ns-
BinarySearch012310,904.404 ns1,749.9439 ns1,551.2797 ns311,377.316 ns-
BinarySearch013736,010.604 ns3,936.4639 ns3,287.1256 ns735,770.214 ns1 B
BinarySearch1125.992 ns0.5470 ns0.7845 ns25.743 ns-
BinarySearch1248.448 ns0.4051 ns0.3790 ns48.403 ns-
BinarySearch1396.320 ns0.6682 ns0.6251 ns96.267 ns-
BinarySearch14204.415 ns0.3054 ns0.2707 ns204.389 ns-
BinarySearch15399.565 ns0.8670 ns0.8110 ns399.747 ns-
BinarySearch161,013.348 ns5.5267 ns5.1697 ns1,012.705 ns-
BinarySearch171,974.013 ns9.0339 ns8.0083 ns1,972.633 ns-
BinarySearch184,043.035 ns9.3130 ns8.2557 ns4,041.964 ns-
BinarySearch197,670.319 ns19.3475 ns16.1560 ns7,663.952 ns-
BinarySearch11015,823.482 ns182.8071 ns170.9979 ns15,855.284 ns-
BinarySearch11132,679.370 ns218.4291 ns193.6317 ns32,696.153 ns-
BinarySearch112180,156.946 ns1,130.6078 ns1,002.2544 ns180,208.268 ns-
BinarySearch113450,914.914 ns1,594.1643 ns1,413.1852 ns451,153.340 ns-
ExponentialSearch019.478 ns0.0289 ns0.0241 ns9.483 ns-
ExponentialSearch0211.398 ns0.0166 ns0.0147 ns11.402 ns-
ExponentialSearch0317.952 ns0.1038 ns0.0811 ns17.924 ns-
ExponentialSearch0429.138 ns0.0746 ns0.0661 ns29.148 ns-
ExponentialSearch0553.405 ns0.5534 ns0.4905 ns53.348 ns-
ExponentialSearch06718.933 ns16.2197 ns47.8242 ns724.369 ns-
ExponentialSearch071,498.035 ns33.8527 ns99.8155 ns1,529.641 ns-
ExponentialSearch082,905.603 ns86.6401 ns255.4603 ns2,923.974 ns-
ExponentialSearch096,009.610 ns118.4055 ns281.4031 ns6,080.731 ns-
ExponentialSearch01011,079.900 ns220.3434 ns397.3246 ns11,213.416 ns-
ExponentialSearch01121,808.645 ns435.6684 ns691.0162 ns21,877.266 ns-
ExponentialSearch01245,182.802 ns886.3359 ns1,431.2673 ns45,256.089 ns-
ExponentialSearch01392,178.113 ns1,618.8458 ns1,351.8095 ns91,700.340 ns-
ExponentialSearch119.784 ns0.0417 ns0.0370 ns9.785 ns-
ExponentialSearch1211.943 ns0.0345 ns0.0323 ns11.925 ns-
ExponentialSearch1318.501 ns0.1012 ns0.0845 ns18.474 ns-
ExponentialSearch1430.149 ns0.0796 ns0.0745 ns30.175 ns-
ExponentialSearch1553.555 ns1.0841 ns2.1144 ns52.748 ns-
ExponentialSearch16787.410 ns15.7835 ns35.9470 ns794.131 ns-
ExponentialSearch171,391.648 ns27.7470 ns62.0602 ns1,399.175 ns-
ExponentialSearch183,242.236 ns64.7799 ns115.1462 ns3,271.486 ns-
ExponentialSearch196,302.425 ns126.0188 ns248.7488 ns6,331.926 ns-
ExponentialSearch11012,459.095 ns245.4635 ns416.8156 ns12,531.328 ns-
ExponentialSearch11125,329.182 ns401.3728 ns375.4443 ns25,356.859 ns-
ExponentialSearch11249,895.819 ns994.5625 ns2,476.8058 ns50,302.644 ns-
ExponentialSearch11390,448.470 ns1,744.9978 ns1,791.9843 ns90,968.673 ns-

Результаты в виде графиков

График при первом заполненииЛогарифмический график при первом заполненииГрафик при втором заполненииЛогарифмический график при втором заполненииГрафик экспоненциального поиска при разных заполненияхСравнения графика экспоненциального поиска при разных заполнениях

Выводы

  1. Бинарный поиск является самым медленным из всех представленных, что сопоставляется с оценкой сложности O(m*log(n)). Несмотря на это, на маленьких данных он показывает лучший результат, чем поиск лестницей. Стоит отметить, что при x < 9 результаты бин. поиска при 1 и 2 заполнении похожи (результаты отличаются < 10%), однако при x >= 10 на 2 заполнении алгоритм выполняется заметно дольше.
  2. Лестничный поиск показал самые стабильные результаты. Его сложность O(n + m). Пусть при малых данных (при x < 10) он оказался самым неэффетивным, медленный (линейный) рост позволил ему оказаться самым быстрым при больших данных. Результаты подтверждаются при обоих вариантах заполнения матрицы, однако важно заметить, что при втором заполнении время выполнения лестничного поиска значительно выросло.
  3. Экспоненциальный поиск оказался самым эффективным при x < 10. Это связано с его сложностью O(M(logN - logM + 1)), однако он уступил лестничному при больших данных. Время выполнения не зависит от типа заполнения.
  4. При x = 10 все алгоритмы демонстрируют примерно одинаковое время исполнения.
  5. В целях максимальной производительности стоит использовать экспоненциальный поиск при x <= 10, а при x > 10 - лестничный.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Лабораторная работа №1 по алгоритмам и структурам данных

Вводные

  • Матрица размером N = 2 ^ 13, M = 2 ^ X, X = 1..13
  • 2 типа заполнения матрицы ("FillType")
    • 0 - A[i][j] = (N / M * i + j) * 2, target = 2 * N + 1
    • 1 - A[i][j] = (N / M * i * j) * 2, target = 16 * N + 1
  • Выполнены 3 типа поиска
    • Лестничный ("LadderSearch")
    • Бинарный ("BinarySearch")
    • Экспоненциальный ("ExponentialSearch")

Окружение бенчмарка

BenchmarkDotNet v0.13.10, Arch Linux
AMD Ryzen 9 5980HX with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK 8.0.100-rc.2.23502.2
[Host] : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2
DefaultJob : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2

Результаты бенчмарка в виде таблицы

MethodFillTypeXMeanErrorStdDevMedianAllocated
LadderSearch014,276.144 ns79.6007 ns74.4586 ns4,279.363 ns-
LadderSearch026,568.505 ns36.6728 ns32.5095 ns6,560.073 ns-
LadderSearch037,493.771 ns114.8606 ns101.8210 ns7,472.445 ns-
LadderSearch048,201.763 ns44.1196 ns36.8419 ns8,199.045 ns-
LadderSearch058,276.689 ns25.3735 ns22.4929 ns8,268.411 ns-
LadderSearch069,018.737 ns33.4170 ns31.2583 ns9,014.769 ns-
LadderSearch079,550.450 ns49.2616 ns43.6691 ns9,553.458 ns-
LadderSearch088,688.111 ns27.3351 ns24.2318 ns8,686.822 ns-
LadderSearch099,719.340 ns23.0773 ns21.5865 ns9,717.460 ns-
LadderSearch01010,623.873 ns202.3660 ns207.8149 ns10,499.273 ns-
LadderSearch01116,921.323 ns112.1431 ns93.6445 ns16,944.971 ns-
LadderSearch01224,770.726 ns183.8242 ns143.5178 ns24,751.239 ns-
LadderSearch01344,688.950 ns892.8737 ns835.1946 ns44,256.337 ns-
LadderSearch118,435.526 ns48.2965 ns42.8136 ns8,432.161 ns-
LadderSearch128,390.068 ns30.5839 ns25.5389 ns8,389.270 ns-
LadderSearch138,727.407 ns35.0494 ns31.0704 ns8,726.476 ns-
LadderSearch148,962.839 ns37.3573 ns34.9440 ns8,965.929 ns-
LadderSearch158,480.261 ns35.6809 ns33.3759 ns8,485.645 ns-
LadderSearch169,079.187 ns14.9865 ns13.2851 ns9,074.077 ns-
LadderSearch179,375.424 ns37.4504 ns33.1988 ns9,382.281 ns-
LadderSearch1810,340.770 ns43.8161 ns38.8418 ns10,342.586 ns-
LadderSearch1912,483.891 ns168.2591 ns149.1573 ns12,512.567 ns-
LadderSearch11016,032.020 ns260.7283 ns243.8854 ns16,125.450 ns-
LadderSearch11122,969.610 ns457.6890 ns685.0473 ns23,145.818 ns-
LadderSearch11235,639.313 ns702.3914 ns937.6724 ns36,013.095 ns-
LadderSearch11359,099.267 ns1,120.4559 ns1,290.3187 ns59,373.644 ns-
BinarySearch0126.249 ns0.5312 ns0.7091 ns26.251 ns-
BinarySearch0247.070 ns0.0597 ns0.0558 ns47.074 ns-
BinarySearch0392.435 ns0.1865 ns0.1456 ns92.411 ns-
BinarySearch04194.061 ns0.6473 ns0.5738 ns194.182 ns-
BinarySearch05404.295 ns1.1678 ns0.9752 ns404.357 ns-
BinarySearch06833.888 ns3.0694 ns2.8712 ns833.412 ns-
BinarySearch071,815.645 ns10.3068 ns9.6409 ns1,816.818 ns-
BinarySearch083,696.759 ns7.6348 ns7.1416 ns3,697.391 ns-
BinarySearch097,261.100 ns31.0396 ns25.9195 ns7,255.448 ns-
BinarySearch01014,941.778 ns52.0900 ns46.1764 ns14,944.106 ns-
BinarySearch011108,945.076 ns2,115.2841 ns2,263.3303 ns109,389.714 ns-
BinarySearch012310,904.404 ns1,749.9439 ns1,551.2797 ns311,377.316 ns-
BinarySearch013736,010.604 ns3,936.4639 ns3,287.1256 ns735,770.214 ns1 B
BinarySearch1125.992 ns0.5470 ns0.7845 ns25.743 ns-
BinarySearch1248.448 ns0.4051 ns0.3790 ns48.403 ns-
BinarySearch1396.320 ns0.6682 ns0.6251 ns96.267 ns-
BinarySearch14204.415 ns0.3054 ns0.2707 ns204.389 ns-
BinarySearch15399.565 ns0.8670 ns0.8110 ns399.747 ns-
BinarySearch161,013.348 ns5.5267 ns5.1697 ns1,012.705 ns-
BinarySearch171,974.013 ns9.0339 ns8.0083 ns1,972.633 ns-
BinarySearch184,043.035 ns9.3130 ns8.2557 ns4,041.964 ns-
BinarySearch197,670.319 ns19.3475 ns16.1560 ns7,663.952 ns-
BinarySearch11015,823.482 ns182.8071 ns170.9979 ns15,855.284 ns-
BinarySearch11132,679.370 ns218.4291 ns193.6317 ns32,696.153 ns-
BinarySearch112180,156.946 ns1,130.6078 ns1,002.2544 ns180,208.268 ns-
BinarySearch113450,914.914 ns1,594.1643 ns1,413.1852 ns451,153.340 ns-
ExponentialSearch019.478 ns0.0289 ns0.0241 ns9.483 ns-
ExponentialSearch0211.398 ns0.0166 ns0.0147 ns11.402 ns-
ExponentialSearch0317.952 ns0.1038 ns0.0811 ns17.924 ns-
ExponentialSearch0429.138 ns0.0746 ns0.0661 ns29.148 ns-
ExponentialSearch0553.405 ns0.5534 ns0.4905 ns53.348 ns-
ExponentialSearch06718.933 ns16.2197 ns47.8242 ns724.369 ns-
ExponentialSearch071,498.035 ns33.8527 ns99.8155 ns1,529.641 ns-
ExponentialSearch082,905.603 ns86.6401 ns255.4603 ns2,923.974 ns-
ExponentialSearch096,009.610 ns118.4055 ns281.4031 ns6,080.731 ns-
ExponentialSearch01011,079.900 ns220.3434 ns397.3246 ns11,213.416 ns-
ExponentialSearch01121,808.645 ns435.6684 ns691.0162 ns21,877.266 ns-
ExponentialSearch01245,182.802 ns886.3359 ns1,431.2673 ns45,256.089 ns-
ExponentialSearch01392,178.113 ns1,618.8458 ns1,351.8095 ns91,700.340 ns-
ExponentialSearch119.784 ns0.0417 ns0.0370 ns9.785 ns-
ExponentialSearch1211.943 ns0.0345 ns0.0323 ns11.925 ns-
ExponentialSearch1318.501 ns0.1012 ns0.0845 ns18.474 ns-
ExponentialSearch1430.149 ns0.0796 ns0.0745 ns30.175 ns-
ExponentialSearch1553.555 ns1.0841 ns2.1144 ns52.748 ns-
ExponentialSearch16787.410 ns15.7835 ns35.9470 ns794.131 ns-
ExponentialSearch171,391.648 ns27.7470 ns62.0602 ns1,399.175 ns-
ExponentialSearch183,242.236 ns64.7799 ns115.1462 ns3,271.486 ns-
ExponentialSearch196,302.425 ns126.0188 ns248.7488 ns6,331.926 ns-
ExponentialSearch11012,459.095 ns245.4635 ns416.8156 ns12,531.328 ns-
ExponentialSearch11125,329.182 ns401.3728 ns375.4443 ns25,356.859 ns-
ExponentialSearch11249,895.819 ns994.5625 ns2,476.8058 ns50,302.644 ns-
ExponentialSearch11390,448.470 ns1,744.9978 ns1,791.9843 ns90,968.673 ns-

Результаты в виде графиков

График при первом заполненииЛогарифмический график при первом заполненииГрафик при втором заполненииЛогарифмический график при втором заполненииГрафик экспоненциального поиска при разных заполненияхСравнения графика экспоненциального поиска при разных заполнениях

Выводы

  1. Бинарный поиск является самым медленным из всех представленных, что сопоставляется с оценкой сложности O(m*log(n)). Несмотря на это, на маленьких данных он показывает лучший результат, чем поиск лестницей. Стоит отметить, что при x < 9 результаты бин. поиска при 1 и 2 заполнении похожи (результаты отличаются < 10%), однако при x >= 10 на 2 заполнении алгоритм выполняется заметно дольше.
  2. Лестничный поиск показал самые стабильные результаты. Его сложность O(n + m). Пусть при малых данных (при x < 10) он оказался самым неэффетивным, медленный (линейный) рост позволил ему оказаться самым быстрым при больших данных. Результаты подтверждаются при обоих вариантах заполнения матрицы, однако важно заметить, что при втором заполнении время выполнения лестничного поиска значительно выросло.
  3. Экспоненциальный поиск оказался самым эффективным при x < 10. Это связано с его сложностью O(M(logN - logM + 1)), однако он уступил лестничному при больших данных. Время выполнения не зависит от типа заполнения.
  4. При x = 10 все алгоритмы демонстрируют примерно одинаковое время исполнения.
  5. В целях максимальной производительности стоит использовать экспоненциальный поиск при x <= 10, а при x > 10 - лестничный.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Лабораторная работа №1 по алгоритмам и структурам данных

Вводные

  • Матрица размером N = 2 ^ 13, M = 2 ^ X, X = 1..13
  • 2 типа заполнения матрицы ("FillType")
    • 0 - A[i][j] = (N / M * i + j) * 2, target = 2 * N + 1
    • 1 - A[i][j] = (N / M * i * j) * 2, target = 16 * N + 1
  • Выполнены 3 типа поиска
    • Лестничный ("LadderSearch")
    • Бинарный ("BinarySearch")
    • Экспоненциальный ("ExponentialSearch")

Окружение бенчмарка

BenchmarkDotNet v0.13.10, Arch Linux
AMD Ryzen 9 5980HX with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK 8.0.100-rc.2.23502.2
[Host] : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2
DefaultJob : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2

Результаты бенчмарка в виде таблицы

MethodFillTypeXMeanErrorStdDevMedianAllocated
LadderSearch014,276.144 ns79.6007 ns74.4586 ns4,279.363 ns-
LadderSearch026,568.505 ns36.6728 ns32.5095 ns6,560.073 ns-
LadderSearch037,493.771 ns114.8606 ns101.8210 ns7,472.445 ns-
LadderSearch048,201.763 ns44.1196 ns36.8419 ns8,199.045 ns-
LadderSearch058,276.689 ns25.3735 ns22.4929 ns8,268.411 ns-
LadderSearch069,018.737 ns33.4170 ns31.2583 ns9,014.769 ns-
LadderSearch079,550.450 ns49.2616 ns43.6691 ns9,553.458 ns-
LadderSearch088,688.111 ns27.3351 ns24.2318 ns8,686.822 ns-
LadderSearch099,719.340 ns23.0773 ns21.5865 ns9,717.460 ns-
LadderSearch01010,623.873 ns202.3660 ns207.8149 ns10,499.273 ns-
LadderSearch01116,921.323 ns112.1431 ns93.6445 ns16,944.971 ns-
LadderSearch01224,770.726 ns183.8242 ns143.5178 ns24,751.239 ns-
LadderSearch01344,688.950 ns892.8737 ns835.1946 ns44,256.337 ns-
LadderSearch118,435.526 ns48.2965 ns42.8136 ns8,432.161 ns-
LadderSearch128,390.068 ns30.5839 ns25.5389 ns8,389.270 ns-
LadderSearch138,727.407 ns35.0494 ns31.0704 ns8,726.476 ns-
LadderSearch148,962.839 ns37.3573 ns34.9440 ns8,965.929 ns-
LadderSearch158,480.261 ns35.6809 ns33.3759 ns8,485.645 ns-
LadderSearch169,079.187 ns14.9865 ns13.2851 ns9,074.077 ns-
LadderSearch179,375.424 ns37.4504 ns33.1988 ns9,382.281 ns-
LadderSearch1810,340.770 ns43.8161 ns38.8418 ns10,342.586 ns-
LadderSearch1912,483.891 ns168.2591 ns149.1573 ns12,512.567 ns-
LadderSearch11016,032.020 ns260.7283 ns243.8854 ns16,125.450 ns-
LadderSearch11122,969.610 ns457.6890 ns685.0473 ns23,145.818 ns-
LadderSearch11235,639.313 ns702.3914 ns937.6724 ns36,013.095 ns-
LadderSearch11359,099.267 ns1,120.4559 ns1,290.3187 ns59,373.644 ns-
BinarySearch0126.249 ns0.5312 ns0.7091 ns26.251 ns-
BinarySearch0247.070 ns0.0597 ns0.0558 ns47.074 ns-
BinarySearch0392.435 ns0.1865 ns0.1456 ns92.411 ns-
BinarySearch04194.061 ns0.6473 ns0.5738 ns194.182 ns-
BinarySearch05404.295 ns1.1678 ns0.9752 ns404.357 ns-
BinarySearch06833.888 ns3.0694 ns2.8712 ns833.412 ns-
BinarySearch071,815.645 ns10.3068 ns9.6409 ns1,816.818 ns-
BinarySearch083,696.759 ns7.6348 ns7.1416 ns3,697.391 ns-
BinarySearch097,261.100 ns31.0396 ns25.9195 ns7,255.448 ns-
BinarySearch01014,941.778 ns52.0900 ns46.1764 ns14,944.106 ns-
BinarySearch011108,945.076 ns2,115.2841 ns2,263.3303 ns109,389.714 ns-
BinarySearch012310,904.404 ns1,749.9439 ns1,551.2797 ns311,377.316 ns-
BinarySearch013736,010.604 ns3,936.4639 ns3,287.1256 ns735,770.214 ns1 B
BinarySearch1125.992 ns0.5470 ns0.7845 ns25.743 ns-
BinarySearch1248.448 ns0.4051 ns0.3790 ns48.403 ns-
BinarySearch1396.320 ns0.6682 ns0.6251 ns96.267 ns-
BinarySearch14204.415 ns0.3054 ns0.2707 ns204.389 ns-
BinarySearch15399.565 ns0.8670 ns0.8110 ns399.747 ns-
BinarySearch161,013.348 ns5.5267 ns5.1697 ns1,012.705 ns-
BinarySearch171,974.013 ns9.0339 ns8.0083 ns1,972.633 ns-
BinarySearch184,043.035 ns9.3130 ns8.2557 ns4,041.964 ns-
BinarySearch197,670.319 ns19.3475 ns16.1560 ns7,663.952 ns-
BinarySearch11015,823.482 ns182.8071 ns170.9979 ns15,855.284 ns-
BinarySearch11132,679.370 ns218.4291 ns193.6317 ns32,696.153 ns-
BinarySearch112180,156.946 ns1,130.6078 ns1,002.2544 ns180,208.268 ns-
BinarySearch113450,914.914 ns1,594.1643 ns1,413.1852 ns451,153.340 ns-
ExponentialSearch019.478 ns0.0289 ns0.0241 ns9.483 ns-
ExponentialSearch0211.398 ns0.0166 ns0.0147 ns11.402 ns-
ExponentialSearch0317.952 ns0.1038 ns0.0811 ns17.924 ns-
ExponentialSearch0429.138 ns0.0746 ns0.0661 ns29.148 ns-
ExponentialSearch0553.405 ns0.5534 ns0.4905 ns53.348 ns-
ExponentialSearch06718.933 ns16.2197 ns47.8242 ns724.369 ns-
ExponentialSearch071,498.035 ns33.8527 ns99.8155 ns1,529.641 ns-
ExponentialSearch082,905.603 ns86.6401 ns255.4603 ns2,923.974 ns-
ExponentialSearch096,009.610 ns118.4055 ns281.4031 ns6,080.731 ns-
ExponentialSearch01011,079.900 ns220.3434 ns397.3246 ns11,213.416 ns-
ExponentialSearch01121,808.645 ns435.6684 ns691.0162 ns21,877.266 ns-
ExponentialSearch01245,182.802 ns886.3359 ns1,431.2673 ns45,256.089 ns-
ExponentialSearch01392,178.113 ns1,618.8458 ns1,351.8095 ns91,700.340 ns-
ExponentialSearch119.784 ns0.0417 ns0.0370 ns9.785 ns-
ExponentialSearch1211.943 ns0.0345 ns0.0323 ns11.925 ns-
ExponentialSearch1318.501 ns0.1012 ns0.0845 ns18.474 ns-
ExponentialSearch1430.149 ns0.0796 ns0.0745 ns30.175 ns-
ExponentialSearch1553.555 ns1.0841 ns2.1144 ns52.748 ns-
ExponentialSearch16787.410 ns15.7835 ns35.9470 ns794.131 ns-
ExponentialSearch171,391.648 ns27.7470 ns62.0602 ns1,399.175 ns-
ExponentialSearch183,242.236 ns64.7799 ns115.1462 ns3,271.486 ns-
ExponentialSearch196,302.425 ns126.0188 ns248.7488 ns6,331.926 ns-
ExponentialSearch11012,459.095 ns245.4635 ns416.8156 ns12,531.328 ns-
ExponentialSearch11125,329.182 ns401.3728 ns375.4443 ns25,356.859 ns-
ExponentialSearch11249,895.819 ns994.5625 ns2,476.8058 ns50,302.644 ns-
ExponentialSearch11390,448.470 ns1,744.9978 ns1,791.9843 ns90,968.673 ns-

Результаты в виде графиков

График при первом заполненииЛогарифмический график при первом заполненииГрафик при втором заполненииЛогарифмический график при втором заполненииГрафик экспоненциального поиска при разных заполненияхСравнения графика экспоненциального поиска при разных заполнениях

Выводы

  1. Бинарный поиск является самым медленным из всех представленных, что сопоставляется с оценкой сложности O(m*log(n)). Несмотря на это, на маленьких данных он показывает лучший результат, чем поиск лестницей. Стоит отметить, что при x < 9 результаты бин. поиска при 1 и 2 заполнении похожи (результаты отличаются < 10%), однако при x >= 10 на 2 заполнении алгоритм выполняется заметно дольше.
  2. Лестничный поиск показал самые стабильные результаты. Его сложность O(n + m). Пусть при малых данных (при x < 10) он оказался самым неэффетивным, медленный (линейный) рост позволил ему оказаться самым быстрым при больших данных. Результаты подтверждаются при обоих вариантах заполнения матрицы, однако важно заметить, что при втором заполнении время выполнения лестничного поиска значительно выросло.
  3. Экспоненциальный поиск оказался самым эффективным при x < 10. Это связано с его сложностью O(M(logN - logM + 1)), однако он уступил лестничному при больших данных. Время выполнения не зависит от типа заполнения.
  4. При x = 10 все алгоритмы демонстрируют примерно одинаковое время исполнения.
  5. В целях максимальной производительности стоит использовать экспоненциальный поиск при x <= 10, а при x > 10 - лестничный.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Лабораторная работа №1 по алгоритмам и структурам данных

Вводные

  • Матрица размером N = 2 ^ 13, M = 2 ^ X, X = 1..13
  • 2 типа заполнения матрицы ("FillType")
    • 0 - A[i][j] = (N / M * i + j) * 2, target = 2 * N + 1
    • 1 - A[i][j] = (N / M * i * j) * 2, target = 16 * N + 1
  • Выполнены 3 типа поиска
    • Лестничный ("LadderSearch")
    • Бинарный ("BinarySearch")
    • Экспоненциальный ("ExponentialSearch")

Окружение бенчмарка

BenchmarkDotNet v0.13.10, Arch Linux
AMD Ryzen 9 5980HX with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK 8.0.100-rc.2.23502.2
[Host] : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2
DefaultJob : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2

Результаты бенчмарка в виде таблицы

MethodFillTypeXMeanErrorStdDevMedianAllocated
LadderSearch014,276.144 ns79.6007 ns74.4586 ns4,279.363 ns-
LadderSearch026,568.505 ns36.6728 ns32.5095 ns6,560.073 ns-
LadderSearch037,493.771 ns114.8606 ns101.8210 ns7,472.445 ns-
LadderSearch048,201.763 ns44.1196 ns36.8419 ns8,199.045 ns-
LadderSearch058,276.689 ns25.3735 ns22.4929 ns8,268.411 ns-
LadderSearch069,018.737 ns33.4170 ns31.2583 ns9,014.769 ns-
LadderSearch079,550.450 ns49.2616 ns43.6691 ns9,553.458 ns-
LadderSearch088,688.111 ns27.3351 ns24.2318 ns8,686.822 ns-
LadderSearch099,719.340 ns23.0773 ns21.5865 ns9,717.460 ns-
LadderSearch01010,623.873 ns202.3660 ns207.8149 ns10,499.273 ns-
LadderSearch01116,921.323 ns112.1431 ns93.6445 ns16,944.971 ns-
LadderSearch01224,770.726 ns183.8242 ns143.5178 ns24,751.239 ns-
LadderSearch01344,688.950 ns892.8737 ns835.1946 ns44,256.337 ns-
LadderSearch118,435.526 ns48.2965 ns42.8136 ns8,432.161 ns-
LadderSearch128,390.068 ns30.5839 ns25.5389 ns8,389.270 ns-
LadderSearch138,727.407 ns35.0494 ns31.0704 ns8,726.476 ns-
LadderSearch148,962.839 ns37.3573 ns34.9440 ns8,965.929 ns-
LadderSearch158,480.261 ns35.6809 ns33.3759 ns8,485.645 ns-
LadderSearch169,079.187 ns14.9865 ns13.2851 ns9,074.077 ns-
LadderSearch179,375.424 ns37.4504 ns33.1988 ns9,382.281 ns-
LadderSearch1810,340.770 ns43.8161 ns38.8418 ns10,342.586 ns-
LadderSearch1912,483.891 ns168.2591 ns149.1573 ns12,512.567 ns-
LadderSearch11016,032.020 ns260.7283 ns243.8854 ns16,125.450 ns-
LadderSearch11122,969.610 ns457.6890 ns685.0473 ns23,145.818 ns-
LadderSearch11235,639.313 ns702.3914 ns937.6724 ns36,013.095 ns-
LadderSearch11359,099.267 ns1,120.4559 ns1,290.3187 ns59,373.644 ns-
BinarySearch0126.249 ns0.5312 ns0.7091 ns26.251 ns-
BinarySearch0247.070 ns0.0597 ns0.0558 ns47.074 ns-
BinarySearch0392.435 ns0.1865 ns0.1456 ns92.411 ns-
BinarySearch04194.061 ns0.6473 ns0.5738 ns194.182 ns-
BinarySearch05404.295 ns1.1678 ns0.9752 ns404.357 ns-
BinarySearch06833.888 ns3.0694 ns2.8712 ns833.412 ns-
BinarySearch071,815.645 ns10.3068 ns9.6409 ns1,816.818 ns-
BinarySearch083,696.759 ns7.6348 ns7.1416 ns3,697.391 ns-
BinarySearch097,261.100 ns31.0396 ns25.9195 ns7,255.448 ns-
BinarySearch01014,941.778 ns52.0900 ns46.1764 ns14,944.106 ns-
BinarySearch011108,945.076 ns2,115.2841 ns2,263.3303 ns109,389.714 ns-
BinarySearch012310,904.404 ns1,749.9439 ns1,551.2797 ns311,377.316 ns-
BinarySearch013736,010.604 ns3,936.4639 ns3,287.1256 ns735,770.214 ns1 B
BinarySearch1125.992 ns0.5470 ns0.7845 ns25.743 ns-
BinarySearch1248.448 ns0.4051 ns0.3790 ns48.403 ns-
BinarySearch1396.320 ns0.6682 ns0.6251 ns96.267 ns-
BinarySearch14204.415 ns0.3054 ns0.2707 ns204.389 ns-
BinarySearch15399.565 ns0.8670 ns0.8110 ns399.747 ns-
BinarySearch161,013.348 ns5.5267 ns5.1697 ns1,012.705 ns-
BinarySearch171,974.013 ns9.0339 ns8.0083 ns1,972.633 ns-
BinarySearch184,043.035 ns9.3130 ns8.2557 ns4,041.964 ns-
BinarySearch197,670.319 ns19.3475 ns16.1560 ns7,663.952 ns-
BinarySearch11015,823.482 ns182.8071 ns170.9979 ns15,855.284 ns-
BinarySearch11132,679.370 ns218.4291 ns193.6317 ns32,696.153 ns-
BinarySearch112180,156.946 ns1,130.6078 ns1,002.2544 ns180,208.268 ns-
BinarySearch113450,914.914 ns1,594.1643 ns1,413.1852 ns451,153.340 ns-
ExponentialSearch019.478 ns0.0289 ns0.0241 ns9.483 ns-
ExponentialSearch0211.398 ns0.0166 ns0.0147 ns11.402 ns-
ExponentialSearch0317.952 ns0.1038 ns0.0811 ns17.924 ns-
ExponentialSearch0429.138 ns0.0746 ns0.0661 ns29.148 ns-
ExponentialSearch0553.405 ns0.5534 ns0.4905 ns53.348 ns-
ExponentialSearch06718.933 ns16.2197 ns47.8242 ns724.369 ns-
ExponentialSearch071,498.035 ns33.8527 ns99.8155 ns1,529.641 ns-
ExponentialSearch082,905.603 ns86.6401 ns255.4603 ns2,923.974 ns-
ExponentialSearch096,009.610 ns118.4055 ns281.4031 ns6,080.731 ns-
ExponentialSearch01011,079.900 ns220.3434 ns397.3246 ns11,213.416 ns-
ExponentialSearch01121,808.645 ns435.6684 ns691.0162 ns21,877.266 ns-
ExponentialSearch01245,182.802 ns886.3359 ns1,431.2673 ns45,256.089 ns-
ExponentialSearch01392,178.113 ns1,618.8458 ns1,351.8095 ns91,700.340 ns-
ExponentialSearch119.784 ns0.0417 ns0.0370 ns9.785 ns-
ExponentialSearch1211.943 ns0.0345 ns0.0323 ns11.925 ns-
ExponentialSearch1318.501 ns0.1012 ns0.0845 ns18.474 ns-
ExponentialSearch1430.149 ns0.0796 ns0.0745 ns30.175 ns-
ExponentialSearch1553.555 ns1.0841 ns2.1144 ns52.748 ns-
ExponentialSearch16787.410 ns15.7835 ns35.9470 ns794.131 ns-
ExponentialSearch171,391.648 ns27.7470 ns62.0602 ns1,399.175 ns-
ExponentialSearch183,242.236 ns64.7799 ns115.1462 ns3,271.486 ns-
ExponentialSearch196,302.425 ns126.0188 ns248.7488 ns6,331.926 ns-
ExponentialSearch11012,459.095 ns245.4635 ns416.8156 ns12,531.328 ns-
ExponentialSearch11125,329.182 ns401.3728 ns375.4443 ns25,356.859 ns-
ExponentialSearch11249,895.819 ns994.5625 ns2,476.8058 ns50,302.644 ns-
ExponentialSearch11390,448.470 ns1,744.9978 ns1,791.9843 ns90,968.673 ns-

Результаты в виде графиков

График при первом заполненииЛогарифмический график при первом заполненииГрафик при втором заполненииЛогарифмический график при втором заполненииГрафик экспоненциального поиска при разных заполненияхСравнения графика экспоненциального поиска при разных заполнениях

Выводы

  1. Бинарный поиск является самым медленным из всех представленных, что сопоставляется с оценкой сложности O(m*log(n)). Несмотря на это, на маленьких данных он показывает лучший результат, чем поиск лестницей. Стоит отметить, что при x < 9 результаты бин. поиска при 1 и 2 заполнении похожи (результаты отличаются < 10%), однако при x >= 10 на 2 заполнении алгоритм выполняется заметно дольше.
  2. Лестничный поиск показал самые стабильные результаты. Его сложность O(n + m). Пусть при малых данных (при x < 10) он оказался самым неэффетивным, медленный (линейный) рост позволил ему оказаться самым быстрым при больших данных. Результаты подтверждаются при обоих вариантах заполнения матрицы, однако важно заметить, что при втором заполнении время выполнения лестничного поиска значительно выросло.
  3. Экспоненциальный поиск оказался самым эффективным при x < 10. Это связано с его сложностью O(M(logN - logM + 1)), однако он уступил лестничному при больших данных. Время выполнения не зависит от типа заполнения.
  4. При x = 10 все алгоритмы демонстрируют примерно одинаковое время исполнения.
  5. В целях максимальной производительности стоит использовать экспоненциальный поиск при x <= 10, а при x > 10 - лестничный.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Лабораторная работа №1 по алгоритмам и структурам данных

Вводные

  • Матрица размером N = 2 ^ 13, M = 2 ^ X, X = 1..13
  • 2 типа заполнения матрицы ("FillType")
    • 0 - A[i][j] = (N / M * i + j) * 2, target = 2 * N + 1
    • 1 - A[i][j] = (N / M * i * j) * 2, target = 16 * N + 1
  • Выполнены 3 типа поиска
    • Лестничный ("LadderSearch")
    • Бинарный ("BinarySearch")
    • Экспоненциальный ("ExponentialSearch")

Окружение бенчмарка

BenchmarkDotNet v0.13.10, Arch Linux
AMD Ryzen 9 5980HX with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK 8.0.100-rc.2.23502.2
[Host] : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2
DefaultJob : .NET 8.0.0 (8.0.23.47906), X64 RyuJIT AVX2

Результаты бенчмарка в виде таблицы

MethodFillTypeXMeanErrorStdDevMedianAllocated
LadderSearch014,276.144 ns79.6007 ns74.4586 ns4,279.363 ns-
LadderSearch026,568.505 ns36.6728 ns32.5095 ns6,560.073 ns-
LadderSearch037,493.771 ns114.8606 ns101.8210 ns7,472.445 ns-
LadderSearch048,201.763 ns44.1196 ns36.8419 ns8,199.045 ns-
LadderSearch058,276.689 ns25.3735 ns22.4929 ns8,268.411 ns-
LadderSearch069,018.737 ns33.4170 ns31.2583 ns9,014.769 ns-
LadderSearch079,550.450 ns49.2616 ns43.6691 ns9,553.458 ns-
LadderSearch088,688.111 ns27.3351 ns24.2318 ns8,686.822 ns-
LadderSearch099,719.340 ns23.0773 ns21.5865 ns9,717.460 ns-
LadderSearch01010,623.873 ns202.3660 ns207.8149 ns10,499.273 ns-
LadderSearch01116,921.323 ns112.1431 ns93.6445 ns16,944.971 ns-
LadderSearch01224,770.726 ns183.8242 ns143.5178 ns24,751.239 ns-
LadderSearch01344,688.950 ns892.8737 ns835.1946 ns44,256.337 ns-
LadderSearch118,435.526 ns48.2965 ns42.8136 ns8,432.161 ns-
LadderSearch128,390.068 ns30.5839 ns25.5389 ns8,389.270 ns-
LadderSearch138,727.407 ns35.0494 ns31.0704 ns8,726.476 ns-
LadderSearch148,962.839 ns37.3573 ns34.9440 ns8,965.929 ns-
LadderSearch158,480.261 ns35.6809 ns33.3759 ns8,485.645 ns-
LadderSearch169,079.187 ns14.9865 ns13.2851 ns9,074.077 ns-
LadderSearch179,375.424 ns37.4504 ns33.1988 ns9,382.281 ns-
LadderSearch1810,340.770 ns43.8161 ns38.8418 ns10,342.586 ns-
LadderSearch1912,483.891 ns168.2591 ns149.1573 ns12,512.567 ns-
LadderSearch11016,032.020 ns260.7283 ns243.8854 ns16,125.450 ns-
LadderSearch11122,969.610 ns457.6890 ns685.0473 ns23,145.818 ns-
LadderSearch11235,639.313 ns702.3914 ns937.6724 ns36,013.095 ns-
LadderSearch11359,099.267 ns1,120.4559 ns1,290.3187 ns59,373.644 ns-
BinarySearch0126.249 ns0.5312 ns0.7091 ns26.251 ns-
BinarySearch0247.070 ns0.0597 ns0.0558 ns47.074 ns-
BinarySearch0392.435 ns0.1865 ns0.1456 ns92.411 ns-
BinarySearch04194.061 ns0.6473 ns0.5738 ns194.182 ns-
BinarySearch05404.295 ns1.1678 ns0.9752 ns404.357 ns-
BinarySearch06833.888 ns3.0694 ns2.8712 ns833.412 ns-
BinarySearch071,815.645 ns10.3068 ns9.6409 ns1,816.818 ns-
BinarySearch083,696.759 ns7.6348 ns7.1416 ns3,697.391 ns-
BinarySearch097,261.100 ns31.0396 ns25.9195 ns7,255.448 ns-
BinarySearch01014,941.778 ns52.0900 ns46.1764 ns14,944.106 ns-
BinarySearch011108,945.076 ns2,115.2841 ns2,263.3303 ns109,389.714 ns-
BinarySearch012310,904.404 ns1,749.9439 ns1,551.2797 ns311,377.316 ns-
BinarySearch013736,010.604 ns3,936.4639 ns3,287.1256 ns735,770.214 ns1 B
BinarySearch1125.992 ns0.5470 ns0.7845 ns25.743 ns-
BinarySearch1248.448 ns0.4051 ns0.3790 ns48.403 ns-
BinarySearch1396.320 ns0.6682 ns0.6251 ns96.267 ns-
BinarySearch14204.415 ns0.3054 ns0.2707 ns204.389 ns-
BinarySearch15399.565 ns0.8670 ns0.8110 ns399.747 ns-
BinarySearch161,013.348 ns5.5267 ns5.1697 ns1,012.705 ns-
BinarySearch171,974.013 ns9.0339 ns8.0083 ns1,972.633 ns-
BinarySearch184,043.035 ns9.3130 ns8.2557 ns4,041.964 ns-
BinarySearch197,670.319 ns19.3475 ns16.1560 ns7,663.952 ns-
BinarySearch11015,823.482 ns182.8071 ns170.9979 ns15,855.284 ns-
BinarySearch11132,679.370 ns218.4291 ns193.6317 ns32,696.153 ns-
BinarySearch112180,156.946 ns1,130.6078 ns1,002.2544 ns180,208.268 ns-
BinarySearch113450,914.914 ns1,594.1643 ns1,413.1852 ns451,153.340 ns-
ExponentialSearch019.478 ns0.0289 ns0.0241 ns9.483 ns-
ExponentialSearch0211.398 ns0.0166 ns0.0147 ns11.402 ns-
ExponentialSearch0317.952 ns0.1038 ns0.0811 ns17.924 ns-
ExponentialSearch0429.138 ns0.0746 ns0.0661 ns29.148 ns-
ExponentialSearch0553.405 ns0.5534 ns0.4905 ns53.348 ns-
ExponentialSearch06718.933 ns16.2197 ns47.8242 ns724.369 ns-
ExponentialSearch071,498.035 ns33.8527 ns99.8155 ns1,529.641 ns-
ExponentialSearch082,905.603 ns86.6401 ns255.4603 ns2,923.974 ns-
ExponentialSearch096,009.610 ns118.4055 ns281.4031 ns6,080.731 ns-
ExponentialSearch01011,079.900 ns220.3434 ns397.3246 ns11,213.416 ns-
ExponentialSearch01121,808.645 ns435.6684 ns691.0162 ns21,877.266 ns-
ExponentialSearch01245,182.802 ns886.3359 ns1,431.2673 ns45,256.089 ns-
ExponentialSearch01392,178.113 ns1,618.8458 ns1,351.8095 ns91,700.340 ns-
ExponentialSearch119.784 ns0.0417 ns0.0370 ns9.785 ns-
ExponentialSearch1211.943 ns0.0345 ns0.0323 ns11.925 ns-
ExponentialSearch1318.501 ns0.1012 ns0.0845 ns18.474 ns-
ExponentialSearch1430.149 ns0.0796 ns0.0745 ns30.175 ns-
ExponentialSearch1553.555 ns1.0841 ns2.1144 ns52.748 ns-
ExponentialSearch16787.410 ns15.7835 ns35.9470 ns794.131 ns-
ExponentialSearch171,391.648 ns27.7470 ns62.0602 ns1,399.175 ns-
ExponentialSearch183,242.236 ns64.7799 ns115.1462 ns3,271.486 ns-
ExponentialSearch196,302.425 ns126.0188 ns248.7488 ns6,331.926 ns-
ExponentialSearch11012,459.095 ns245.4635 ns416.8156 ns12,531.328 ns-
ExponentialSearch11125,329.182 ns401.3728 ns375.4443 ns25,356.859 ns-
ExponentialSearch11249,895.819 ns994.5625 ns2,476.8058 ns50,302.644 ns-
ExponentialSearch11390,448.470 ns1,744.9978 ns1,791.9843 ns90,968.673 ns-

Результаты в виде графиков

График при первом заполненииЛогарифмический график при первом заполненииГрафик при втором заполненииЛогарифмический график при втором заполненииГрафик экспоненциального поиска при разных заполненияхСравнения графика экспоненциального поиска при разных заполнениях

Выводы

  1. Бинарный поиск является самым медленным из всех представленных, что сопоставляется с оценкой сложности O(m*log(n)). Несмотря на это, на маленьких данных он показывает лучший результат, чем поиск лестницей. Стоит отметить, что при x < 9 результаты бин. поиска при 1 и 2 заполнении похожи (результаты отличаются < 10%), однако при x >= 10 на 2 заполнении алгоритм выполняется заметно дольше.
  2. Лестничный поиск показал самые стабильные результаты. Его сложность O(n + m). Пусть при малых данных (при x < 10) он оказался самым неэффетивным, медленный (линейный) рост позволил ему оказаться самым быстрым при больших данных. Результаты подтверждаются при обоих вариантах заполнения матрицы, однако важно заметить, что при втором заполнении время выполнения лестничного поиска значительно выросло.
  3. Экспоненциальный поиск оказался самым эффективным при x < 10. Это связано с его сложностью O(M(logN - logM + 1)), однако он уступил лестничному при больших данных. Время выполнения не зависит от типа заполнения.
  4. При x = 10 все алгоритмы демонстрируют примерно одинаковое время исполнения.
  5. В целях максимальной производительности стоит использовать экспоненциальный поиск при x <= 10, а при x > 10 - лестничный.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages