Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Persisting large array for faster access

Tags:

java

I have a 5 dimensional array, where all indicies range from 2-14. It contains all the possible permutations of a 5 number sequence. This array holds 525720 permutations, which takes quite a while to compute. (5-7 seconds on my Macbook pro). It should be used as a lookup table, to access a value in constant time, or more specific, the value of a certain poker-hand:

array[2][3][4][5][7] // 1
array[5][5][5][5][14] // 2000

Is there a faster way to create this array? I was thinking about persisting the array in some way, and then load it each time my program starts - but is there any efficient ways to do this?

I'm not very familiar with persistence. I dont really know if it's worth it for me, to load it from disk, instead of create it each time. I know about Hibernate, but this seems like a bit of a overkill, just to persist a single array?

like image 560
Frederik Wordenskjold Avatar asked Feb 27 '23 15:02

Frederik Wordenskjold


2 Answers

Write it out via MappedByteBuffer. Create a big enough file, map it, get an asIntBuffer(), put in your numbers.

Then you can map it later and access it via IntBuffer.get(obvious-math-on-indices).

This is much faster the serialization.

like image 52
bmargulies Avatar answered Mar 12 '23 12:03

bmargulies


Not a direct answer to your original question, but...

If you are trying to do fast poker-hand evaluations, you want to make sure you read through The Great Poker Hand Evaluator Roundup.

Particularly: Cactus Kev's Poker Hand Evaluator.

I was involved in long-running discussion about running the fastest possible 5- and 7-hand poker evaluations where most of this stuff comes from. Frankly, I don't see how these evaluations are going to any faster until you can hold all C(52,5) or 2,598,960 hand values in a look-up table.

like image 23
Robert Cartaino Avatar answered Mar 12 '23 11:03

Robert Cartaino