A contribution should be in the form of an algorithm, comparison, certification, remark, or translation.
ACM Algorithms are published to make the fruits of software research accessible to as wide an audience as possible. An algorithm must either provide a capability not readily available or perform a task better in some way than has been done before. "Better" can mean anything from improved reliability or efficiency to more effective packaging. In all cases, an algorithm must be of lasting value and must represent a substantial contribution in terms of the amount of work or the originality required for its creation. In the case where the new algorithm is claimed to be an improvement over currently available codes supporting evidence must be included in the submission. Efficiency claims need to be supported on a wide range of practical problems.
An algorithm submission may consist of either one or two papers. There is always an algorithm paper which describes the code. Optionally, a second (companion paper) which describes the underlying algorithms in more detail, may also be submitted for review either to ACM TOMS or, in exceptional circumstances, to another of the ACM Transactions (see the Submission Formalities section for more details). In this case, both papers will be published simultaneously. The algorithm paper should give a brief description of what the software does and pertinent information on usage and maintenance. It should not duplicate information in another paper or in the algorithm sources; neither should it contain information that would more usually be found in a users' manual.
An ACM algorithm must be complete, portable, well documented, and well structured. The meaning of these terms is clarified below.
A submission consists of all the code and test data necessary for the effective use and testing of the algorithm implementation by a large section of its intended audience.
The software part of the submission should consist of
It must be possible to move the code in machine-readable form from one platform/compiler/interpreter to another with, at worst, only very minor, well-documented changes. As initial evidence of portability the author may
Machine-dependent routines may be used provided
Each module of the code, including test drivers, must be adequately commented. Comments should include the purpose of the module, definitions of all arguments passed through the calling sequence, through global variable declarations, or obtained via input, and comments setting off and explaining major parts of the code. Comments defining machine dependencies should be gathered together and clearly flagged. A comment can simply point to the place where full comments are given in cases where large comment blocks would otherwise be repeated. An alphabetical list of internal variables, together with how they are used, is highly recommended.
Machine-readable documentation giving more detailed information about the package than can be published is encouraged. This material may be prepared in a number of ways
Code should be organised so that it is easy to use and modify, and yet is flexible enough to be useful for most problems in the problem area covered. Indentation should be used to identify loops, compound statements and blocks, and continuation of a statement onto another line. If integers are used for statement labels, they must be strictly increasing and should be far enough apart to allow for future modifications. If the space required by an array is highly problem dependent, then that array should have a variable dimension.
All contributions will be made available in their entirety via the Collected Algorithms from ACM (CALGO) website and the ACM Digital Library.
This is a brief report on a previously published algorithm and is concerned with correcting or modifying the code. The paper should describe the reasons for the proposed changes and, in the case of simple modifications to the software, details of the alterations made. The revised software should be submitted along with evidence that illustrates the original problem that has been corrected or improved (for example, particular test data and results).
A translation may report either the conversion of an existing algorithm into a different high-level language or the provision of machine-dependent modules for a platform not covered by the existing algorithm. A translation will be considered only if it is a translation of an algorithm that still represents the current state of the art.
A comparison is a report on the relative merits and features of highly similar software packages for a specific subject area. This practical study would include reporting and interpreting various cogent observed facts about the packages based on solving an extensive set of test problems. The drivers, test problems, and data used in the study would be considered as the software component of the submission.
A certification is a report on a previously published algorithm but, unlike a Remark, does not involve code changes to the published software. It can be a careful study of performance characteristics, a verification of correctness, or a report on extensive testing.
This is the only form of an algorithm-type paper for which there might not be any accompanying software component.
Please note that, except in very unusual circumstances, detailed descriptions of the calling sequences of individual routines will not be published in the journal and should be provided with the software submission as a machine readable user manual.
Submittal of an algorithm for publication in one of the ACM Transactions implies that unrestricted use of the algorithm within a computer is permissible. General permission to copy and distribute the algorithm without fee is granted provided that the copies are not made or distributed for direct commercial advantage. The ACM copyright note and the title of the publication and its date appear, and notice is given that copying is by permission of the Association for Computing Machinery.
Authors of copyrightable algorithms (or their employers) are required to transfer the copyright to ACM upon acceptance of the algorithm for publication, in accordance with ACM policy to own copyright on ACM published material. The Association grants authors the right to reuse their material, and also grants liberal permission for the reuse of the associated software for noncommercial purposes. See the ACM Software Copyright and License Agreement and the ACM Interim Copyright Policies for further details.
 International Organization for Standardization. Information technology -- Programming languages -- Fortran - Part 1: Base language, ISO/IEC 1539-1:2004, International Organization for Standardization, Geneva, Switzerland, 2004.
 International Organization for Standardization. Programming languages -- C ISO/IEC 9899:1999 International Organization for Standardization, Geneva, Switzerland, 1999.
 International Organization for Standardization. Programming languages -- C++ ISO/IEC 14882:2003 International Organization for Standardization, Geneva, Switzerland, 2003.
 International Organization for Standardization. Information technology -- Programming languages -- Ada ISO/IEC 8652:1995 International Organization for Standardization, Geneva, Switzerland, 1995.
 Ford, B. Parameterization of the environment for transportable numerical software. ACM Trans. Math. Softw. 4, 2 (June 1978), 100-103.
Fred T. Krogh
Revised March 1979 by Webb Miller
Revised January 1982 by Richard Hanson
Revised October 1999 by Tim Hopkins
Revised August 2007 by Tim Hopkins