Coder Social home page Coder Social logo

algorithm-stuff's Introduction

Algorithm stuff

algorithm stuff

1. write a javascript function to return all combinations of k elements from an array of n elements.

Sure, here's a JavaScript function that takes an array of n elements and a value k, and returns all possible combinations of k elements from the array:

function getCombinations(array, k) {
  const results = [];

  function recursiveHelper(combination, start) {
    if (combination.length === k) {
      results.push(combination.slice());
      return;
    }
    for (let i = start; i < array.length; i++) {
      combination.push(array[i]);
      recursiveHelper(combination, i + 1);
      combination.pop();
    }
  }

  recursiveHelper([], 0);
  return results;
}

Here's an explanation of how it works:

  • The function initializes an empty array called results to hold the combinations.
  • The function defines a helper function called recursiveHelper that takes two parameters: the current combination being built and the starting index for the loop.
  • If the current combination's length equals k, it's considered a valid combination and pushed to the results array.
  • Otherwise, the helper function loops through the remaining elements in the array from the starting index. Each element is added to the current combination and the recursiveHelper function is called recursively with the new combination and the index of the next element.
  • After the recursive call, the last element is removed from the combination using the pop() method.
  • Finally, the getCombinations function calls recursiveHelper with an empty combination and a starting index of 0, and returns the results array containing all the combinations.
  • Here's an example of how to use this function:

what is the complexity of this algorithm ?

The time complexity of this algorithm is O(n choose k), which is also written as (n C k), where n is the number of elements in the input array and k is the size of the combinations to be generated. The space complexity is also O(n choose k), since that's the maximum number of possible combinations that can be generated.

The reason for the time complexity is that the algorithm needs to generate all possible combinations of size k from the input array. The formula for the number of combinations is n choose k, which is equal to n! / (k! _ (n - k)!). This means that the algorithm needs to perform n! / (k! _ (n - k)!) iterations to generate all possible combinations.

In practice, this means that the algorithm can be very slow for large input sizes, especially when k is close to n. However, there are some optimizations that can be made to improve the performance of the algorithm, such as early stopping when the number of remaining elements is less than the required number of elements to form a combination.

2. python exponential of 2 by using bit shift

In Python, you can calculate the exponential of 2 using the left bit shift operator <<. Specifically, you can use the left shift operator to shift the binary representation of the number 1 by a certain number of bits, which is equivalent to raising 2 to that power. Here's an example code that demonstrates this:

def exp2(power):
    return 1 << power

In this implementation, the << operator performs a left shift operation, which is equivalent to multiplying by 2 raised to the power of the shift amount. The 1 is the binary representation of the number 1, and the power argument specifies the number of bits to shift it by. Therefore, 1 << power calculates 2 raised to the power of power.

Here's an example usage of the exp2() function:

>>> exp2(3)
8
>>> exp2(5)
32
>>> exp2(10)
1024

Note that the exp2() function only works for integer powers of 2, since shifting by a non-integer value doesn't make sense in binary arithmetic. For non-integer powers of 2, you should use the regular exponential function ** or math.pow() instead.

is this faster than ** or math.pow() ?

In general, using the left shift operator << to calculate powers of 2 is faster than using the ** operator or the math.pow() function, since the former is a bit-wise operation that can be performed much more quickly by the CPU.

However, it's important to note that this optimization only applies to powers of 2. For non-power-of-2 exponents, the ** operator or the math.pow() function are likely to be faster and more accurate.

Also, the actual speedup of using the << operator over the ** operator or the math.pow() function will depend on a variety of factors, such as the size of the exponent, the specific hardware and compiler being used, and the surrounding code. Therefore, it's recommended to benchmark the different approaches on your specific use case to determine which one is faster.

algorithm-stuff's People

Contributors

hieuvecto avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.