2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Алгоритм нахождения элемента в двумерном массиве.
Сообщение13.03.2010, 19:21 


14/12/09
306
Сформировать произвольно двумерный массив R(8,3) Найти и вывести значение и индексы элемента, являющегося одновременно наименьшим в своей строке и наибольшим в своем столбце. При отсутствии такого элемента вывести сообщение.

Подскажите пожалуйста, как реализовать алгоритм того, что выделено жирным шрифтом. Или же если кто помнит Визуал Бейсик, то напишите(если есть время) код.

Очень жду ответа)

 Профиль  
                  
 
 Re: Алгоритм нахождения элемента в двумерном массиве.
Сообщение19.03.2010, 18:57 
Заслуженный участник


26/07/09
1559
Алматы
2Mikle1990
Цитата:
Найти и вывести значение и индексы элемента, являющегося одновременно наименьшим в своей строке и наибольшим в своем столбце.

А почему-бы для начала не попробовать "лобовое" решение? Проходимся по всем столбцам -> В каждом столбце находим наибольший элемент -> Проверяем, является ли каждый такой элемент наименьшим в соответствующей ему строке.

Можно ещё так сформулировать возможное решение: найти пересечение двух множеств наибольших элементов всех стобцов и наименьших элементов всех строк.

Достаточно умень искать наибольшее/наименьшее значение в массиве.

Непонятно, почему в условии элемент употреблен в единственном числе, их же вроде-бы много может быть таких...

 Профиль  
                  
 
 Re: Алгоритм нахождения элемента в двумерном массиве.
Сообщение19.03.2010, 20:56 


14/12/09
306
Много может быть седловых точек, а это, как оказалось, не они.
Я сделал так:
Код:
    Sub Poisk(ByVal a(,) As Single, ByRef LB As ListBox)
        Dim m As Integer
        Dim n As Integer
        Dim sb As Integer 'столбец
        Dim z1 As String = ""
        Dim min As Single
        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        Dim l As Integer
        Dim zs As Integer
        Dim zk As Integer
        m = a.GetLength(0) - 1 'строки
        n = a.GetLength(1) - 1 'столбцы

        For i = 0 To m
            zs = 0
            zk = 0
            sb = 0
            min = a(i, sb)
            For j = 1 To n
                If a(i, j) < min Then
                    min = a(i, j)
                    sb = j
                End If
            Next

            For k = 0 To n
                If a(i, sb) = a(i, k) Then
                    zs = zs + 1
                End If
            Next

            For l = 0 To m
                If a(i, sb) <= a(l, sb) Then
                    zk = zk + 1
                End If
            Next

            'Если zs > 1, то найденный минимальный элемент совпадает(по значению) с другим элементом в строке,
            'и, следовательно, минимальный элемент уже не явл-ся минимальным.
            'Если zk > 1, то найденный элемент меньше какого-либо элемента из его столбца.

            If zs = 1 And zk = 1 Then
                z1 = Space(1) + CStr("r(") + Format(i) + CStr(",") + Format(sb) + CStr(")=") + Format(a(i, sb), "000.000")
                Exit For
            Else
                If i = m Then
                    MsgBox("Искомый элемент не найден!", , "Программа сообщает")
                End If
                z1 = "не найден"
            End If

        Next
        LB.Items.Clear()
        LB.Items.Add(z1)


Обратите на этот код внимание. Так как, вроде бы, я написал весьма специфичный алгоритм) Работает на все 100%.

Кроме того, я в программе сделал так, чтоб можно было и самому значения элементов вводить или же отметить галочку "Задать всем элементам массива случайные значения". Хотел даже сделать с диапазон значений, но в инсте будут ругаться, т.к. даже инициатива там может быть наказана)

 Профиль  
                  
 
 Re: Алгоритм нахождения элемента в двумерном массиве.
Сообщение21.03.2010, 00:27 
Заслуженный участник


26/07/09
1559
Алматы
2Mikle1990
Цитата:
Много может быть седловых точек, а это, как оказалось, не они.

А, опять тонкое различие между максимальным/минимальным и наибольшим/наименьшим. Понимаю. :)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group