स्टर्न-Brocot पेड़ भिन्न की एक द्विआधारी पेड़ जहां प्रत्येक अंश अंश और यह पड़ोसी ऊपर के स्तर में दो भिन्न के हरों जोड़कर हासिल कर ली है।
यह के साथ शुरू से उत्पन्न होता है 0/1
और 1/0
"के रूप में अंत बिंदु अंशों", और वहाँ से, इसलिए की तरह एक साथ अंशों और उन अंशों का हरों जोड़ने, द्वारा भिन्न के प्रत्येक लगातार जोड़ी के बीच एक अंश रखकर पुनरावृत्ति:
0. 0/1 1/0
1. 0/1 1/1 1/0
2. 0/1 1/2 1/1 2/1 1/0
3. 0/1 1/3 1/2 2/3 1/1 3/2 2/1 3/1 1/0
4. 0/1 1/4 1/3 2/5 1/2 3/5 2/3 3/4 1/1 4/3 3/2 5/3 2/1 5/2 3/1 4/1 1/0
स्टर्न-Brocot पेड़ (से प्रत्येक चरण में n
वें यात्रा), देखते हैं 2^n + 1
अनुक्रम में तत्व है, जो करने के लिए हम से एक अंश कारण बताना कर सकते हैं 0/2^n
करने के लिए 2^n/2^n
। प्रत्येक नया पुनरावृत्ति बस लगातार अंशों के प्रत्येक जोड़े के बीच एक अंश "आधा" सम्मिलित करता है।
यह स्टर्न-ब्रोकोट पेड़ को सकारात्मक तर्कसंगत संख्याओं और 0 और 1 के बीच द्विआधारी अंशों के बीच एक-से-एक मानचित्रण बनाता है, जिससे यह भी प्रमाण मिलता है कि दोनों सेटों में समान हृदयता है।
आपका कार्य एक प्रोग्राम या फ़ंक्शन लिखना है, जो सबसे कम शब्दों में एक सकारात्मक तर्कसंगत संख्या के अंश और हर को देखते हुए, बाइनरी अंश को निर्धारित करता है जो स्टर्न-ब्रोकोट पेड़ में उस अंश की स्थिति से मेल खाती है।
इनपुट और आउटपुट के उदाहरण नीचे दिए गए हैं:
2/3 -> 3/8 (4th number in iteration 3)
4/7 -> 9/32 (between 1/2 and 3/5 in the chart above)
1/1 -> 1/2 (middle number in the first iteration)
जिन इनपुटों का आपको समर्थन करने की आवश्यकता नहीं है, वे संदर्भ के लिए शामिल हैं:
0/1 -> 0/1 (0/1 is considered the left number)
1/0 -> 1/1 (1/0 is considered the rightmost number)
इस लक्ष्य को प्राप्त करने के लिए किसी भी भाषा में सबसे छोटा कार्यक्रम जीत जाता है।
1/1 => 1
, 1/2 => 2
, 2/1 => 3
, 1/3 => 4
, आदि)। यदि नोड के लिए इतनी संख्या उत्पन्न होती है n
, तो 2^lg n
(बाइनरी लॉग) सबसे अधिक बिट सेट है n
, और वांछित बाइनरी अंश है (2*(n - 2^lg n) + 1) / 2^(lg n + 1)
। (गेट-उच्चतम-सेट-बिट के साथ एक निर्देश सेट में एक कोडांतरक समाधान का प्रयास करने वाला कोई भी व्यक्ति शायद इस दृष्टिकोण का उपयोग करना चाहेगा)।