Diferente pentru blog/meet-in-the-middle intre reviziile #3 si #4

Nu exista diferente intre titluri.

Diferente intre continut:

Let’s discuss a few applications.
drawing
h2. a + b + c + d + e = f
 
bq. Given an array, find out if there are any 6 numbers such that the sum of the first five equal to the 6th (you can use the same number more than once).
 
The naive algorithm is O(N^6) try all the possible combinations of 6 numbers. A less naive algorithm brute forces through all n^5 combinations of 5 numbers and then efficiently checks if their sum is in the original array by using a hash table.
But by now you’ve probably started thinking how meet in the middle can be applied for this problem. The trick is to rewrite the equation as a + b + c = f - d - e. Store all the n^3 sums a + b + c in a hash set S. Then iterate through all n^3 combinations for d, e, f and check if S contains f - d - e. This algorithm has O(n^3) time and space complexity.
 
h2. Bidirectional search(interview question)
bq. Find the shortest path between two nodes nodes in a large graph which you can’t keep in memory, for example the web graph of the facebook friendship graph, find out the shortest path between them.
If we find any match in the two sets it means that Ek1(p) = Dk2(s) so the secret keys are k1 and k2.
The naive brute force algorithm would go through 2^56 * 2^56 iterations by brute forcing through all possible values of k1 and k2 while this algorithm uses 2^56 * 56 memory to store Ek(p) and does O(2^56) work to find a match.
drawing
h2. a + b + c + d + e = f
 
bq. Given an array, find out if there are any 6 numbers such that the sum of the first five equal to the 6th (you can use the same number more than once).
 
The naive algorithm is O(N^6) try all the possible combinations of 6 numbers. A less naive algorithm brute forces through all n^5 combinations of 5 numbers and then efficiently checks if their sum is in the original array by using a hash table.
But by now you’ve probably started thinking how meet in the middle can be applied for this problem. The trick is to rewrite the equation as a + b + c = f - d - e. Store all the n^3 sums a + b + c in a hash set S. Then iterate through all n^3 combinations for d, e, f and check if S contains f - d - e. This algorithm has O(n^3) time and space complexity.
 
h2. the discrete logarithm problem
bq. Given n a prime number and p, q two integer numbers between 0 and n-1 find k such that  p^k = q modulo n.

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.