मेरे पास एक सरणी है जो आकार 4, 9, 16 या 25 (इनपुट के अनुसार) है और सरणी में संख्याएं समान हैं लेकिन एक से कम (यदि सरणी का आकार 9 है तो सरणी में सबसे बड़ा तत्व है 8) संख्या से शुरू होती है और मैं सरणी के लिए किसी प्रकार का चेकसम उत्पन्न करने के लिए कुछ एल्गोरिदम करना चाहता हूं ताकि मैं तुलना कर सकूं कि 2 सरणी पूरी सरणी के माध्यम से लूपिंग के बिना बराबर हैं और प्रत्येक तत्व की जांच कर रहे हैं एक एक करके।एक पूर्णांक सरणी के लिए चेकसम?
मुझे इस तरह की जानकारी कहां मिल सकती है? मुझे ऐसा कुछ चाहिए जो जितना संभव हो सके उतना आसान हो। धन्यवाद।
संपादित करें: बस पर स्पष्ट जो मैं चाहता होने के लिए:
सरणी में संख्या -सभी अलग हैं, इसलिए [0,1,1,2] मान्य नहीं है एक दोहराया तत्व है, क्योंकि (1)
संख्या इस मामले की -इस स्थिति है, तो [0,1,2,3] इसे [3,2,1,0]
-इस सरणी संख्या 0 में शामिल होंगे ही नहीं है, इसलिए इसे भी ध्यान में रखा जाना चाहिए।
संपादित करें:
ठीक है मैं यहाँ फ्लेचर के एल्गोरिथ्म को लागू करने की कोशिश की: http://en.wikipedia.org/wiki/Fletcher%27s_checksum#Straightforward
int fletcher(int array[], int size){
int i;
int sum1=0;
int sum2=0;
for(i=0;i<size;i++){
sum1=(sum1+array[i])%255;
sum2=(sum2+sum1)%255;
}
return (sum2 << 8) | sum1;
}
ईमानदार मुझे पता नहीं क्या है, लेकिन दुर्भाग्य से, एल्गोरिथ्म काम नहीं करता है वापसी लाइन करता है होना करने के लिए । सरणी [2,1,3,0] और [1,3,2,0] के लिए मुझे एक ही चेकसम मिलता है।
EDIT2:
यहाँ ठीक एक और एक, एडलर चेकसम http://en.wikipedia.org/wiki/Adler-32#Example_implementation
#define MOD 65521;
unsigned long adler(int array[], int size){
int i;
unsigned long a=1;
unsigned long b=0;
for(i=0;i<size;i++){
a=(a+array[i])%MOD;
b=(b+a)%MOD;
}
return (b <<16) | a;
}
यह भी काम नहीं करता है। Arrays [2,0,3,1] और [1,3,0,2] समान चेकसम उत्पन्न करते हैं। मैं आशा खो रहा हूं, कोई विचार?
एक सरणी में संख्या अद्वितीय नहीं है, मुझे लगता है ?! तो {1,2,2,4} मान्य है? –
> सरणी में संख्याएं समान हैं क्या आप उस पर विस्तार कर सकते हैं? – jaffa
ओह क्षमा करें मैंने उल्लेख नहीं किया! हां संख्याएं अद्वितीय हैं, इसलिए [1,2,2,4] मान्य नहीं है। – MinaHany