Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??
My concern is this. With 7 or more characters, the possible letter combinations are in the thousands.. and then I have to check each combination to verify that it's a word. I'd like to do this using CGI but I fear I won't be able to get it fast enough where it won't time out.
You're thinking about this in the wrong direction. If you want to preprocess your dictionary like this (start with a word and then check whether any of its permutations are words), it will take a very long time. In fact, you will be checking the dictionary for every possible combination of letters. Since there are far fewer words in the dictionary than possible combinations of letters, you should look in the other direction: for each word in the dictionary, normalize it (to its sorted form), and then store it in a hash keyed on the normalized version.
my @words = do { open my $fh, "<", "/usr/dict/words" or die; <$fh>; }; chomp @words; sub normalize { join "", sort split //, $_[0]; } my %dict; push @{ $dict{normalize($_)} }, $_ for @words;
This will give you a structure %dict that looks like this:
abd => ["bad", "dab"], aepr => ["pear", "reap", "rape"] ...
Then if you want to find the words that are permutations of $foo, you look at the arrayref $dict{normalize($foo)}. You should also save this processed dictionary file somewhere, so you don't have to do all this work twice.
Is map the best way of going about this? I am not too familiar with map and this ability. And I really don't understand the logic of how to use the anagrams or why it would be faster.
Map is just a looping construct like foreach, while, etc.. It can't do anything magical that cannot be done with another type of programming construct. You can write both inefficient and efficient code with map. It will not write your algorithms for you. If you don't understand it, don't use it.

blokhead


In reply to Re: literati cheat / finding words from scrambled letters by blokhead
in thread literati cheat / finding words from scrambled letters by sulfericacid

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (6)
As of 2024-04-23 14:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found