طَناب یا کمند به یک رشتهٔ بلند از
الیاف تابیده به هم گفته می شود. به هم تابیدن
الیاف به شکل طناب برای استحکام بخشیدن به رشتهٔ مورد نظر و استفاده در امور کششی و اتصالی صورت می گیرد. مواد معمول بکار رفته در درست کردن طناب ها عبارت اند از مو، پشم، نایلون، کتان، کنف، پلی پروپیلن،
فولاد و غیره. گاه در صنعت و
ترابری به جای طناب از
کابل و
زنجیر استفاده می شود. طناب های کنفی هنگامی که در
آب قرار بگیرند استحکام بیشتری از خود نشان می دهند.
برای بستن طناب ها به هم یا به دیگر جایها از انواع و اقسام
گره ها استفاده می شود. برای تغییر جهت نیروی کششی طناب ها از
قرقره بهره می گیرند.
طناب (ساختمان داده). در
برنامه نویسی کامپیوتر طناب و یا بند ناف، یک
ساختمان داده برای ذخیره سازی و ادارهٔ بهینه یک رشته بسیار طولانی است. به عنوان مثال، یک برنامه ویرایش متن ممکن است از یک طناب برای
نمایش متن در حال ویرایش استفاده کند، به طوری که عملیاتی از قبیل درج، حذف، یا دسترسی تصادفی به طور کارامد انجام بشود. [ ۱]
طناب یک
درخت دودویی است. گرهٔ برگی ( و همچنین برخی از
گره های داخلی تک فرزند ) شامل یک رشته کوتاه است. هر گره دارای یک "وزن" برابر با طول رشته خود به علاوه تمام وزن ها در
زیردرخت سمت چپ آن است. بدین ترتیب یک گره با دو فرزند تمام رشته را به دو قسمت تبدیل می کند. زیر درخت سمت چپ اولین بخش از رشته ذخیره می کند. زیر درخت سمت راست بخش دوم ذخیره را می کند و وزن آن مجموع وزن فرزند سمت چپ و طول رشته خودش است.
درخت دودویی شامل سطوح مختلفی از گره ها است. سطح پایین شامل تمام گره های که حاوی یک رشته هستند و سطوح بالاتر دارای گره های کمتر و کمتری هستند. بالاترین سطح از یک گره ریشه تشکیل شده است. طناب با قرار دادن گره هایی با رشته های کوتاه در سطح پایین و سپس الصاق نیمی از گره ها به
گره پدر به طور تصادفی در سطح بعدی، ساخته شده است. گره های بدون فرزند ( به عنوان مثال، دو گره ای که رشته های " my_ "و" me_i " ذخیره کرده اند ) به فرزند راست گره سمت چپ خود تبدیل می شوند. بدین ترتیب تشکیل زنجیره می دهند.
برای بازیابی کاراکتر i ام، یک جستجوی بازگشتی از گره ریشه آغاز می کنیم:
// Note ' ' : Assumes 1 - based indexing' ' function index ( RopeNode node, integer i ) if node. weight < i then return index ( node. right, i - node. weight ) else if exists ( node. left ) then return index ( node. left, i ) else return node. string endif endif end به عنوان مثال، برای پیدا کردن کاراکتر در مکان i = ۱۰ در طناب زیر، از گره ریشه شروع کن، پیدا است که ۲۲ بزرگتر از ۱۰ است و یک فرزند در سمت چپ وجود دارد، بنابراین به فرزند سمت چپ برو. ۹ کمتر از ۱۰ است، بنابراین از ۱۰، ۹ را کم کن ( قرار بده i = ۱ ) و به فرزند سمت راست برو. سپس چون ۷ بزرگتر از ۱ است و یک فرزند سمت چپ وجود دارد، به فرزند سمت چپ برو. ۶ بزرگتر از ۱ است و یک فرزند سمت چپ وجود دارد، پس دوباره به فرزند سمت چپ برو. در نهایت ۲ بیشتر از ۱ است، اما دیگر فرزندی در سمت چپ موجود نیست، پس کاراکتر موجود در index 1 از رشته کوتاه "NA"، پاسخ مورد نظر است.