magic_lobster_party

  • 0 Posts
  • 310 Comments
Joined 4 months ago
cake
Cake day: March 4th, 2024

help-circle


  • Recommendation is part of the service. If they know I like something, then it’s reasonable they recommend me something that’s similar. It’s like going to a restaurant and asking for recommendations.

    Advertising is when things are promoted outside the service. It’s like going to a restaurant and they tell me about Raid Shadow Legends. I don’t want that.

    I think recommendation should be linked to usage data like watch history on that particular service. Location and other external information shouldn’t be used. I don’t want my recommendations depend on which friends I have or recent activity on a different service.





  • magic_lobster_party@kbin.runtoScience Memes@mander.xyzGarfield
    link
    fedilink
    arrow-up
    24
    arrow-down
    1
    ·
    3 days ago

    My interpretation is that Jon starts talking about how division by 0 is not possible. Garfield then goes on about how we can use limits to assign values to such expressions, which we can use to calculate derivatives. I guess Garfield starts to question whether dy/dx really exists after all this.

    Jon then changes the subject to be about integrals, which Garfield is immediately annoyed about the missing +C.

    It’s super funny.










  • So in your code you do the following for each permutation:

    for (int i = 0; i<n;i++) {

    You’re iterating through the entire list for each permutation, which yields an O(n x n!) time complexity. My idea was an attempt to avoid that extra factor n.

    I’m not sure how std implements permutations, but the way I want them is:

    1 2 3 4 5

    1 2 3 5 4

    1 2 4 3 5

    1 2 4 5 3

    1 2 5 3 4

    1 2 5 4 3

    1 3 2 4 5

    etc.

    Note that the last 2 numbers change every iteration, third last number change every 2 iterations, fourth last iteration change every 2 x 3 iterations. The first number in this example change every 2 x 3 x 4 iterations.

    This gives us an idea how often we need to calculate how often each hash need to be updated. We don’t need to calculate the hash for 1 2 3 between the first and second iteration for example.

    The first hash will be updated 5 times. Second hash 5 x 4 times. Third 5 x 4 x 3 times. Fourth 5 x 4 x 3 x 2 times. Fifth 5 x 4 x 3 x 2 x 1 times.

    So the time complexity should be the number of times we need to calculate the hash function, which is O(n + n (n - 1) + n (n - 1) (n - 2) + … + n!) = O(n!) times.

    EDIT: on a second afterthought, I’m not sure this is a legal simplification. It might be the case that it’s actually O(n x n!), as there are n growing number of terms. But in that case shouldn’t all permutation algorithms be O(n x n!)?

    EDIT 2: found this link https://stackoverflow.com/a/39126141

    The time complexity can be simplified as O(2.71828 x n!), which makes it O(n!), so it’s a legal simplification! (Although I thought wrong, but I arrived to the correct conclusion)

    END EDIT.

    We do the same for the second list (for each permission), which makes it O(n!^2).

    Finally we do the hamming distance, but this is done between constant length hashes, so it’s going to be constant time O(1) in this context.

    Maybe I can try my own implementation once I have access to a proper computer.


  • Time complexity is mostly useful in theoretical computer science. In practice it’s rare you need to accurately estimate time complexity. If it’s fast, then it’s fast. If it’s slow, then you should try to make it faster. Often it’s not about optimizing the time complexity to make the code faster.

    All you really need to know is:

    • Array lookup: O(1)
    • Single for loop: O(n)
    • Double nested for loop: O(n^2)
    • Triple nested for loop: O(n^3)
    • Sorting: O(n log n)

    There are exceptions, so don’t always follow these rules blindly.

    It’s hard to just “accidentally” write code that’s O(n!), so don’t worry about it too much.




  • By “certain distance function”, I mean a specific function that forces the problem to be O(n!^2).

    But fear not! I have an idea of such function.

    So the idea of such function is the hamming distance of a hash (like sha256). The hash is computed iterably by h[n] = hash(concat(h[n - 1], l[n])).

    This ensures:

    • We can save partial results of the hashing, so we don’t need to iterate through the entire lists for each permutation. Otherwise we would get another factor n in time complexity.
    • The cost of computing the hamming distance is O(1).
    • Order matters. We can’t cheat and come up with a way to exclude some permutations.

    No idea of the practical use of such algorithm. Probably completely useless.