Jump to content

Recommended Posts

Posted (edited)

Just wanted to waste some time and converted some php code to AutoIt :

$primeNumbers = array();
$output = '';
$start = microtime(TRUE);
for ($i = 2; $i < 100000; $i++)
{
     $divisible = false;
     foreach ($primeNumbers as $number)
     {
             if ($i % $number == 0)
             {
                     $divisible = true;
                     break;
             }
     }
     if ($divisible == false)
     {
             $primeNumbers[] = $i;
             $output .= $i;
     }
}
echo count($primeNumbers), "n";
echo "time: ", microtime(TRUE) - $start, "n";

#include <Array.au3>

Dim $primes[1]
Local $number
$output = ''

For $i = 2 To 100000
$divisible = false

For $number In $primes
If Mod($i, $number) = 0 Then
$divisible = true
ExitLoop
EndIf
Next

if $divisible = false Then
_ArrayAdd($primes, $i)
$output &= $i
EndIf
Next

MsgBox(0,'',UBound($primes))

Well, except the timing functions which I decided there's no reason to add after I ran it lol , would you say this code is equivalent ? It returns the same number of results (plus one, I guess it's the initialization I had to use ?) so I guess it runs fine.

EDIT: AutoIt code tag my ass ....

Edited by Inverted
Posted

Well, except 2

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Posted

I guess setting step to 2 would be a good start, but what matters, is that the algorithm is as much the same as possible, for comparison's sake.

If I understanf correctly, constantly using ArrayAdd is the main performance hog, because it has to ReDim the array ? Or am I wrong ?

What is a more efficient alternative to the way I do the array operations ?

  • Moderators
Posted

Inverted,

What is a more efficient alternative to the way I do the array operations ?

Take a look at the last example in the Recursion tutorial in the Wiki and the text beneath it. ;)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Posted (edited)

I'd think preallocating your array, and then a single redim at the end would be the way to go:

#include <Array.au3>

Local $max = 1000, $primes[100 + $max * .17] = [2], $idx

For $i = 3 To $max Step 2
    For $j = 0 to $idx
        $rem = Mod($i, $primes[$j])
     If $rem = 0 Then ExitLoop
    Next
    If $rem Then
     $idx += 1
     $primes[$idx] = $i
    EndIf
Next
ReDim $primes[$idx + 1]
_ArrayDisplay($primes, $idx + 1 & " found")

edit: trying to tune the preallocated array size

Edited by Spiff59

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...