跳到主要内容

算法策略

 

内容事项

贡献应以算法、比较、认证、备注或翻译的形式进行。

算法

出版ACM算法是为了让尽可能广泛的受众能够获得软件研究的成果。算法必须提供不可用的功能或执行任务更好的在某种程度上比以前做过的。更好意味着从提高可靠性或效率到更有效的包装。在所有情况下,算法必须具有持久的价值,并且必须在创建算法所需的工作量或独创性方面做出重大贡献。如果声称新算法是对当前可用代码的改进,则必须在提交文件中包含支持证据的代码。效率主张需要在广泛的实际问题上得到支持。

提交的算法可能由一篇或两篇论文组成。总有一个算法论文它描述了代码。(可选)第二次(配套文件)它更详细地描述了底层算法,也可以提交给ACM TOMS审查,或者在特殊情况下,提交给另一个ACM事务(参见提交手续部分更多详细信息)。在这种情况下,这两篇论文将同时发表。算法文件应简要描述软件的功能以及有关使用和维护的相关信息。它不应在另一篇论文或算法源中重复信息;它也不应该包含更常见于用户手册中的信息。

ACM算法必须是完整的、可移植的、有良好文档记录的和结构良好的。这些术语的含义如下所述。

完整性

提交内容包括有效使用和测试算法实现所需的所有代码和测试数据,供大部分目标受众使用。

提交文件的软件部分应包括

算法实现:
在绝大多数情况下,它由一个或多个文件组成,这些文件构成算法的独立实现以及所使用的任何预处理器。通常,用户应该可以将此软件合并到更大的程序中。唯一的例外是显式独立软件,例如源代码转换器。特别是,为方便输入数据和显示结果而提供的任何图形用户界面都应视为属于试验材料提交文件的一部分。
 
第三方支持代码:
它包括由算法代码或通过测试代码并且不是作者写的。预计所有此类支持代码都将公开;如果可以从既定来源以象征性费用获得代码,则可以使用受更多限制的代码公共领域中没有几乎等效的代码。
 
文档:
(另请参见下面的文档部分.)作者需要提交机器可读的文档,提供有关包及其使用的详细信息。特别需要注意的是,用户提供的参数、示例程序、相关数据和结果等的详细描述应出现在随附的文件中。
 
驱动程序示例:
这应该包括一个简短的测试驱动程序,并且应该说明如何使用该算法来解决一个简单的测试问题。提交的这一部分应包括驾驶员要求的任何测试数据以及一组模型结果。

注:测试驱动程序不得要求以交互方式输入任何数据。
 
测试材料:
这应该包括一个或多个驱动程序以及包含所需数据和预期结果的任何相关文件。这些方案应体现实施的所有主要特点。
 
命令文件:
该文件应详细说明如何组装各种包组件以执行示例驱动程序和所有测试材料。这应该采用Unix样式的形式生成文件或a.bat(.bat)参数化了对外部所需数据(例如,编译器名称、编译器标志等)的所有引用的文件。在特殊情况下,可以使用一组详细的文本说明。
 

上述所有材料均需经过审查,并将作为材料发布在ACM的集合算法(卡尔戈)。

便携性

必须能够以机器可读的形式将代码从一个平台/编译器/解释器移动到另一个平台,最坏的情况是,只需要非常小的、有良好文档记录的更改。

作为可移植性的初步证据,作者可以

  1. 包括证明包在三种不同的平台/编译器/解释器组合上成功执行的证据,其中至少两种运行应该在不同的硬件上进行;和/或
  2. 包括已检查软件可移植性和/或符合适当的标准这可以采取特殊的验证器工具的形式,也可以使用设置了适当标准检查标志的编译器(例如,使用Gnu C编译器的-ansi,gcc)。

在任何情况下,所有提交的代码都应遵守最新的适当语言标准(如果有)。特别地:

  • Fortran:ISO/IEC 1539-1:2018[1]
  • C:ISO/IEC 9899:2018[2]
  • C++:ISO/IEC 14882:2020[3]

计算机相关性

机器相关常数

在可能的情况下,应使用标准一致性查询函数获取软件所需的任何机器相关常数(例如机器ε、最大正实数等)的值。如果特定语言中没有常数,则通常应使用标准名称和定义[5].

不可用作内置查询功能的常量应收集在一起,并通过注释明确标识。鼓励作者将这些常量收集到单独的函数中,以简化标识和更改。

机器相关代码

可以使用与机器相关的例程,前提是

  1. 它们有明确的规定,功能有限,与同等的便携式程序相比,是必要的或实质性的改进。

  2. 如果可能,还应提交便携式版本,以便于安装和测试,并确认读者对规范的理解。如果未提供便携式版本,则必须提供至少三台不同计算机的测试版本。

  3. 提供了一个便携式测试程序,该程序详尽地测试包中的每个机器相关模块。

文档

