像 CLRS(算法简介)中那样用列排版算法的最佳方法是什么

像 CLRS(算法简介)中那样用列排版算法的最佳方法是什么

在 Thomas Cormen 的《算法简介》中,有一些算法带有成本和时间列,用于渐近分析。已经有一个类似的帖子,其中名为 nickie 的成员提供了一种方法,但当我尝试添加 IF 语句时,我遇到了框溢出问题,我想知道是否可以修改“ugly hack”以包含它们。下面是 Nickie 的代码和图像。

\documentclass[11pt]{article}

\usepackage[noend]{algorithmic}

\newcommand{\TITLE}[1]{\item[#1]}

\renewcommand{\algorithmiccomment}[1]{$/\!/$ \parbox[t]{4.5cm}{\raggedright #1}}

% ugly hack for for/while

\newbox\fixbox

\renewcommand{\algorithmicdo}{\setbox\fixbox\hbox{\ {} }\hskip-\wd\fixbox}

% end of hack

\newcommand{\algcost}[2]{\strut\hfill\makebox[1.5cm][l]{#1}\makebox[4cm][l]{#2}}


\begin{document}

\begin{algorithmic}[1]

  \TITLE{\textsc{Insertion-Sort}$(A)$}

    \algcost{\textit{cost}}{\textit{times}}

  \FOR{$j=2$ \TO $A.\mathit{length}$

    \algcost{$c_1$}{$n$}}

  \STATE $\mathit{key} = A[j]$

    \algcost{$c_2$}{$n-1$}

  \STATE \COMMENT{Insert $A[j]$ to the sorted sequence $A[1..j-1]$}

    \algcost{$0$}{$n-1$}

  \STATE $i = j-1$

    \algcost{$c_4$}{$n-1$}

  \WHILE{$i>0$ \AND $A[i]>key$

    \algcost{$c_5$}{$\sum_{j=2}^{n} t_j$}}

  \STATE $A[i+1]= A[i]$

    \algcost{$c_6$}{$\sum_{j=2}^{n} (t_j-1)$}

  \STATE $i = i-1$

    \algcost{$c_7$}{$\sum_{j=2}^{n} (t_j-1)$}

  \ENDWHILE

  \STATE $A[i+1] = \mathit{key}$

    \algcost{$c_8$}{$n-1$}

  \ENDFOR

\end{algorithmic}

    enter code here

\end{document}

在此处输入图片描述

相关内容