Получить наименование ближайшего цвета в зависимости от шестнадцатеричного цвета

Я пытаюсь получить наиболее подходящее название цвета в зависимости от заданного шестнадцатеричного значения. Например, если у нас есть шестнадцатеричный цвет#f00 мы'чтобы получить имя цвета.red

'#ff0000' => 'red'
'#000000' => 'black'
'#ffff00' => 'yellow'

В настоящее время я использую алгоритм расстояния Левенштейна, чтобы получить наиболее близкое название цвета, до сих пор работает хорошо, но иногда не так, как ожидалось.

Например:

'#0769ad' => 'chocolate'
'#00aaee' => 'mediumspringgreen'

Так есть идеи, как приблизить результат?

Вот'Что я сделал, чтобы получить самый близкий цвет:

Array.closest = (function () {

    // http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript
    function levDist(s, t) {
        if (!s.length) return t.length;
        if (!t.length) return s.length;

        return Math.min(
            levDist(s.substring(1), t) + 1,
            levDist(t.substring(1), s) + 1,
            levDist(s.substring(1), t.substring(1)) + (s[0] !== t[0] ? 1 : 0)
        );
    }

    return function (arr, str) {
        // http://stackoverflow.com/q/11919065/1250044#comment16113902_11919065
        return arr.sort(function (a, b) {
            return levDist(a, str) - levDist(b, str);
        });
    };

}());

http://jsfiddle.net/ARTsinn/JUZVd/2/

Другое дело, производительность! Кажется, что тамГде-то действительно большая проблема, которая делает это очень медленным (это алгоритм?).

Ответы на вопрос(1)

Ваш ответ на вопрос