如何使用HTML CSS和Javascript制作Kadanes算法可视化器

如何使用HTML CSS和Javascript制作Kadanes算法可视化器

在这篇文章中,我们将看到如何使用HTML、CSS和Javascript制作Kadanes算法可视化器。

方法:

Kadanes算法用于计算连续子数组中的最大和。我们基本上会使用相同的算法,并且使用Javascript和CSS来显示可视化效果。当我们遍历数组时,我们将使用青色边框和青色字体颜色来显示,并显示当前和最大和。要了解更多关于Kadanes算法的信息,请参考https://www.geeksforgeeks.org/largest-sum-contiguous-subarray/。

Kadane算法的简单思路是查找数组中所有正连续段,并跟踪所有正连续段中的最大和。每次获得一个正和时,将其与当前最大和进行比较,并且如果大于前一个最大和,则更新最大和。

步骤1: 在这一步中,我们首先使用HTML创建网页的结构。我们创建了一个带有id为header的标题,id内部有一个span元素,以便我们可以将其样式设置为漂亮的发光文本,而标题id不会发光,它看起来好看。我们创建了一个包含数组当前和以及最大和的容器,然后有一个启动按钮,当点击时会显示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: 我们将设置黑色背景,因此我们将每个元素的文本颜色设置为白色,以便显示出来,然后对于span,我们必须让它发光,所以我们设置一个文本阴影,设置HTML背景颜色和字体系列,现在对于body,我们确保一切保持居中并设置flex-direction为center,对于容器,我们也给它一些位置,同样对于容器,我们给它一个字母间距,以使其看起来整洁,我们制作一个瓷砖,并确保每个显示的元素都是使用瓷砖对称我们设置onhover并将颜色更改为青色,然后我们以常规方式为每个元素设置样式。

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创建了一个延迟一段时间后解析的回调函数的promise对象,以便在一段时间后暂停代码执行,目前的时间是1秒。每次我更改数字时,我们都会暂停1秒钟的代码。然后我们将array[i]添加到当前总和中,然后显示当前总和。

JavaScript

function id(id) {
    return document.getElementById(id);
}
var array = [5, 4, 6, -3, 4, -1];
var maxsumcontainer = [];
let curr_sum = 0; let max_sum = 0;
const kadanes = async (array, arrayLength) => {
    console.log("inside");
    for (let i = 0; i < arrayLength; i++) {
        await new Promise((resolve) =>
            setTimeout(() => {
                resolve();
            }, 1000)
        )
        curr_sum = curr_sum + array[i];
        id("currentsum").innerText = `Current Sum : {curr_sum}`
        maxsumcontainer[i] = i;
        id(i).style.color = "cyan";
        // id(i).style.textAlign="center"
        id(i).style.border = "2px solid cyan"
        if (curr_sum>max_sum) {
            max_sum = curr_sum;
            id("answer").innerText = `Maximum Sum :{max_sum}`;
        }
        if (curr_sum < 0) {
            curr_sum = 0
        }
    }
    // id("container").style.textShadow="0 0 10px cyan
    //,0 0 40px cyan, 0 0 80px cyan;"
    id("container").style.color = "red";
    id("container").innerText = "Ended"
    id("answer").innerText = `Maximum Sum : ${max_sum}`;
}
window.onload = () => {
    id("start").addEventListener('click', () => {
        id("start").style.display = "none";
        // id("input").style.display="none"
        console.log(array);
        let idcount = 0;
        for (let i = 0; i < array.length; i++) {
            let tile = document.createElement('span');
            tile.id = idcount;
            tile.classList.add("tile");
            tile.innerText = array[i];
            // tile.style.margin="2px";
            // tile.style.padding="1vmin"
            id("container").appendChild(tile);
            idcount++;
        }
        kadanes(array, array.length);
    })
 
}

输出:

如何使用HTML CSS和Javascript制作Kadanes算法可视化器

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程