Найти - Пользователи
Полная версия: жадный алгоритм/алгоритм с растущим градиентом
Начало » Центр помощи » жадный алгоритм/алгоритм с растущим градиентом
1 2 3
alex28746
Помогите пожалуйста расширить класс методом, который будет в двухмерном массиве находить индекс максимального элемента с помощью алгоритма с растущим градиентом. Под максимальным элементом понимаем:
L[i][j]  L[i-1][j]  # больше от элемента над собой
L[i][j]  L[i+1][j]  # больше от элемента под собой
L[i][j]  L[i][j+1]  #больше от элемента с права 
L[i][j]  L[i][j-1]  ^ # больше от элемента с лева 
Стартуем с индекса (1,1). Очередность алгоритма должна быть право - низ - лево - верх
Прикрепляю еще графический пример как это должно выглядеть и сам класс.
alex28746
графически выглядит так.
FishHook
Ты правда считаешь, что вставить картинку в документ ворд это лучшее решение?
А питонячий код на питонячем форуме нужно прилеплять в виде файлов, и никак иначе?

alex28746
class Peak:
    """..."""
    def __init__(self, L):
        self.L = L[:]
        self.n = len(self.L)
        self.m = len(self.L[0])
    def get_dim(self):
        return (self.n, self.m)
    def get_val(self, loc):
        return self.L[loc[0]][loc[1]]
    def next_element(self, loc):
        if loc[1] < self.m - 1:
            return loc[0], loc[1] + 1
        else:
            if loc[0] < self.n - 1:
                return loc[0] + 1, 0
            else:
                return -1
        
    def greedy_ascent(self, start=(0,0)):
        """..."""
        pass
if __name__ == "__main__":
    A = [[1,   2,  3,  4],
         [14, 15, 16,  5],
         [13, 18, 17,  6],
         [12,  9,  3,  7],
         [11, 10,  9,  8]]
С кодом исправлено
terabayt
как-то так
описание не очень
class Peak:
    """..."""
    def __init__(self, L):
        self.L = L[:]
        self.n = len(self.L)
        self.m = len(self.L[0])
        self.OL = []
    def get_dim(self):
        return (self.n, self.m)
    def get_val(self, loc):
        return self.L[loc[0]][loc[1]]
    def next_element(self, loc):
        if loc[1] < self.m - 1:
            return loc[0], loc[1] + 1
        else:
            if loc[0] < self.n - 1:
                return loc[0] + 1, 0
            else:
                return -1
    def get_val(self, x, y, p=(1, 0)):
        for i, j in [(x + p[0], y + p[1])] + [(x+1, y), (x, y+1), (x, y-1), (x-1, y)]:
            if i < 0 or j < 0 or i >= self.m or j >= self.n or (i, j) in self.OL:
                continue
            if self.L[j][i] >= self.L[y][x]:
                self.OL.append((i, j))
                return (i, j, (i-x, j-y))
        return (x, y, [])
    def greedy_ascent(self, start=(0,0)):
        x, y, p = self.get_val(*start)
        while p:
            x, y, p = self.get_val(x, y, p)
        return x, y
FishHook
ООП ради ООПа это еще хуже чем вообще без ООПа.
Когда не понимаешь сути задачи, ООП не поможет.
Глупо надеяться, что задача чудесным образом решиться сама собой, лишь только мы придумаем класс.
terabayt
FishHook
Глупо надеяться, что задача чудесным образом решиться сама собой, лишь только мы придумаем класс.
ну я не думаю что здесь имеется какая-то задача
прост студенту впадло подумать или т.п.
FishHook
terabayt
прост студенту впадло подумать или т.п.
Ну так и не давайте школоте готовых решений!
Подсказывать, направлять, мозги вкручивать - да.
Решать за студента - нет.
terabayt
FishHook
Ну так и не давайте школоте готовых решений!
ну вот сидишь 2-3 часа не отходя над какой-то задачей, башка уже не варит
зашел на форум и под чаек отдохнул. и мне хорошо, и “школота” радуется ))
а то что Вы будете им “мозги вкручивать” они все равно не поймут
FishHook
terabayt
а то что Вы будете им “мозги вкручивать” они все равно не поймут
Ну так и мальчишка, который за гаражами курит, не поймёт за что ты ему подзатыльника врезал.
Тебе от твоего сына что надо: чтобы он математику знал или чтоб пятёрки получал?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB