alekseyHunter
@alekseyHunter
Android developer

Как написать алгоритм по определению шансов абитуриента поступить на специальность?

Добрый день.

Решил добавить в приложение универа информацию о шансе поступления на специальность для абитуриентов.
В БД есть следующие данные по абитуриентам: приоритеты специальностей (1,2,3), тип документа (подлинник/копия).

Формулировка задачи: Допустим, что всего подали заявлений N человек по M специальностям. Абитуриент хочет узнать шанс поступления на 3 специальности. Пусть количество мест на одну специальность равно K.

Первый этап
Я планировал это сделать в виде рекурсии.
На вход подается информация о первом абитуриенте в списке (топ-1). Если выбранная специальность - его первый приоритет или тип документа - копия, выходим из рекурсии. Если второй/третий, идем в эти специальности и начинаем алгоритм с начала.
Минус этого алгоритма в том, что на выходе получаем огромный список/дерево, в котором в лучшем случае мы обойдем только 3 из M специальностей и количество человек на каждой специальности будет 2*K. Но минус даже не в этом дереве, а в том, что может случиться переполнение стека, потому что в худшем случае это будет M специальностей и N человек.

Второй этап
После составления этого списка требуется определить шанс поступления.
Я придумал следующую формулу:
Шанс = 100 -(Количество мест в рейтинге * 0,6 - Текущее место в рейтинге) * (Количество мест в рейтинге / 100)
Здесь еще нужно учитывать тип документа с отрицательным весовым коэффициентом, но пока не придумал с каким.

Третий этап
После определения шанса требуется пересчитать шансы всех абитуриентов, заменив у всех, у кого шанс поступления ниже X процентов, специальности (с 1 на 2, с 2 на 3). Есть шанс больше X процентов, прекратить пересчет шанса текущего абитуриента.
Тут, я предполагаю, будет максимум 3 итерации.

Вопросы:
  1. Можно ли использовать более простое решение, нежели рекурсия?
  2. Корректна ли формула по расчету шанса на поступление?
  • Вопрос задан
  • 1010 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dmshar
Так как вы написали - понять вообще ничего нельзя. Если хотите критики алгоритма - до дайте алгоритм, а не какой-то отрывочный набор слов.

По первому вопросу. Во-первых, причем тут обход графа? Каким он боком к этой задаче? Во-вторых, причем тут рекурсия? В-третьих - так информация о "первом абитуриенте в списке" или "топ-1" (т.е. как минимум втором?). Что значит "выбранная специальность" - откуда она взялась? "выходим из рекурсии" - и что при этом? Каков результат "захода в рекурсию"? "начинаем алгоритм с начала" - это как? Почему при "копии" надо выходить из рекурсии? В общем - набор каких-то несвязанных обрывков фраз, алгоритмом который назвать невозможно. А значит, и критиковать нечего.
По второму вопросу. Как может быть корректна формула, если ее коэффициенты (да и сама структура) взяты из головы и ничем не подкреплены? Что такое "тип документа с отрицательным весовым коэффициентом"?? Справка о судимости, что-ли? Но даже если вы "придумали" формулу, какое она имеет отношение к реальным шансам человека?

Хотите анализировать (или что-бы вам помогли анализировать) ваши алгоритмы - делайте это способом, принятым в сообществе специалистов по ИТ, а не бабушек на скамейке у ворот. Но для этого надо разумеется, этому предварительно обучиться.

P.S. Кстати, итерация и рекурсия - это РАЗНЫЕ формы реализации алгоритмов. А то у вас в заглавии одно, в вопросе - другое.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы