** Привет всем, У меня есть вопрос о возврате отношения /Big O обозначение. Мне было задано задание на домашнее задание, в котором я попросил передать ноту Big O некоторых из моих старых кодов/алгоритмов, которые я придумал для предыдущих заданий домашней работы. К сожалению, я еще не прошел курс по конечной математике; так что это ново для меня. Мне удалось выяснить три из четырех алгоритмов, которые я использовал. Однако я придерживаюсь четвертых алгоритмов. Этот метод является рекурсивным методом и кодируется на Java. Я действительно потратил часы, пытаясь понять это, и я смотрел множество видеороликов и читал множество статей по нотации Big O, но, к сожалению, не смог их получить. Любая помощь будет отличной !!! Вот код:
ArrayList<FacebookUser> getRecommendations(FacebookUser e) {
FacebookUser rootUser = userCallForList.get(0);
if(rootUser.getFriends().isEmpty() || e.getFriends().isEmpty()){
return returnHash();
}
for(FacebookUser hold : e.getFriends()){
if( !hold.equals(rootUser) && addHash(hold)){
getRecommendations(hold);
}
}
return returnHash();
}
Примечание. О коде: метод принимает FacebookUser в качестве аргумента. Метод возвращает ArrayList, который содержит всех друзей FacebookUser, которые передаются ему, а также результат вызова одного метода getRecommendations для всех этих друзей FacebookUsers. Он не добавляет кого-либо в список рекомендаций, если они уже находятся на нем, и не добавляет к нему FacebookUser (EI rootUser); Так как это может привести к бесконечному циклу. Я использую HashSet как свою коллекцию, а затем я должен изменить ее обратно на ArrayList.
Если я правильно понимаю ваш код, это не традиционное повторение, потому что n (размер ввода) изменяется на каждый рекурсивный вызов, но не обязательно уменьшается, т.е. Он не является алгоритмом разделения и покоя.
Это утверждение
for(FacebookUser hold : e.getFriends()){
if( !hold.equals(rootUser) && addHash(hold)){
getRecommendations(hold);
}
}
вызывает getRecommendations() для неуказанного количества друзей, которое затем вызывает его для каждого друга друзей. Мне кажется, что этот метод будет вызываться для каждого друга в сети или на каждом узле, если вы думаете об этом как о проблеме с графом. Это означает для меня время работы O (k), где k = количество уникальных узлов, доступных от начального пользователя любым количеством ребер.
returnHash()
выполняющего преобразование из хэш-набора в список массивов при каждом вызове. В зависимости от того, как именно выполняется это преобразование, вы можете говорить O (k ^ 2).