Как сделать визуализатор алгоритма Каданеса с помощью HTML CSS и Javascript?
В этой статье мы увидим, как создать визуализатор алгоритма Каданеса с использованием HTML, CSS и Javascript.
Подход:
Алгоритм Каданеса используется для вычисления наибольшей суммы в непрерывном подмассиве. В основном мы будем использовать тот же алгоритм, и мы будем использовать JavaScript и CSS, чтобы показать визуализацию. Когда мы перебираем массив и собираемся показать его с голубым цветом границы и голубым цветом шрифта, мы показываем текущую сумму и максимальную сумму. Чтобы узнать больше об алгоритме kadanes, обратитесь к https://www.geeksforgeeks.org/largest-sum-contiguous-subarray/.
Простая идея алгоритма Кадане состоит в том, чтобы искать все положительные непрерывные сегменты массива. И следите за максимальной суммой смежных сегментов среди всех положительных сегментов. Каждый раз, когда мы получаем положительную сумму, сравниваем ее с максимальной суммой на данный момент и обновляем максимальную сумму, если она больше предыдущей.
Шаг 1: На этом шаге мы сначала создадим структуру веб-страницы с помощью HTML. Мы сделали заголовок с идентификатором заголовка, а внутри идентификатора мы создали элемент span, чтобы мы могли стилизовать его как красивый светящийся текст, и идентификатор заголовка не будет светиться, он будет выглядеть хорошо, мы создали контейнер, который будет иметь текущая сумма массива, а затем максимальная сумма в качестве их дочернего элемента div, затем у нас есть кнопка запуска, которая при нажатии показывает, как работает алгоритм kadanes, теперь давайте поговорим о CSS.
HTML
<!DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-8" > < meta http-equiv = "X-UA-Compatible" content = "IE=edge" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < link href = "https://fonts.googleapis.com/css2?family=Open+Sans:wght@300&display=swap" rel = "stylesheet" /> < script src = "script.js" ></ script > < link rel = "stylesheet" href = "style.css" > < title >Document</ title > </ head > < body > < div class = "header" > < span id = "span" > Kadanes </ span > Algorithm </ div > < div id = "container" ></ div > < div class = "container_2" > < div id = "currentsum" ></ div > < div id = "answer" ></ div > <!-- <input id="input" type="text" placeholder="Enter the Array"> --> <!-- <div id="push">Push</div> --> < div id = "start" >Start</ div > </ div > </ body > </ html > |
Шаг 2: У нас будет черный фон, поэтому мы задаем цвет текста как белый для каждого элемента, чтобы он отображался, а затем для диапазона мы должны заставить его светиться, поэтому мы даем тень текста, мы устанавливаем цвет фона HTML и семейство шрифтов. теперь для тела мы удостоверяемся, что все остается в центре, и устанавливаем flex-direction в качестве центра, а для контейнера также мы придаем ему некоторую позицию. То же самое касается контейнера, мы задаем ему интервал между буквами, чтобы он выглядел аккуратно, мы делаем плитку и убеждаемся каждый отображаемый элемент имеет плитку для симметрии, которую мы устанавливаем при наведении курсора и меняем цвет на голубой, затем мы обычно оформляем каждый элемент.
CSS
* { color : white ; } #span { font-weight : normal ; text-shadow : 0 0 10px cyan, 0 0 40px cyan, 0 0 80px cyan; } html { background-color : black ; font-family : "Open sans" , sans-serif ; } body { display : flex; flex- direction : column; align-items: center ; height : 100 vmin; } .container_ 2 { display : flex; flex- direction : column; } #container { width : 100% ; margin-top : 15% ; display : flex; justify- content : center ; flex- direction : row; font-size : 5 vmin; letter-spacing : 2 vmin; font-weight : normal ; } .tile { /* width: 5vmin; */ height : 5 vmin; margin : 10px ; text-align : center ; height : fit-content; } .onover { color : cyan; } #answer { font-size : 5 vmin; } #start { align-self: center ; background-color : black ; font-size : 3 vmin; box-sizing: border-box; padding : 1 vmin; color : white ; cursor : pointer ; border : none ; margin-top : 2 vmin; transition: 0.5 s ease-in-out; font-weight : bold ; letter-spacing : 4px ; } #start:hover { transform: scale( 1.5 ); text-shadow : 0 0 10px cyan, 0 0 20px cyan, 0 0 40px cyan; } #array { display : flex; font-size : 10 vmin; } #currentsum, #answer { padding : 1 vmin; font-size : 3 vmin; letter-spacing : 2px ; } .header { text-align : center ; padding : 1 vmin; width : 100% ; font-size : 6 vmin; letter-spacing : 2px ; border-bottom : 1px solid white ; } input { margin-top : 2 vmin; } |
Шаг 3: Теперь script.js будет содержать свою основную логику. Мы сделали функцию, которая возвращает id. Мы сделали массив с отрицательными и меньшим количеством элементов, чтобы зритель мог понять, а затем мы создали текущую сумму и максимальную сумму, мы создали текущую сумму функции, мы запустили цикл для нашего массива, мы сделали обещание с settimeout, которое запускает обратный вызов, разрешаемый через некоторое время. время, поэтому он останавливает код на прошедшее время задержки, которое на данный момент составляет 1 секунду, и мы останавливаем код на 1 секунду каждый раз, когда я меняю, а затем мы добавляем массив [i] к текущей сумме, а затем отображаем текущую сумму.
Выход: