" मैप और रिड्यूस " एल्गोरिदम के उपयोग से कौन से परिदृश्य वारंट होंगे ?
क्या इस एल्गोरिथ्म का .NET कार्यान्वयन है?
" मैप और रिड्यूस " एल्गोरिदम के उपयोग से कौन से परिदृश्य वारंट होंगे ?
क्या इस एल्गोरिथ्म का .NET कार्यान्वयन है?
जवाबों:
मैप और रिड्यूस के लाइनक समतुल्य: यदि आप लाइनक के लिए पर्याप्त भाग्यशाली हैं तो आपको अपना नक्शा लिखने और कार्यों को कम करने की आवश्यकता नहीं है। C # 3.5 और Linq के पास पहले से ही अलग-अलग नामों के तहत है।
नक्शा है Select
:
Enumerable.Range(1, 10).Select(x => x + 2);
कम करें Aggregate
:
Enumerable.Range(1, 10).Aggregate(0, (acc, x) => acc + x);
फ़िल्टर है Where
:
Enumerable.Range(1, 10).Where(x => x % 2 == 0);
Reduce
बजाय बस फोन नहीं करते हैं Aggregate
... एमएस सिर्फ
समस्या की कक्षाएं जो एक मानचित्रण शैली समाधान के लिए अच्छी तरह से अनुकूल हैं, एकत्रीकरण की समस्याएं हैं। डेटासेट से डेटा निकालने का। C # में, कोई इस शैली में प्रोग्राम करने के लिए LINQ का लाभ उठा सकता है।
निम्नलिखित लेख से: http://codecube.net/2009/02/02/mapreduce-in-c-use-linq/
GroupBy विधि मानचित्र के रूप में कार्य कर रही है, जबकि चयन विधि मध्यवर्ती परिणामों को कम करने का काम परिणामों की अंतिम सूची में करती है।
var wordOccurrences = words
.GroupBy(w => w)
.Select(intermediate => new
{
Word = intermediate.Key,
Frequency = intermediate.Sum(w => 1)
})
.Where(w => w.Frequency > 10)
.OrderBy(w => w.Frequency);
वितरित भाग के लिए, आप DryadLINQ: http://research.microsoft.com/en-us/projects/dryadlinq/default.aspx देख सकते हैं ।
चूँकि मैं कभी याद नहीं कर सकता कि LINQ इसे कॉल करता है Where
, Select
और Aggregate
इसके बजाय Filter
, Map
और Reduce
इसलिए मैंने कुछ विस्तार विधियाँ बनाईं जिनका आप उपयोग कर सकते हैं:
IEnumerable<string> myStrings = new List<string>() { "1", "2", "3", "4", "5" };
IEnumerable<int> convertedToInts = myStrings.Map(s => int.Parse(s));
IEnumerable<int> filteredInts = convertedToInts.Filter(i => i <= 3); // Keep 1,2,3
int sumOfAllInts = filteredInts.Reduce((sum, i) => sum + i); // Sum up all ints
Assert.Equal(6, sumOfAllInts); // 1+2+3 is 6
यहाँ 3 विधियाँ हैं ( https://github.com/cs-util-com/cscore/blob/master/CsCore/PlainNetClassLib/src/Plugins/CsCore/com/csilil/collections/IEnumerableExtensions.cs ):
public static IEnumerable<R> Map<T, R>(this IEnumerable<T> self, Func<T, R> selector) {
return self.Select(selector);
}
public static T Reduce<T>(this IEnumerable<T> self, Func<T, T, T> func) {
return self.Aggregate(func);
}
public static IEnumerable<T> Filter<T>(this IEnumerable<T> self, Func<T, bool> predicate) {
return self.Where(predicate);
}
Https://github.com/cs-util-com/cscore#ienumerable-extensions से कुछ और विवरण :