Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Списковый алгоритм решения задачи о сумме подмноже, программы на matlab 
:(
    Опции темы
MariaZ
Дата 27.5.2015, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 27.5.2015

Репутация: нет
Всего: нет



Сделала две программы на 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


Это сообщение отредактировал(а) MariaZ - 27.5.2015, 19:28
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0658 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.