এক্সেল / শেয়ারডস্ট্রিংয়ের জন্য অ্যালগরিদম সাজান


10

এক্সেলে, তারা সংখ্যার ম্যাপিংয়ের সাথে স্ট্রিংগুলি 'সংক্ষেপণ' করে (যদিও আমি নিশ্চিত নই যে এই ক্ষেত্রে শব্দ সংকোচনের শব্দটি সঠিক কিনা) এখানে নীচে দেখানো একটি উদাহরণ:

এখানে চিত্র বর্ণনা লিখুন

যদিও এটি সামগ্রিক ফাইলসাইজ এবং মেমরির পদচিহ্নগুলি হ্রাস করতে সহায়তা করে, তবে এক্সেল কীভাবে স্ট্রিং ফিল্ডে বাছাই করে? প্রতিটি একক স্ট্রিংয়ের জন্য কীভাবে লুকিং ম্যাপিংয়ের প্রয়োজন ছিল: এবং যদি তা হয় তবে স্ট্রিংয়ের ক্ষেত্রের ক্ষেত্রে বাছাই করে / চালিয়ে দেওয়ার ব্যয়টি খুব বেশি বাড়তে পারে না (যদি 1 এম মান থাকে তবে 1 এম কী লুকআপগুলি না হত) নগণ্য). এ সম্পর্কে দুটি প্রশ্ন:

  1. এক্সেল অ্যাপ্লিকেশনটিতেই ভাগ করা স্ট্রিংগুলি ব্যবহার করা হয়, বা কেবল ডেটা সংরক্ষণ করার সময়?
  2. মাঠে বাছাই করার জন্য উদাহরণ অ্যালগরিদম কী হবে? যে কোনও ভাষা ভাল (সি, সি #, সি ++, অজগর)।

আমি এটিরও একটি বুদ্ধিমান উত্তরে আগ্রহী হব। আমি কেবল অনুমান করতে পারি এটির সাথে মেমরি ক্যাশে করার কিছু আছে তবে সহজেই ভুল হতে পারে।
পিটারটি

আমি মনে করি যে এই ম্যাপিংটি কোনও দস্তাবেজের শারীরিক এক্সএমএল উপস্থাপনায় বিদ্যমান তা এক্সেল অভ্যন্তরীণভাবে রানটাইমের সময় ডেটা উপস্থাপন করার ক্ষেত্রে স্বাধীন। আমি বিশ্বাস করব যে কাঁচা উপায়ে ডেটা কলামগুলি উপস্থাপন করা আরও গণনামূলকভাবে দক্ষ (যদিও এটি বিভিন্ন উপায়ে করা হতে পারে)।
alxrcs

@ এলএক্সআরসিএস-এর কি কোনও নথি বা বই রয়েছে যা এক্সেলের ইন্টার্নালগুলিতে চলে এসকিউএল সার্ভারের মতো এই জাতীয় কিছু? amazon.com/Pro-Server-Internals- Dmitri- Corotkevitch / dp/… , নাকি এটি মূলত এমএস দলের বাইরে একটি ব্ল্যাক বক্স?
ডেভিড 542 20

নিশ্চিত নয়, দুঃখিত। আপনি ফাইল ফর্ম্যাটগুলির জন্য অনলাইনে কিছু নির্দিষ্টকরণ সন্ধান করতে পারেন, তবে আমি মনে করি না এক্সেল রানটাইম ইন্টার্নালগুলির বিবরণগুলি খুঁজে পাওয়া এত সহজ।
alxrcs

যাইহোক, আপনার দ্বিতীয় প্রশ্ন থেকে আমি সন্দেহ করি যে আপনি এক্সেল স্পেসিফিকেশনের চেয়ে তত্ত্ব সম্পর্কে বেশি আগ্রহী, এটি কি ঠিক?
alxrcs

উত্তর:


0

SharedStringTableরানটাইমের সময় এক্সেল কীভাবে মেমরির উপাদানগুলির সাথে কোষগুলি ঠিক সঞ্চয় করে তা খুঁজে পাচ্ছি না , তবে আইটেমের একটি সূচক হিসাবে এগুলি সংরক্ষণ করার SharedStringTableজন্য তাদের অ্যাক্সেসের জন্য কেবলমাত্র একটি অতিরিক্ত ডিरेরেন্স প্রয়োজন, এই ধারণা করে যে উপাদানগুলি অ্যারে হিসাবে সঞ্চিত রয়েছে। সুতরাং আমার অনুমান যে এটি এইভাবে হয়। এটি সহজতম উপায় এবং এটি দ্রুত করার একমাত্র উপায় হ'ল SharedStringTableউপাদানগুলির দ্বারা ইতিমধ্যে সাজানো রানটাইম প্রতিনিধিত্ব । এই জাতীয় ক্ষেত্রে একটি সূচক দ্বারা বাছাই করা মান অনুসারে বাছাইয়ের সমতুল্য। এই পদ্ধতির সাহায্যে সন্নিবেশ অপারেশনটিকে ব্যয়বহুল করে তোলে যখন কোনও নতুন স্ট্রিংটি টেবিলের মাঝখানে isোকানো হয় তার চেয়ে সমস্ত সূচকগুলি বাড়ানো উচিত এবং ডকুমেন্টে এই ধরনের ঘরগুলির সংখ্যা খুব বড় হতে পারে, সমস্তগুলি পর্যন্ত সেল উল্লেখ SharedStringTable

কোষগুলিতে যদি ফাইলের মতো সূচি থাকে, তবে এখানে কীভাবে একজন columnValueভেক্টারে স্ট্রিংয়ের দিকে ইঙ্গিত করছে তার স্ট্রিংয়ের ভিত্তিতে ভেক্টর দ্বারা প্রতিনিধিত্ব করা ঘরগুলিকে কীভাবে সাজানো হবে sharedStrings(সি ++ তে যেহেতু আপনি বলেছেন যে কোনও পার্থক্য নেই) 2 ব্যয় করে তুলনা অপারেশন প্রতি অতিরিক্ত dereferences:

// sort indexes from columnValue based on comparing values in sharedStrings
sort(columnValue.begin(), columnValue.end(), 
     [&sharedStrings](size_t i1, size_t i2){return sharedStrings[i1] < sharedStrings[i2];});

এটি ওপিতে ছিল না, তবে বিপরীত SharedStringTableঅনুসন্ধান অপারেশনটি ধীর এবং একটি অভিধানে উপাদানগুলি ক্যাচ করতে সহায়তা করে।


0

মাইক্রোসফ্ট এক্সেল শেয়ার্ড স্ট্রিং টেবিল

শেয়ার্ড স্ট্রিং টেবিলটি এবং ওএসএসএম স্ট্যান্ডার্ড ওপেন করুন, আইএসও স্ট্যান্ডার্ড দ্বারা নির্ধারিত - আইএসও / আইইসি 29500-1: 2016 (ই)

ভাগ করা স্ট্রিংগুলির সরকারী সংজ্ঞা (আইএসও নথি থেকে উদ্ধৃত)

শেয়ারিং স্ট্রিং টেবিল

স্ট্রিং মানগুলি স্প্রেডশিট সেল উপাদানগুলির মধ্যে সরাসরি সংরক্ষণ করা যেতে পারে; তবে একাধিক ঘরের উপাদানগুলির মধ্যে একই মান সংরক্ষণ করার ফলে খুব বড় কার্যপত্রক যন্ত্রাংশ তৈরি হতে পারে, ফলস্বরূপ কার্য সম্পাদনের অবনতি ঘটতে পারে। ভাগ করা স্ট্রিং টেবিলটি ওয়ার্কবুক জুড়ে ভাগ করা স্ট্রিং মানগুলির একটি সূচকযুক্ত তালিকা, যা প্রয়োগগুলি কেবলমাত্র একবারে মান সংরক্ষণ করতে দেয়।

ভাগ করা স্ট্রিংয়ের আইএসও স্ট্যান্ডার্ড থেকে ডাউনলোড করা যায়

https://standards.iso.org/ittf/PubliclyAvailableStandards/c071691_ISO_IEC_29500-1_2016.zip

এই বিষয়ে প্রশ্নের উত্তর

প্রশ্ন 1: এক্সেল অ্যাপ্লিকেশনের মধ্যেই ভাগ করা স্ট্রিংগুলি ব্যবহার করা হয়, বা কেবল ডেটা সংরক্ষণ করার সময়?

উত্তর: অংশীদারি স্ট্রিংগুলি কেবলমাত্র ডকুমেন্ট, আইই, সংরক্ষণের সময় কেবল স্টোরেজে ফাইল হিসাবে স্প্রেডশিট সংরক্ষণ করার উদ্দেশ্যে ব্যবহার করা হয়।

যাইহোক, ফাইলটি প্রদর্শনের জন্য খুললে, ঘরগুলি ভাগ করা স্ট্রিং টেবিল থেকে টানা প্রকৃত স্ট্রিং মানগুলির সাথে পপুলেশন করা হয়।

-

প্রশ্ন 2: তারপরে মাঠে বাছাই করার উদাহরণ অ্যালগরিদম কী হবে? যে কোনও ভাষা ভাল (সি, সি #, সি ++, অজগর)।

উত্তর: এক্সেলের মতো অ্যাপ্লিকেশনটির জন্য, আমি অনুমান করি যে স্ট্রিংয়ের মানগুলিতে বাছাইয়ের জন্য দ্রুত সকারের একটি বিশেষ মালিকানার প্রকরণ সম্ভবত ব্যবহৃত আলগোরিদম।

এক্সেলের সীমা 1,048,576 টি সীমা রয়েছে। এই আকারের জন্য, দ্রুত বাছাই করা অবশ্যই একটি বিজয়ী। দ্রুত সারণি এই মাত্রার ডেটা সেট করার জন্য খুব কার্যকরী ফলাফল তৈরি করতে পারে।

স্ট্রিং বাছাইয়ের জন্য সি ++ তে দ্রুত বাছাইয়ের প্রয়োগের লিঙ্কটি এখানে:

http://www.cplusplus.com/forum/beginner/101599/


2
দ্রুত সাজানোর স্ট্রিং নিজেই হতে পারে, আপনি একটি পয়েন্টার অবলম্বন বা একটি লক্ষ মানচিত্র একটি মিলিয়ন বার যদিও প্রয়োজন, না? আমি মনে করি এই উত্তরটি মূলত কেবল "হ্যাঁ, এটি ভাগ করে নেওয়া স্ট্রিংগুলি করে। এখানে ভাগ করে নেওয়া স্ট্রিং ছাড়াই বাছাই করা কীভাবে"।
ডেভিড 542

2
ভাগ করা স্ট্রিং টেবিলটি কেবলমাত্র ফাইলের সামগ্রীটি ডিস্কে সঞ্চয় করার জন্য ব্যবহৃত হয়। আইএসপি স্ট্যান্ডার্ডটি অ্যাপ্লিকেশনটি যখন খোলা থাকে তখন কীভাবে ঘরগুলি পপুলেট করা আবশ্যক তা নির্দিষ্ট করে না। যদি ভাগ করা স্ট্রিং টেবিল থেকে স্ট্রিং মানের অনুলিপি সহ কক্ষগুলি পপুলেটে থাকে তবে ডেরেফারিং এড়ানো যায়।
গোপীনাথ ২

1
আমি দেখি. হ্যাঁ, এখানে আমার আগ্রহের মূল বিষয়টি ছিল / থেকে-সঞ্চয়স্থানের দিকের বাইরে কীভাবে মেমরিটিকে পরিচালনা করা হয়। এর অংশটি সম্পর্কে কি আপনার অন্তর্দৃষ্টি আছে?
ডেভিড 542

এক্সেল বাছাইয়ের ক্ষেত্রে, ব্যবহারকারীকে অবশ্যই কলামগুলির তালিকা হিসাবে বাছাইয়ের ক্রমটি নির্দিষ্ট করতে হবে (উদাহরণ: কলাম এ দ্বারা বাছাই করুন, তারপরে বি দ্বারা, তারপরে সি দ্বারা, তারপরে ডি দ্বারা)। মনে করুন যে কলামে নকল স্ট্রিং রয়েছে। বাছাই করার সময়, কলাম A এর সমান মানযুক্ত সমস্ত সারি 'কলাম B' এর মান অনুসারে বাছাই করা হবে। যদি বি এর কোষগুলিতেও সদৃশ মান থাকে, তবে অনন্য মান সহ কলামটি পাওয়া না যাওয়া অবধি কলাম সি তে বাছাই করা হবে ... যদি কোনও কলামেরই স্বতন্ত্র মান না থাকে তবে সারিগুলি এড়িয়ে যাবে।
গোপীনাথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.