Алгоритм ранжирования записей на основе нескольких критериев

#sorting #ranking

#сортировка #Рейтинг

Вопрос:

Это общий «алгоритмический» вопрос, а не программный.

Предположим, у нас есть таблица записей в следующем виде:

 S/N   Cost   Profit  Review   
 1      5      9      4
 2     10      6      5
 3      8     11      6
 4     12      5      9
  

и мы хотим каким-то образом сортировать и ранжировать эти записи в соответствии с несколькими критериями (атрибутами); например, стоимость и прибыль.

Существует ли какой-либо известный процесс или алгоритм, который может помочь в этом?

Я знаю, что это многоцелевая проблема, но я пытаюсь выяснить, есть ли альтернатива сортировке записей в таблице с несколькими атрибутами.

Заранее спасибо.

Комментарии:

1. Размещайте вопросы по математике на Maths stack exchange.

2. @NewWorld это алгоритмический вопрос. Таким образом, я думаю, что он подходит и здесь. Спасибо.

3. Моя ошибка; этот вопрос больше подходит для обмена стеками компьютерных наук, чем SO.

Ответ №1:

Абсолютно! В вашей задаче вы хотите отсортировать в зависимости от одного или нескольких атрибутов. Здесь я предполагаю, что атрибут имеет большее значение, чем другой атрибут, поэтому, например, если вы cost сначала упорядочиваете по, и в итоге получаете три одинаковых элемента cost , вы попадаете в сортировку в зависимости от другого менее значимого атрибута: profit например.

Алгоритм:

  1. Сортировка с помощью эффективного алгоритма сортировки — скажем: быстрая сортировка
  2. Извлеките дубликаты (если таковые имеются), затем отсортируйте их, используя другой (менее значимый) атрибут
  3. Объедините оба массива <- это зависит от того, какой вы хотите получить окончательную сортировку.
  4. Печать

Этот алгоритм должен составлять O(2nLogn) => O(nLogn)

введите описание изображения здесь

Комментарии:

1. @AK, большое спасибо за ваше предложение. Это одно из возможных решений проблемы. Однако знаете ли вы о какой-либо технике / подходе, которые можно использовать для ранжирования записей путем одновременного применения нескольких критериев?

2. На самом деле вы не можете заказать что-то в двух кафетериях одновременно, даже будучи человеком, есть критерии, которые в какой-то момент будут стоить больше, чем другие.. Другим решением было бы объединение этих двух кафетериев в одно, скажем: total-criteria = 90% criteria-1 10% criteria-2 затем сортировка на основе total-criteria

3. @AK, я согласен, что это возможное решение этой проблемы. Что ж, проблема в данном случае заключается в том, что если вы хотите выбрать запись, которая удовлетворяет этим критериям и минимизирует функцию полезности, боюсь, вам не избежать грубой силы. Вот почему я пытаюсь выяснить, есть ли альтернативный способ сделать это.