Хобрук: Ваш путь к мастерству в программировании

Алгоритм взвешенного поиска для PHP

Проблема

У меня есть 5 элементов в таблице [1], каждый элемент имеет 4 атрибута (красный, зеленый, синий, желтый).
Каждому атрибуту можно присвоить оценку. от 1 до 9 [2].

При выполнении поиска на моем веб-сайте пользователи могут указать, насколько каждый атрибут релевантен результатам поиска, присвоив каждому атрибуту оценку от 1 до 9.

Какой алгоритм я должен использовать для расчета и упорядочивания результатов на основе предпочтений пользователей?

Ресурсы

[1] – CREATE TABLE items( id INT NOT NULL AUTO_INCREMENT , name VARCHAR(128) , red INT , green INT , blue INT , yellow INT , PRIMARY KEY (id) );

[2] – INSERT INTO items (NAME, red, green, blue, yellow) VALUES ('Random 1', 4, 1, 9, 4), ('Random 2', 1, 1, 2, 9), ('Random 3', 5, 7, 6, 3), ('Random 4', 2, 2, 8, 1);


Ответы:


1

Вычислить пунктуацию поиска как поле и отсортировать запрос по нему

SELECT *, (red * @rw) AS w1, (green * @gw) AS w2, (blue* @bw) AS w3, (yellow * @yw) AS w4, (w1 + w2 + w3 + w4) AS result 
  FROM items ORDER BY result DESC; 

@rw => красный вес, @bw => синий вес и т. д.

19.09.2011
  • Я только что попробовал это, но на самом деле это не работает - Unknown column 'w1' in 'field list' 19.09.2011
  • удалите скобки и замените переменные @rx на их реальное значение в php 20.09.2011
  • это работает, попробуйте это в своем клиенте mysql: выберите (5 * 4) AS mult ; 20.09.2011

  • 2

    просто суммируй это

    <?php
    require('connect.php') //your db connection data
    $redWeight=$_REQUEST['howeverYouPassedTheRedWeighting'];
    $blueWeight=$_REQUEST['howeverYouPassedTheBlueWeighting'];
    $yellowWeight=$_REQUEST['howeverYouPassedTheYelloWeighting'];
    $greenWeight=$_REQUEST['howeverYouPassedTheGreenWeighting'];
    $query="SELECT name, ( red*$redWeight+green*$greenWeight+blue*$blueWeight+yellow*$yellowWeight ) AS value FROM items ORDER BY value DESC";
    $res=mysql_query($query);
    //etc.
    ?>
    
    19.09.2011

    3

    Извините, но у меня нет прямого ответа. Это очень интересная тема. Вы можете использовать что-то, связанное с евклидовым расстоянием или корреляцией Пирсона. Вы можете найти больше в книгах, связанных с Коллективным разумом.

    Конечно такие вещи реализовать сложнее, но ваши результаты мы будем намного точнее и точнее. Я рекомендую эти книги:

    Алгоритмы интеллектуальной сети

    Программирование коллективного разума: создание интеллектуальных приложений Web 2.0

    19.09.2011

    4

    Я не уверен, правильно ли я понимаю, что вы имеете в виду, но как насчет этого:

    $user_defined_relevance = array ('red' => 1, 'blue' => 3, 'green' => 2, 'yellow' => 7);
    arsort($user_defined_relevance); //this sorts the array by value descending while maintaining index association
    
    $query = 'SELECT * FROM items ORDER BY '.implode(array_keys($user_defined_relevance), ',  DESC');
    //will make SELECT * FROM items ORDER BY yellow DESC, blue DESC, green DESC, red DESC;
    mysql_query($query);
     ...
    
    19.09.2011
    Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..