Giter Site home page Giter Site logo

Comments (5)

dubzzz avatar dubzzz commented on April 28, 2024

It seems to be some kind of overflow of hashWord/reHashWord. With previous strings the computed hash is above Number.MAX_SAFE_INTEGER.

Number.MAX_SAFE_INTEGER; //9007199254740991
hashWord(" !/'#'pp"); //9143038766935264
reHashWord(hashWord("^ !/'#'p"), "^ !/'#'p", " !/'#'pp"); //9143038766935266

Maybe we can try to mod the hash into [-2 ** 31, 2 ** 31 -1] space in order to get rid of the issue. I will give it a try and send you an update as soon as I get something.

from javascript-algorithms.

dubzzz avatar dubzzz commented on April 28, 2024

Given the fact that the issue is coming from word[charIndex].charCodeAt(0) * PRIME ** charIndex going above Number.MAX_SAFE_INTEGER, it means we are safe up to charIndex == 4 because 0x10ffff * 97 ** 4 < Number.MAX_SAFE_INTEGER - false for 5.

The current implementation of the algorithm should be ok - will confirm my test passes with this limit - for any word having at most 5 characters otherwise there is no guarantee that it does not overflow and goes into rounding issues.

from javascript-algorithms.

trekhleb avatar trekhleb commented on April 28, 2024

Good catch @dubzzz

from javascript-algorithms.

dubzzz avatar dubzzz commented on April 28, 2024

@trekhleb Would you agree on a PR adding some property based tests in this repository?

All the issues I reported so far were found using this test method. For the moment I only added them for sorting, knuth and rabin in my local fork. I think I can spend some time to check the other algorithms too.

In a nutshell:

It is a testing approach complementary to examples based tests. The idea is to check for properties:
for all (x, y, ...) such as precondition(x, y, ...) holds property(x, y, ...) is true
The framework is then responsible to generate x,y..., such as precondition holds, run the check on them and build a smaller failing case in case of failure.

Running example: https://runkit.com/dubzzz/rabin

from javascript-algorithms.

dubzzz avatar dubzzz commented on April 28, 2024

@trekhleb Fixed by #110

from javascript-algorithms.

Related Issues (20)

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.