icon Top 9 categories map      RocketAware > Perl >

How do I permute N elements of a list?

Tips: Browse or Search all pages for efficient awareness of Perl functions, operators, and FAQs.


Search Perl pages


By activity
Professions, Sciences, Humanities, Business, ...

User Interface
Text-based, GUI, Audio, Video, Keyboards, Mouse, Images,...

Text Strings
Conversions, tests, processing, manipulation,...

Integer, Floating point, Matrix, Statistics, Boolean, ...

Algorithms, Memory, Process control, Debugging, ...

Stored Data
Data storage, Integrity, Encryption, Compression, ...

Networks, protocols, Interprocess, Remote, Client Server, ...

Hard World
Timing, Calendar and Clock, Audio, Video, Printer, Controls...

File System
Management, Filtering, File & Directory access, Viewers, ...


How do I permute N elements of a list?

Here's a little program that generates all permutations of all the words on each line of input. The algorithm embodied in the permut() function should work on any list:

    #!/usr/bin/perl -n
    # permute - tchrist@perl.com
    permut([split], []);
    sub permut {
        my @head = @{ $_[0] };
        my @tail = @{ $_[1] };
        unless (@head) {
            # stop recursing when there are no elements in the head
            print "@tail\n";
        } else {
            # for all elements in @head, move one from @head to @tail
            # and call permut() on the new @head and @tail
            foreach $i (0 .. $#head) {
                @newhead = @head;
                @newtail = @tail;
                unshift(@newtail, splice(@newhead, $i, 1));
                permut([@newhead], [@newtail]);

Source: Perl FAQ: Data Manipulation
Copyright: Copyright (c) 1997 Tom Christiansen and Nathan Torkington.
Next: How do I sort an array by (anything)?

Previous: How do I select a random element from an array?

(Corrections, notes, and links courtesy of RocketAware.com)

[Overview Topics]

Up to: Combinations and Permutations

Rapid-Links: Search | About | Comments | Submit Path: RocketAware > Perl > perlfaq4/How_do_I_permute_N_elements_of_a.htm
RocketAware.com is a service of Mib Software
Copyright 2000, Forrest J. Cavalier III. All Rights Reserved.
We welcome submissions and comments