Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2015, 18:28   #1
Maria_Z
Новичок
Джуниор
 
Регистрация: 27.05.2015
Сообщений: 2
По умолчанию Списковый алгоритм решения задачи о сумме подмножества

Сделала две программы на matlab, вычисляющие сумму подмножества. На входе - множество и желаемая сумма, на выходе - сумма подмножества, наиболее близкая к заданной.
Первая программа вычисляет ближайшую слева сумму любого подмножества, вторая - вычисляет ближайшую слева сумму, корректна для 4х и менее элементов суммы, зато выдает суммируемые элементы подмножества.
Прошу оценить, указать на недоработки
Первая:
Код:
%%списковый метод 
clc
clear
SpisokN=input('Введите массив: ')
s=input('Введите s: ')
n=length(SpisokN)
 
SpisokS(1)=SpisokN(1)
 
for i=2:n
    r=length(SpisokS)
    SpisokS(r+1)=SpisokN(i)
    h=r+1
    h=length(SpisokS)
    for j=1:r 
        m=length(SpisokS)
        SpisokS(m+1)=SpisokS(h)+SpisokS(j)
    end
end
 
SpisokSunique=unique(SpisokS)
n=length(SpisokSunique)
 
for i=1:n
    if SpisokSunique(i)<=s
        SpisokSlast(i) = SpisokSunique(i)
    end
end
 
k=length(SpisokSlast)
s1=SpisokSlast(k)
Вторая:
Код:
%%списковый метод 
clc
clear
SpisokN=input('Введите массив: ')
s=input('Введите s: ')
% SpisokN=[10 15 30 15]
% s=30
n=length(SpisokN)
for i=1:n
massN(i,1)=SpisokN(i)
massN(i,2)=i
end
 
SpisokS(1)=SpisokN(1)
massS(1,1)=massN(1,1)
massS(1,2)=massN(1,2)
 
for i=2:n
    r=length(SpisokS)
    SpisokS(r+1)=SpisokN(i)
    massS(r+1,1)=massN(i,1)
    massS(r+1,2)=massN(i,2)    
    h=r+1
    h=length(SpisokS)
    for j=1:r 
        m=length(SpisokS)
        SpisokS(m+1)=SpisokS(h)+SpisokS(j)
        massS(m+1,1)=SpisokS(h)+SpisokS(j)
        massS(m+1,2)=0
        massS(m+1,3)=j
        massS(m+1,4)=h
    end
end
 
SpisokSunique=unique(SpisokS)
n=length(SpisokSunique)
 
for i=1:n
    if SpisokSunique(i)<=s
        SpisokSlast(i) = SpisokSunique(i)
    end
end
 
k=length(SpisokSlast)
s1=SpisokSlast(k)
 
for i=1:m+1 
   if massS(i,1)==s1
       mass1(i,1)=massS(i,1)
       mass1(i,2)=massS(i,2)
       mass1(i,3)=massS(i,3)
       mass1(i,4)=massS(i,4)
   end
end
 
mass2s=0
m=size(mass1,1)
for i=1:m
if mass1(i,1)~=0
    mass2(mass2s+1,1)=mass1(i,1)
    mass2(mass2s+1,2)=mass1(i,2)
    mass2(mass2s+1,3)=mass1(i,3)
    mass2(mass2s+1,4)=mass1(i,4)
     mass2s=size(mass2,1)
end
end
 
 
for i=1:mass2s 
    disp('Вариант подмножества:') 
    if mass2(i,2)~=0%
        s1=SpisokN(mass2(i,2))%
    else
        if massS(mass2(i,3),2)~=0%
           s2=SpisokN(massS(mass2(i,3),2))%
        else
            if massS(massS(mass2(i,3),3),2)~=0%
                s3=SpisokN(massS(massS(mass2(i,3),3),2))%
            else 
                s4=SpisokN(massS(massS(massS(mass2(i,3),3),3),2))%
                s4=SpisokN(massS(massS(massS(mass2(i,3),3),4),2))%
            end
            if massS(massS(mass2(i,3),4),2)~=0%
                s3=SpisokN(massS(massS(mass2(i,3),4),2))%
            else 
                s4=SpisokN(massS(massS(massS(mass2(i,3),4),3),2))%
                s4=SpisokN(massS(massS(massS(mass2(i,3),4),4),2))%
            end
        end
        if massS(mass2(i,4),2)~=0%
           s2=SpisokN(massS(mass2(i,4),2))%
        else
            if massS(massS(mass2(i,4),3),2)~=0%
                s3=SpisokN(massS(massS(mass2(i,4),3),2))%
            else 
                s4=SpisokN(massS(massS(massS(mass2(i,4),3),3),2))%
                s4=SpisokN(massS(massS(massS(mass2(i,4),3),4),2))%
            end
            if massS(massS(mass2(i,4),4),2)~=0%
                s3=SpisokN(massS(massS(mass2(i,4),4),2))%
            else 
                s4=SpisokN(massS(massS(massS(mass2(i,4),4),3),2))%
                s4=SpisokN(massS(massS(massS(mass2(i,4),4),4),2))%
            end
        end
    end
   
end

Последний раз редактировалось Аватар; 27.05.2015 в 18:31.
Maria_Z вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать алгоритм решения задачи. dmitriy20104 Паскаль, Turbo Pascal, PascalABC.NET 2 08.08.2012 09:26
Алгоритм решения задачи Amet13 Помощь студентам 1 21.04.2012 13:16
Каков алгоритм решения задачи? NeoMurderer Общие вопросы C/C++ 3 16.03.2012 21:45
Алгоритм решения задачи snpccvs Помощь студентам 8 13.02.2012 22:50
Нужен алгоритм решения задачи!!!!!! Катя21 Помощь студентам 2 03.01.2012 13:14