Given an infinite positive integer array or say a stream of positive integers, find out the first five numbers whose sum is twenty.
0-1 अनंत पूर्णांक सरणी पर Knapsack?
समस्या बयान पढ़कर, यह पहली 0-1 Knapsack
समस्या लगती है, लेकिन मैं उलझन में हूँ कि 0-1 Knapsack algo
पूर्णांकों की एक धारा पर इस्तेमाल किया जा सकता है। मान लें कि मैं उपरोक्त समस्या के लिए एक पुनरावर्ती कार्यक्रम लिखता हूं।
int knapsack(int sum, int count, int idx)
{
if (sum == 0 && count == 0)
return 1;
if ((sum == 0 && count != 0) || (sum != 0 && count == 0))
return 0;
if (arr[idx] > 20) //element cann't be included.
return knapsack(sum, count idx + 1);
return max(knapsack(sum, count, idx +1), knapsack(sum - arr[idx], count -1, idx + 1));
}
अब जब ऊपर समारोह एक अनंत सरणी पर फोन करेगा, max
समारोह में पहली कॉल अर्थात knapsack(sum, count, idx +1)
वापस कभी नहीं होगा के रूप में यह वर्तमान तत्व अनदेखी पर रखेंगे। भले ही हम max
फ़ंक्शन में कॉल का ऑर्डर बदल दें, फिर भी संभावना है कि पहली कॉल कभी वापस नहीं आएगी। क्या ऐसे परिदृश्यों में knapsack
अलगो लागू करने का कोई तरीका है?
आप पहले पांच * लगातार * संख्या जिसका योग 20 है के लिए देख रहे हैं? – Davidann
यह knapsack समस्या से कठिन है। हमारे पास अतिरिक्त बाधा है: हमें उन संख्याओं का सबसे पुराना संयोजन मिलना चाहिए जिनकी राशि बीस है। दूसरे शब्दों में, हमें कई knapsacks पर विचार करना चाहिए: पहले 5 तत्व, फिर पहले 6, फिर पहले 7, आदि – cheeken
@ डेविड: नहीं ... ऐसी कोई शर्त नहीं है ... –