>  기사  >  백엔드 개발  >  배열 요소가 주어지면 해당 요소를 합산하여 특정 간격에서 가장 큰 값을 얻습니다.

배열 요소가 주어지면 해당 요소를 합산하여 특정 간격에서 가장 큰 값을 얻습니다.

WBOY
WBOY원래의
2016-09-30 09:37:331152검색

이 질문은 Python으로 구현되었습니다. PHP 코드로 다시 작성하고 싶은데 요소의 반복되지 않는 조합에서 막히네요. 아이디어를 주세요~

즉, N개의 요소가 있고 A+B가 100일 수도 있고, 우리가 찾고 있는 것은 120을 초과하지 않는 결과를 만족하는 최대 조합, 즉 A+C+D 191과 같습니다.

<code class="python"># -*- coding=UTF-8 -*-

import itertools

loop = [509, 838, 924, 650, 604, 793, 564,
        651, 697, 649, 747, 787, 701, 605, 644]

m = 0
m_list = []
for i in range(0, len(loop)):
    # 目的是打乱其排序,找出任意种可能
    rets = list(itertools.combinations(loop, i))
    for ret in rets:
      # 将循环器中的元组求和
        s = sum(ret)
        if s <= 5000 and s > m:
            # 求和值
            m = s
            # 组合的列表
            m_list = ret

# 最大值
print(m)
# 求和的元素
print(m_list)
</code>

답글 내용:

이 질문은 Python으로 구현되었습니다. PHP 코드로 다시 작성하고 싶은데 요소의 반복되지 않는 조합에서 막히네요. 아이디어를 주세요~

즉, N개의 요소가 있고 A+B가 100일 수도 있고, 우리가 찾고 있는 것은 120을 초과하지 않는 결과를 만족하는 최대 조합, 즉 A+C+D 191과 같습니다.

<code class="python"># -*- coding=UTF-8 -*-

import itertools

loop = [509, 838, 924, 650, 604, 793, 564,
        651, 697, 649, 747, 787, 701, 605, 644]

m = 0
m_list = []
for i in range(0, len(loop)):
    # 目的是打乱其排序,找出任意种可能
    rets = list(itertools.combinations(loop, i))
    for ret in rets:
      # 将循环器中的元组求和
        s = sum(ret)
        if s <= 5000 and s > m:
            # 求和值
            m = s
            # 组合的列表
            m_list = ret

# 最大值
print(m)
# 求和的元素
print(m_list)
</code>

알고리즘에 관한 질문이시죠?

<code>rets = list(itertools.combinations(loop, i))</code>

이 작업을 직접적으로 철저하게 수행하는 것은 확실히 적합하지 않습니다. 데이터 양이 많으면 필연적으로 실패합니다. 자세한 설명은

를 참조하세요.

Knapsack 문제는 조합 최적화의 NP-완전 문제입니다. 문제는 다음과 같이 설명할 수 있습니다. 품목 세트가 주어지면 각 품목에는 고유한 무게와 가격이 있습니다. 제한된 총 무게 내에서 품목의 총 가격이 가장 높도록 어떻게 선택합니까? 문제의 이름은 주어진 배낭에 넣을 가장 적절한 품목을 선택하는 방법에서 비롯됩니다.

https://zh.wikipedia.org/wiki...

php에서 itertools의 기능을 원하시면 다음을 읽어보세요

https://github.com/alts/iter.php

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.