代码的每个模块,包括测试驱动程序,都必须进行充分的注释。注释应包括模块的用途、通过调用序列、通过全局变量声明或通过输入获得的所有参数的定义,以及设置和解释代码主要部分的注释。定义机器依赖性的注释应收集在一起并清楚标记。注释可以简单地指向给出完整注释的位置,否则会重复出现较大的注释块。强烈建议按字母顺序列出内部变量及其使用方法。

鼓励使用机器可读的文档,提供比可发布的更详细的软件包信息。本材料应以多种方式准备(按优先顺序)

  1. Tex/Latex:应提供pdf版本和原始Tex/Ltex源以及所有依赖文件(例如.bib和图像文件)。

  2. 单词。

  3. HTML:这应该只包含用于链接的相对路径。

结构

代码的组织应该便于使用和修改,并且足够灵活,可以用于所涉及问题领域的大多数问题。缩进应该用于标识循环、复合语句和块,以及语句在另一行上的延续。如果整数用于语句标签,它们必须严格递增,并且应该相隔足够远,以便将来进行修改。如果数组所需的空间与问题高度相关,则该数组应该具有可变维度。

所有捐款都将通过从ACM收集的算法(CALGO)网站和美国计算机协会数字图书馆.

其他算法类型提交

其他通常较短的、涉及CALGO之前发布的编号算法的提交文件也可以接受。上述完整算法文件中描述的完整性、可移植性、文档质量和结构要求也适用于这些提交文件。

评论

这是一份关于先前发布的算法的简短报告,涉及到对代码的更正或修改。该文件应描述拟议更改的原因,如果是对软件的简单修改,还应描述所做更改的详细信息。修改后的软件应与说明已纠正或改进的原始问题的证据一起提交(例如,特定测试数据和结果)。

翻译

翻译可以报告将现有算法转换为不同的高级语言,或者为现有算法未涵盖的平台提供机器相关模块。只有当翻译的算法仍然代表当前技术水平时,才会考虑翻译。

比较

比较是针对特定主题领域高度相似的软件包的相对优点和功能的报告。这项实际研究将包括在解决一系列测试问题的基础上,报告和解释关于软件包的各种令人信服的观察事实。研究中使用的驱动程序、测试问题和数据将被视为提交文件的软件组成部分。

所获证书

认证是关于先前发布的算法的报告,但与备注不同,它不涉及对已发布软件的代码更改。它可以是对性能特征的仔细研究、正确性验证或广泛测试的报告。

这是唯一一种可能没有任何附带软件组件的算法类型论文。

提交手续

除了一般提交指南算法论文的作者还应上传一个单独的文件,其中包含提交的软件组件。该文件应该是压缩的存档文件(例如zip或tar.gz或tar)。单个文件应安排在适当的目录结构中,以便容易识别提交材料的组成部分(例如,算法源、支持材料、测试代码等)

请注意,除极不寻常的情况外,个别例程调用序列的详细描述将不会在日志中发布,应作为机器可读的用户手册随软件提交一起提供。

  1. 如果要将配套论文提交给ACM TOMS,则应将论文和软件作为一份提交文件上传。如果将配套文件提交给另一份ACM交易更合适,请联系算法编辑器提交之前。

  2. 在验证算法的机器可读副本的形式合适之前,算法的处理不会继续。如果算法要求使用受限制使用的代码,应首先使用算法编辑器.

  3. 算法提交文件中必须包含可移植性证据。

传播协议

提交算法以在其中一份ACM事务中发布意味着ACM允许不受限制地使用该算法(这包括在ACM内的教育和研究材料中使用)。

对于2013年之前发布的算法,ACM拥有此类算法的版权,任何形式的使用都必须通过以下地址向ACM申请许可:[电子邮件保护].

对于2013年及其后出版的算法,作者拥有版权。这些算法的使用条款遵循算法作者选择的许可证。

版权协议(适用于2013年之前提交的所有代码):

该协会授予作者重新使用其材料的权利,并授予自由许可,允许出于非商业目的重新使用相关软件。有关更多详细信息,请参阅ACM软件版权和许可协议以及ACM版权政策。    

版权协议

请参阅ACM软件版权协议了解更多详细信息。

参考文献

[1] 国际标准化组织。信息技术——编程语言——Fortran——第1部分:基础语言,ISO/IEC 1539-1:2018,国际标准化组织,瑞士日内瓦,2018。

[2] 国际标准化组织。编程语言——C ISO/IEC 9899:2018国际标准化组织,瑞士日内瓦,2018。

[3] 国际标准化组织。编程语言——C++ISO/IEC 14882:2020国际标准化组织,瑞士日内瓦,2020。

[4] Ford,B.可运输数值软件环境的参数化。ACM事务处理。数学。柔和。4、2(1978年6月),100-103。


弗雷德·T·克罗
Webb Miller于1979年3月修订
理查德·汉森于1982年1月修订
蒂姆·霍普金斯于1999年10月、2007年8月、2022年1月修订