Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Есть двумерный массив из нулей и единиц., Найти минимальное количество строк, которые бы образовали строку только из единиц.
 
сравниваю первую строку со всеми строками.
Но скорее это не правильно, т.к. нужно найти минимально количество строк удовлетворяющих условию.
Смысл собрать строку из одних единиц, взяв минимальное число строк из массива.

Накатал такой цикл, может подскажите что-нить побыстрее(поумнее) чем это:

Код
Do
k = k + 1 
max = 0 'введем переменную для учета максимального количества закрытия единицами нулей
For i = 1 To UBound(massiv1, 1)
    Perekritie = 0
        For j = 1 To UBound(massiv1, 1)
                If PoleSovpaden(1, j) = 0And PoleSovpaden(i, j) = 1 Then Perekritie = Perekritie + 1
        Next j
        PerekritieM(i) = Perekritie 'запоминаем сумму перекрытий i-ой строки
        If PerekritieM(i) > max Then
           max = PerekritieM(i)
           n = i ' переменная для номера строки имеющего максимальное совпадение с первой строкой.
        If max = Pred_Max Then Exit For 'если достигнуто предыдущее число совпадений то нет смысла дальше вести цикл
        Else
        End If
Next i
 Pred_Max = max 'запоминание предыдущего максимального числа совпадений
 If max = 0 Then Exit Do ' - сформировалась строка из единиц, либо больше нечем заменять..
 ReDim Preserve NStroki(k)
 NStroki(k) = n

MsgBox "колво совпадений: " & max & "  Номер строки: " & n & "  Строка по счету - " & k
zamena = 0 'количество замен будет равно количеству максимальных перекрытий.....,
For i = 1 To UBound(massiv1, 1)
    If PoleSovpaden(1, i) = 0 And PoleSovpaden(n, i) = 1 Then
    PoleSovpaden(1, i) = 1 ' меняем НУЛИ на ЕДИНИЦЫ в ИСХОДНИКЕ, меняем ИСХОДНИК до тех пор пока он не будет весь из ЕДИНИЦ
    zamena = zamena + 1  ' достигнуто  (число max), то нет смысла дальше продолжать цикл
    End If
    If zamena = max Then Exit For
Next i
Loop

Заранее спасибо.
Сравнить числовой массив сам с собой., и получить на выходе "массив совпадений"
 
3 2 1 1 2 3 3 3 1 1
2 3 3 1 2 3 3 3 1 1
1 2 1 1 1 2 3 3 1 1
2 3 1 3 1 2 3 3 1 1
3 2 3 3 1 2 3 3 1 1
1 2 3 3 1 3 2 3 1 1
3 3 3 3 3 3 2 3 1 1
3 3 1 1 3 2 2 3 1 1
3 2 1 1 2 3 1 1 1 1
1 3 3 3 2 3 1 1 1 1
3 3 3 1 1 2 1 1 1 1
..........................................................................

Есть массив чисел. Надо его сравнить самим с собой построчно, каждую строку с каждой, и на основании сравнения получить массив сравнений, он всегда разный в зависимости от категории совпадения.

Собственно вопрос. Есть ли более прогрессивное(быстрое) сравнение ??
Бывает что массив состоит из 10 000 строк, и сравнивает он таким образом каждую строку с каждой минут 6.

P.S. Пример из 250 строк, т.к. больше в 2003 не лезет. Выгрузка в общем в итоге и не нужна, так для наглядности.
пример в файле.
Сбор однотипной информации с разных листов одной книги.
 
Здравствуйте.
Помогите с вопросом. Не знаю стоит ли выкладывать ексель для примера. Попробую так объяснить.
Есть в одной книге много листов. В каждом листе однотипный наряд на работы. В каждом наряде на работы встречаются фамилии рабочего и его заработанная плата.
Сижу полдня, вспоминаю VBA, но как говорил наш препод "период полураспада знаний 2 недели, 2 недели не позанимался - половину забыл". Года три назад думаю сделал бы сам, не спрашивая никого, но к сожалению своему отупел.
Хочу макросом собрать в 1 массив все листы.

Код
Dim sh As Worksheet
Dim mas1() As Variant 
Dim mas2() As Variant 
For Each sh In ThisWorkbook.Worksheets
 j=1   
      For i = 1 To 130 '130 навскидку потому что не знаю до конца сколько у меня рабочих на листе.
        p = sh.Cells(i + 13, 6) - фамилии начинаются с 14 строки, и присутствую НЕ В КАЖДОЙ строке.
   If p = 0 Or p = "" Or  Then  GoTo 10 'ускорить таким образом хотел, чтоб сразу на след клетку если пусто
      Else

       mas2(j, 1) = sh.Cells(i + 13, 6)'формируется массив с фамилией... 
            mas2(j, 2) = sh.Cells(i + 13, 9)' ..и суммой
End If
o = o + 1
10    Next i


дальше вот встрял, и первое встрял потому что массиве mas2 уже могут быть 2 и более строк с одной и той же фамилией, т.к. в наряде она может быть в нескольких местах. И надо бы сразу после обработки первого листа сравнить массив сам с собой и если есть повторяющиеся строки в первом измерении массива, то объединить их в одну и сложить второе их измерение(сумму).
Подскажите что-нибудь по этому поводу. Я так вижу создать какой-то массивИтог, в который бы я складывал резалты после каждого обработанного листа. Но что-то ничего не выходит. Заранее спс.
Страницы: 1
Наверх