Как сделать визуализатор алгоритма Каданеса с помощью HTML CSS и Javascript?

Опубликовано: 24 Декабря, 2022

В этой статье мы увидим, как создать визуализатор алгоритма Каданеса с использованием 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=
          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: 100vmin;
}
 
.container_2 {
    display: flex;
    flex-direction: column;
}
 
#container {
    width: 100%;
    margin-top: 15%;
    display: flex;
    justify-content: center;
    flex-direction: row;
    font-size: 5vmin;
    letter-spacing: 2vmin;
    font-weight: normal;
}
 
.tile {
    /* width: 5vmin; */
    height: 5vmin;
    margin: 10px;
    text-align: center;
    height: fit-content;
}
 
.onover {
    color: cyan;
}
 
#answer {
    font-size: 5vmin;
}
 
#start {
    align-self: center;
    background-color: black;
    font-size: 3vmin;
    box-sizing: border-box;
    padding: 1vmin;
    color: white;
    cursor: pointer;
    border: none;
    margin-top: 2vmin;
    transition: 0.5s 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: 10vmin;
}
 
#currentsum,
#answer {
    padding: 1vmin;
    font-size: 3vmin;
    letter-spacing: 2px;
}
 
.header {
    text-align: center;
    padding: 1vmin;
    width: 100%;
    font-size: 6vmin;
    letter-spacing: 2px;
    border-bottom: 1px solid white;
}
 
input {
    margin-top: 2vmin;
}

Шаг 3: Теперь script.js будет содержать свою основную логику. Мы сделали функцию, которая возвращает id. Мы сделали массив с отрицательными и меньшим количеством элементов, чтобы зритель мог понять, а затем мы создали текущую сумму и максимальную сумму, мы создали текущую сумму функции, мы запустили цикл для нашего массива, мы сделали обещание с settimeout, которое запускает обратный вызов, разрешаемый через некоторое время. время, поэтому он останавливает код на прошедшее время задержки, которое на данный момент составляет 1 секунду, и мы останавливаем код на 1 секунду каждый раз, когда я меняю, а затем мы добавляем массив [i] к текущей сумме, а затем отображаем текущую сумму.

Выход: