Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 2, 2015 19:43:23

alex28746
Зарегистрирован: 2015-01-18
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

жадный алгоритм/алгоритм с растущим градиентом

Помогите пожалуйста расширить класс методом, который будет в двухмерном массиве находить индекс максимального элемента с помощью алгоритма с растущим градиентом. Под максимальным элементом понимаем:

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 (Апрель 2, 2015 19:44:19)

Прикреплённый файлы:
attachment is14_aip_w04_peak2d.py (745 байт)

Офлайн

#2 Апрель 2, 2015 19:45:53

alex28746
Зарегистрирован: 2015-01-18
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

жадный алгоритм/алгоритм с растущим градиентом

графически выглядит так.

Прикреплённый файлы:
attachment прмиер.docx (19,6 KБ)

Офлайн

#3 Апрель 3, 2015 05:29:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

жадный алгоритм/алгоритм с растущим градиентом

Ты правда считаешь, что вставить картинку в документ ворд это лучшее решение?
А питонячий код на питонячем форуме нужно прилеплять в виде файлов, и никак иначе?



Отредактировано FishHook (Апрель 3, 2015 05:30:53)

Офлайн

#4 Апрель 3, 2015 11:53:10

alex28746
Зарегистрирован: 2015-01-18
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

жадный алгоритм/алгоритм с растущим градиентом

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]]
С кодом исправлено

Офлайн

#5 Апрель 3, 2015 19:46:54

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

жадный алгоритм/алгоритм с растущим градиентом

как-то так
описание не очень

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



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Апрель 3, 2015 19:48:26)

Офлайн

#6 Апрель 3, 2015 22:19:51

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

жадный алгоритм/алгоритм с растущим градиентом

ООП ради ООПа это еще хуже чем вообще без ООПа.
Когда не понимаешь сути задачи, ООП не поможет.
Глупо надеяться, что задача чудесным образом решиться сама собой, лишь только мы придумаем класс.



Офлайн

#7 Апрель 3, 2015 22:24:20

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

жадный алгоритм/алгоритм с растущим градиентом

FishHook
Глупо надеяться, что задача чудесным образом решиться сама собой, лишь только мы придумаем класс.
ну я не думаю что здесь имеется какая-то задача
прост студенту впадло подумать или т.п.



————————————————
-*- Simple is better than complex -*-

Офлайн

#8 Апрель 3, 2015 22:29:43

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

жадный алгоритм/алгоритм с растущим градиентом

terabayt
прост студенту впадло подумать или т.п.
Ну так и не давайте школоте готовых решений!
Подсказывать, направлять, мозги вкручивать - да.
Решать за студента - нет.



Офлайн

#9 Апрель 3, 2015 22:36:34

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

жадный алгоритм/алгоритм с растущим градиентом

FishHook
Ну так и не давайте школоте готовых решений!
ну вот сидишь 2-3 часа не отходя над какой-то задачей, башка уже не варит
зашел на форум и под чаек отдохнул. и мне хорошо, и “школота” радуется ))
а то что Вы будете им “мозги вкручивать” они все равно не поймут



————————————————
-*- Simple is better than complex -*-

Офлайн

#10 Апрель 3, 2015 22:49:08

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

жадный алгоритм/алгоритм с растущим градиентом

terabayt
а то что Вы будете им “мозги вкручивать” они все равно не поймут
Ну так и мальчишка, который за гаражами курит, не поймёт за что ты ему подзатыльника врезал.
Тебе от твоего сына что надо: чтобы он математику знал или чтоб пятёрки получал?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version