4. algorithm

2023-09-21 11:02:15

algorithm书写

1.algorithm

在 LaTeX 中,要显示算法,您可以使用 algorithm 宏包来排版算法,并使用 algorithmic 宏包来编写算法的伪代码。以下是显示算法的基本步骤:

  1. 导入宏包:在 LaTeX 文档的导言区(preamble)中,导入 algorithmalgorithmic 宏包。
\usepackage{algorithm}
\usepackage{algorithmic}
  1. 创建算法环境:使用 \begin{algorithm}\end{algorithm} 来创建算法环境。在 algorithm 环境中,您可以为算法添加标题和标签。
\begin{algorithm}
\caption{算法标题}
\label{alg:myalgorithm}
\begin{algorithmic}
% 算法伪代码
\end{algorithmic}
\end{algorithm}
  1. 编写算法伪代码:在 algorithmic 环境中,使用一组特定的命令来编写算法的伪代码。以下是一些常用的命令:
  • \STATE:用于表示算法的每一步。
  • \FOR\ENDFOR:用于编写循环结构。
  • \IF\ELSIF\ELSE\ENDIF:用于编写条件语句。
  • \WHILE\ENDWHILE:用于编写循环语句。
  • \RETURN:用于表示算法的返回值。
  • \REQUIRE\ENSURE:用于指定算法的输入和输出。

以下是一个示例,演示了如何创建一个简单的算法并在文档中引用它:

\documentclass{article}
\usepackage{algorithm}
\usepackage{algorithmic}

\begin{document}
    
    \begin{algorithm}
        \caption{simple algorithm}
        \label{alg:simple}
        \begin{algorithmic}
    
            \STATE inital $sum$ = 0
            \FOR{$i$ form 1 to $n$}
            \STATE set $i$ add $sum$
            \ENDFOR
            \RETURN $sum$
            
        \end{algorithmic}
    \end{algorithm}
    
    %在算法 \ref{alg:simple} 中,我们计算了从 1 到 $n$ 的所有整数的和。
    
\end{document}

效果显示:

在这里插入图片描述

以上示例中,我们创建了一个名为 “简单算法” 的算法,并使用 \label 命令为它添加了一个标签,以便在文档中引用。通过 \caption 命令,我们添加了算法的标题。在文档正文中,可以使用 \ref{alg:simple} 引用该算法。当编译文档时,算法将以适当的格式呈现在文档中。

2.algorithm2e

algorithm2e 是一个用于排版算法伪代码的强大宏包,它提供了丰富的功能和选项,用于创建和自定义算法的外观和样式。以下是如何使用 algorithm2e 宏包的基本步骤:

  1. 导入宏包:在 LaTeX 文档的导言区(preamble)中导入 algorithm2e 宏包。
\usepackage[linesnumbered,boxed]{algorithm2e}

在上面的示例中,我们导入了 algorithm2e 宏包,并指定了两个选项:linesnumbered 用于为算法的每行添加行号,boxed 用于将算法框起来。

  1. 创建算法环境:使用 \begin{algorithm}\end{algorithm} 来创建算法环境。在其中,您可以编写算法的伪代码。
\begin{algorithm}
\caption{算法标题}
\KwData{输入数据}
\KwResult{输出结果}
% 编写算法伪代码
\end{algorithm}
  1. 编写算法伪代码:在算法环境中,使用 algorithm2e 提供的一组命令来编写算法伪代码。以下是一些常用的命令:
  • \KwData\KwResult:用于指定算法的输入数据和输出结果。
  • \While\EndWhile:用于编写循环结构。
  • \If\ElseIf\Else\EndIf:用于编写条件语句。
  • \For\EndFor:用于编写循环语句。
  • \Return:用于表示算法的返回值。

以下是一个示例,演示了如何使用 algorithm2e 创建一个简单的算法:

\documentclass{article}
\usepackage[ruled,linesnumbered,vlined,boxruled]{algorithm2e}

\begin{document}
    
    \begin{algorithm}
        \caption{example}
        \KwData{int $n$}
        \KwResult{int $sum$}
        $sum \leftarrow 0$\;
        \For{$i \leftarrow 1$ \KwTo $n$}{
            $sum \leftarrow sum + i$\;
        }
        \Return{$sum$}\;
    \end{algorithm}
    
\end{document}

在这里插入图片描述

在上述示例中,我们使用 algorithm2e 创建了一个名为 “简单算法示例” 的算法环境,然后编写了算法伪代码。算法的输入是整数 $n$,输出是整数 $sum$。通过 \caption\KwData\KwResult,我们为算法添加了标题和描述。

以上只是 algorithm2e 宏包的基本用法。您可以根据需要使用更多选项和命令来自定义算法的样式和外观。此宏包的文档提供了更多详细信息,可帮助您深入了解其功能和选项。

自己的实例

\documentclass{article}
\usepackage{amsmath}
\usepackage[ruled,vlined,boxed,linesnumbered]{algorithm2e}

\begin{document}
    
\begin{algorithm}
    \caption{Quality Adaption}
    \label{algo:Quality Adaptive Allocation Algorithm}
    \SetAlgoLined
    $\boldsymbol{Initialize}: Q_n = [1,1,...,1]$, quality min firstly,$Q_{max}=[6,6,...,6]$ , $U_n =[1,2,...,n]$ \;
    
    %Confirmation $q^*$ \;
    \For{$ each ~ n \in U_n$}
    {
        Compute quality improvement ($\hat{f}^R_c(q)$) from $j$ to $j+1$: $\hat{f}^R_c(q)[n] = f^R_c(q_j + 1) - f^R_c(q_j)$ \;
        Compute $QoE$ increment: $\hat{v}_{n,j} = h_n(q_j + 1) - h_n(q_j)$, where $h_n$ computed by Eq. (\ref{hn}), $d_n$ and $c_n$ are parameters of Eq. (\ref{hn}), among them  $d_n = T_t$, $c_n = T_d$\;
        Compute the density:
        : $\eta_{n,j} =\frac{\hat{v}_{n,j}}{\hat{f}^R_c(q)} $ \;
        Obtain the max density $ D^* = \arg max(\eta_n) $\;
        %Obtain quality $q_{t}$ under $D^*$\;
        Calculate bandwidth $\boldsymbol{B_w[n]}$ in terms of $q_{t}$ \;
        Calculate total bandwidth usage $\boldsymbol{B_t}$ \;
        \eIf{$(f^R_c(q_n)>\boldsymbol{B_w}[n])\parallel(\sum_{1}^{n}f^R_c(q_n)>\boldsymbol{B_t})$}
        {
            $q_{t} = q_{t} - 1 $
        }
        {
            $q_{t} = q_{t} + 1 $
        }
        
        
        \If{$ (D^* < 0)  \parallel (q_{t} == Q_{max}) $}
        {
            $q^*[n] = q_{t}$
        }
    }
    $Q_n[n] = q^*[n]$
    
\end{algorithm}

    
\end{document}

效果显示

在这里插入图片描述

更多推荐

单元测试(JUint)

单元测试概述单元测试就是方法测试。Junit单元测试框架JUnit是使用Java语言实现的单元测试框架,它是开源的,Java开发者都应当学习并使用JUnit编写单元测试。此外,几乎所有的IDE工具都集成了JUnit,这样我们就可以直接在IDE中编写并运行JUnit测试,JUnit目前最新版本是5。JUnit优点JUni

设计模式:原型模式

目录代码实现总结原型模式(PrototypePattern)是一种创建型设计模式,它通过复制现有对象来创建新对象,而无需通过实例化类来创建。原型模式允许我们通过复制现有对象的属性和方法来创建新的对象,从而避免了直接创建对象的开销。在原型模式中,有以下几个主要角色:原型(Prototype):定义了复制自身的方法。具体原

如何将 OBJ 模型转换和压缩为 GLTF 以与 AWS IoT TwinMaker 配合使用

推荐:使用NSDT场景编辑器快速搭建3D应用场景概述在这篇博文中,引用了几种文件扩展名和模型格式。在开始之前,最好了解以下内容:OBJ–对象文件,一种标准的3D图像格式,可以通过各种3D图像编辑程序导出和打开。MTL–材料库文件,包含一个或多个材料定义,每个定义都包括OBJ模型中对象的各个材料的颜色、纹理和反射图glT

git安装配置教程

目录git安装配置1.安装git2.git配置3.生成sshkey:4.获取生产的密钥3.gitee或者github添加ssh-key4.git使用5.git使用-本地仓库与远程仓库建立连接第一步:进入项目文件夹,初始化本地仓库第二步:建立远程仓库。建立远程连接的小技巧git安装配置1.安装gitwindows:win

【CSS3】CSS3 2D 转换 - rotate 旋转 ③ ( 使用 transfrom-origin 设置旋转中心点 | 使用 方位词 / 百分比值 / 像素值 设置旋转中心点 )

文章目录一、使用transfrom-origin设置旋转中心点二、代码示例-使用transfrom-origin设置旋转中心点1、代码示例-使用方位词设置旋转中心点2、代码示例-使用百分比设置旋转中心点3、代码示例-使用像素值设置旋转中心点一、使用transfrom-origin设置旋转中心点为div盒子模型设置tra

事件循环(也叫事件环,也叫event loop)--任务队列(等待执行的任务)--渲染三者的关系

关键词:阻塞,主线程,事件环(eventloop)、任务环(任务队列)、单线程、本视频总结:超级复杂的JS底层。事件循环和事件队列的关系。宏任务、微任务和raf回调这3个事件队列的关系。任务队列和执行栈的关系。dom点击事件和js调用函数对执行栈的不同影响。事件循环和dom渲染之家raf回调函数的执行。附带要理解函数调

leetcode做题笔记138. 复制带随机指针的链表

给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。深拷贝应该正好由n个全新节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的next指针和random指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示

国产CPU发展情况及信创服务器性能测试对比

国产信创服务器是近些年信创突破的重点,面对技术封锁和卡脖子限制,如何实现真正的芯片自主可控也是业界发力的方向。近期华为鲲鹏9000s系列芯片的发布让大家眼前一亮,似乎面对芯片的技术封锁打了一场漂亮的翻身仗。那么在服务器市场国产CPU发展如何,主流的信创服务器有哪些产品,性能表现如何,本文将简单介绍,并结合信创服务器的性

「语音芯片」常见的OTP芯片故障分析

OTP语音芯片是指一次性可编程语音芯片,语音只能烧写一次,适合应用在不需要修改语音、语音长度短的场合,从放音的长度上可以分为20秒、40秒、80秒、170秒、340秒。语音芯片的特点是单芯片方案、价格便宜,适合批量生产,即便是小数量生产也可以及时拿货,主要应用在玩具、电子琴、电动车、报警器、智能锁、按摩仪等产品上,常见

开源与隐私:一个复杂的关系

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

Linux——vi编辑器

目录一、基本简介二、命令模式下的常用按键1、光标跳转按键2、复制、粘贴、删除三、编辑模式四、末行模式1、查找关键字并替换2、保存退出3、其他操作五、模式切换一、基本简介1、最早可追随到1991年,全称为“ViIMproved”2、模式——命令模式——末行模式——编辑模式3、使用vi/vim命令编辑文件——在每次运行vi

热文推荐