Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to speed up the process of looping a million values array?

Tags:

arrays

c#

loops

So I was taking an online test where i had to implement a piece of code to simply check if the value was in the array. I wrote the following code:

    using System;
    using System.IO;
    using System.Linq;

    public class Check
    {
        public static bool ExistsInArray(int[] ints, int val)
        {
            if (ints.Contains(val)) return true;
            else return false;
        }
    }

Now i didn't see any problems here because the code works fine but somehow i still failed the test because this is "not fast enough" once the array contains a million values.

The only code i wrote myself is:

    if (ints.Contains(val)) return true;
    else return false;

The other code i was given to work with.

Is there a way to speed up this process?

Thanks in advance.

EDIT: I came across a page where someone apparently took the same test as i took and it seems to come down to saving CPU cycles.

Reference: How to save CPU cycles when searching for a value in a sorted list?

Now his solution within the method is:

    var lower = 0;
    var upper = ints.Length - 1;

    if ( k < ints[lower] || k > ints[upper] ) return false;
    if ( k == ints[lower] ) return true;
    if ( k == ints[upper] ) return true;

    do
    {
        var middle = lower + ( upper - lower ) / 2;

        if ( ints[middle] == k ) return true;
        if ( lower == upper ) return false;

        if ( k < ints[middle] )
            upper = Math.Max( lower, middle - 1 );
        else
            lower = Math.Min( upper, middle + 1 );
    } while ( true );

Now i see how this code works but it's not clear to me why this is supposed to be faster. Would be nice if someone could elaborate.

like image 411
DLP Avatar asked Jul 11 '19 14:07

DLP


People also ask

What is the simplest way of looping through an array?

forEach() methods provide a simpler way to iterate over arrays and NodeLists while still having access to the index. You pass a callback function into the forEach() method. The callback itself accepts three arguments: the current item in the loop, the index of the current item in the loop, and the array itself.

How long does it take to loop through an array?

this is done between 10-200 MicroSeconds (not milliseconds). it actually takes various milliseconds to render everything. Same as in DOM. for( var i = array.

What's faster than a for loop?

Conclusions. List comprehensions are often not only more readable but also faster than using “for loops.” They can simplify your code, but if you put too much logic inside, they will instead become harder to read and understand.

What is the fastest way to loop through a JavaScript array?

The absolute fastest way to loop through a javascript array is: As of June 2016, doing some tests in latest Chrome (71% of the browser market in May 2016, and increasing): The fastest loop is a for loop, both with and without caching length delivering really similar performance.

How much faster is array looping without Cython?

and that takes 0.75sec on my system for a billion elements compared to 115sec when looping over the array: a 155X improvement by changing 2 lines and without Cython. For this type of use case that can easily be turned into a map and reduce job, you are actually probably better off using multiprocessing to accelerate further.

How to iterate a huge array faster?

I have tried some other ways to iterate a huge array and found out that halving the array length and then iterating both halves in a single loop is faster. This performance difference can be seen while processing huge arrays.

How do you loop through an array of objects?

The normal way for looping through an array for programming languages is to create indices starting from 0 sometimesf rom1 s o m e t i m e s f r o m 1 until reaching the last index in the array. Each index is used for indexing the array to return the corresponding element.


1 Answers

If it's sorted array you can use BinarySearch To speed Up the process

public static bool ExistsInArray(int[] ints, int val)
{
    return Array.BinarySearch(ints, val) >= 0;
}
like image 122
Mihir Dave Avatar answered Oct 13 '22 13:10

Mihir Dave