แนะนําการนับประเภท

การนับเรียงลําดับเป็นอัลกอริทึมที่ไม่ต้องเรียงตามแบบชุดที่เรียงตามองค์ประกอบ ที่ดีกว่าเมื่อแยกจํานวนเต็มมากกว่าช่วงเล็ก ๆ ที่รู้จักกัน ซึ่งไม่เหมือนประเภทที่เปรียบเทียบกัน เช่น ด่วน หรือ ผนวกเข้าด้วยกัน ซึ่งขึ้นอยู่กับการเปรียบเทียบธาตุคู่ โดยนับลําดับการเรียงลําดับของลําดับการเรียงลําดับด้วยการนับความถี่ของแต่ละค่าแตกต่างกัน วิธีนี้ทําให้เกิดความซับซ้อนของเวลาในสภาวะที่มีประโยชน์ ทําให้เลือกตัวเลือกของการใช้ร่วมกับการใช้งานหลาย ๆ ส่วนของโดเมนที่จํากัด

Cervard ใน ค.ศ. 1954 และยังคงใช้เทคนิคพื้นฐานในวิทยาการคอมพิวเตอร์ อัลกอริทึมและประสิทธิภาพของมันทําให้งานในอุดมคติ เช่น การเรียงลําดับอายุนักเรียน เกรด หรือข้อมูลจํานวนเต็มใดๆ ที่มีการแพร่กระจายอย่างง่าย โดยการใช้คานเก็บข้อมูลเสริมให้สัดส่วนกับค่าต่าง ๆ ของขนาด โดยนับนับระยะการนับระยะการนับระยะการเปรียบเทียบต่ําลง การเรียงลําดับ O(n+k) การประมวลผลของเวลา (On+K) คือช่วงค่านําเข้าที่ k เป็นช่วงของค่านําเข้า

วิธี นับ ว่า ดี อย่าง ไร

กลไกหลักของการนับเรียงลําดับเป็น ตรงไปตรงมา: มันนับว่าจํานวนเท่าของแต่ละค่า ปรากฏในอาร์เรย์นําเข้า แล้วใช้นับคํานวณตําแหน่งสุดท้ายของแต่ละธาตุ โพรเซสประกอบด้วยสามระยะที่แตกต่างกัน:

  1. [FLT: 0] การนับ: สร้างลําดับของขนาด k (ช่วงของค่านําเข้า) นําหน้าเป็น 0 ประมวลผลผ่านทางอาร์เรย์นําเข้า และเพิ่มจํานวนของแต่ละค่า
  2. [FLT: 0]. การรวมองค์ประกอบ: แปลงลําดับลําดับลําดับลําดับเป็นลําดับนําหน้า โดยแต่ละองค์ประกอบที่ดัชนี i ถือจํานวนองค์ประกอบสะสมน้อยกว่าหรือเท่ากับ i. ขั้นนี้กําหนดตําแหน่งเริ่มต้นสําหรับแต่ละค่าแยกแยกในผลลัพธ์ที่ออกมา.
  3. [FLT: 0] องค์ประกอบ: Traver อาร์เรย์จากทางขวาไปซ้าย (เพื่อความมั่นคง) ใช้อาร์เรย์จํานวนตัวเลขเพื่อหาดัชนีที่ถูกต้องในอาร์เรย์ส่งออก วางธาตุไว้ตรงนั้น และลดจํานวนลง ผลสุดท้ายคือสําเนาของข้อมูลนําเข้า

อัลกอริทึมนี้จะให้ค่าลําดับลําดับใหม่ โดยจะทําให้การเปลี่ยนแปลงของรายการเดิม ตัวแปรที่เรียกว่า [FLT: 0] ในตําแหน่งการนับตําแหน่ง [FLT: 1) มีอยู่แต่แทบไม่เคยถูกใช้ เนื่องจากมันประนีประนอมหรือมีประสิทธิภาพในการรักษาพื้นที่

Stephyby ⁇ ตัวอย่าง

พิจารณาการเรียงลําดับที่ [4, 2, 8, 3, 1] ที่ค่าต่าง ๆ มีตั้งแต่ 0 ถึง 8

  1. [FLT: 0]. แท็บเบอร์ขนาด 9 (0–8) ⁇ [0,2,2,1,1,0,0,1]. (ในชื่อในชื่ออินแด็ก 1 ปรากฏครั้งเดียว ดัชนี 2 สองครั้ง ดัชนี 3 สองครั้ง ดัชนี 4 ครั้ง ดัชนี 4 ครั้ง หนึ่งครั้ง ดัชนี 8 ครั้ง).
  2. [FLT: 0]. ผลบวก Prefix: แปลงเป็น ⁇ [0,1,3,5,6,6,6,7]. ปัจจุบันค่าแต่ละค่าบอกเราถึงตําแหน่งเริ่มต้นของตัวเลขดังกล่าวในการจัดแยกแยกแยกแยก.
  3. [FLT: 0] [FLT: 0] ลําดับลําดับดั้งเดิมจากปลาย: 1 องค์ประกอบอ่านได้ 1 ⁇ ตําแหน่ง [1] - 1 = 0 outpress [0] [0] [0] [1] [1] นับ [1]] ต่อมาได้ที่ 3 ⁇ ตําแหน่ง=3 –1 (3) –1 ] ผลลัพธ์ [3] [3]. ]. ดําเนินการต่อจนผลสุดท้าย. true true [3]. true. true. true. enterc.

ตัว อย่าง นี้ แสดง ให้ เห็น วิธี ที่ การ นับ นับ จะ หลีก เลี่ยง การ เปรียบ เทียบ โดย อาศัย การ ปฏิบัติ การ ทาง คณิตศาสตร์ เท่า นั้น.

ความซับซ้อนของการซ้อนทับ

ความซับซ้อนของเวลา

  • [FLT: 0] Best, anniversity, และกรณีที่แย่ที่สุด: O(n+k) โดย n คือจํานวนสมาชิก และ k คือช่วงของค่านําเข้า เมื่อ k เป็นค่าที่เล็กที่สุดเมื่อเทียบกับ n อัลกอริทึมนี้ดําเนินการในเวลาเชิงเส้น
  • [FLT: 0]. คัมปารินา (FLT: 1) สปอเรชัน (in LOL N) มีความซับซ้อนเฉลี่ย (n LOL) สําหรับ n = 106 และ k = 1000, เคานตซิงเรียง (1200000 ดําเนินการ) เร็วกว่าประเภท On Lodn N ทั่วไปประมาณ 13 เท่า

ความซับซ้อนของช่องว่าง

  • [FLT: 0]. primary: O(k) สําหรับลําดับจํานวน, บวก O(n) สําหรับอาร์เรย์ส่งออก ความทรงจํานี้สามารถห้ามได้ถ้า k ใหญ่ (e.g., sorts 32-บิตที่ k = 232).
  • [FLT: 0] การจําแนกประเภท: เรียกค่าลําดับการผลิตเสริมที่มีขนาด n; ค่าความเสถียรในการเสียสละ หรือการใช้การจัดการดัชนีที่ซับซ้อน

เมื่อใช้การนับเรียงลําดับ

การนับเรียงลําดับมีประสิทธิภาพมากที่สุด ภายใต้เงื่อนไขต่อไปนี้:

  • ค่าที่ป้อนเข้าไปประกอบด้วยจํานวนเต็ม (หรือข้อมูลที่สามารถโยงไปยังค่าช่วงจํานวนเต็มได้ เช่น อักขระ หรือ ประเภทไม่ต่อเนื่อง)
  • เรนจ์ k ไม่ได้มากกว่า n เท่าเท่าไหร่. กฎทั่วไปของนิ้วโป้งคือ k ⁇ โอ (n).
  • หน่วยความจําไม่ได้จํากัดมาก เพราะจํานวนอาร์เรย์และค่าบัฟเฟอร์ส่งออกไป ต้องการพื้นที่พิเศษ
  • ต้องการความจุ (เช่น จัดเรียงด้วยหลายปุ่ม) การจัดองค์ประกอบมาตรฐานจะเสถียรเมื่อวางธาตุจากทางขวาไปทางซ้าย

การใช้กรณีที่ยอดเยี่ยมรวมถึงการแยกเกรด (0-1100), อายุ (0-120), ประเภทผลิตภัณฑ์ (ถึง SKUs ไม่กี่ร้อย), หรือเป็น subrutin in [FLT: 0] Radix sheet (FLT: 1).

ข้อ จํากัด และ การ พิจารณา

แม้มันจะเร็ว การนับก็มีผลเสียที่จํากัดความเหมาะสม

  • [FLT: 0] Interger อย่างเดียว: มันไม่สามารถเรียงลําดับตัวเลขหรือสตริงลอยได้โดยตรง นอกจากจะถูกแปลงเป็นจํานวนเต็มแบบต่อเนื่อง
  • [FLT: 0] ระยะการนับ: ถ้าคนแคระ k ตัว n -- ตัวอย่างเช่น การเรียงเลข 100 ตัวที่มีค่าระหว่าง 1 ถึง 107 -- อาร์เรย์จํานวนนับกินความทรงจําที่มหาศาล ในขณะที่การเรียงลําดับองค์ประกอบไม่กี่ตัว
  • [FLT: 0] Nonsadivative: การนับต้องสแกนทั้งข้อมูลและสร้างอาร์เรย์นับ แม้ว่าข้อมูลจะถูกแยกหรือเรียงแล้ว
  • [FLT: 0] ค่าสถิติ: เรียงลําดับมาตรฐานการนับ สันนิษฐานค่าจํานวนเต็มที่ไม่ใช่จํานวนลบ ในการจัดการค่าลบ คุณสามารถเลื่อนค่าได้โดยลบค่าต่ําสุด (ทําช่วง 0 ไปเป็นค่าสูงสุด – นาที)

ข้อจํากัดเหล่านี้หมายถึง การนับเรียงลําดับ เป็นเครื่องมือพิเศษ ไม่ใช่การแทนที่ทั่วไป สําหรับอัลกอริทึมทั่วไป

เปรียบเทียบกับ algorithm ที่เกี่ยวข้อง

กําลังเรียงลําดับ v. radix เรียงลําดับ

Radix sort language languages โดยการจัดแยกตัวเลขจากค่าที่น้อยที่สุดเป็นตัวเลขที่สําคัญ โดยใช้การจัดเรียงที่เสถียร (แยกประเภทนับเป็นจํานวนเต็มที่เรียงตามจํานวนทศนิยม) ในขณะที่การนับทํางานทั้ง 1 ช่วงเต็ม k, เรดาร์ การจัดเรียงแบบ Radix จะทําหลายค่าผ่านช่วงตัวเลขที่เล็กกว่า (เช่น, 256, ฐาน), ลดการใช้งานหน่วยความจําสําหรับ k ใหญ่ ตัวอย่างเช่น การเรียงลําดับแบบนับ 32 บิตด้วยจํานวนจํานวนเต็มที่ต้องการลําดับที่เรียงต้องใช้ลําดับ 232 ในขณะที่ raphix sorting กับ 8 บิตต้องการผ่านช่วง 256 และผ่านเพียง 4 รายการที่ผ่านเท่านั้น

กําลังเรียงลําดับ v. Bucket เรียงลําดับ

บัคเก็ต เรียงลําดับแยกองค์ประกอบเป็นจํานวนถัง และแต่ละถัง (โดยมากจะเป็นประเภทแทรก) การนับแยกสามารถมองว่าเป็นกรณีพิเศษของบัคเก็ตเรียงลําดับที่แต่ละถังตรงกับค่าที่แตกต่างกัน บัคเก็ตเรียงทํางานได้ดีโดยใช้ข้อมูลแบบสม่ําเสมอ แต่การนับแยกแยกแยกแยกแยกเป็นโดเมนจํากัด

การ ทํา ให้ การ นับ ที่ เหมาะ สม

ความจุสําคัญเมื่อทําการเรียงลําดับด้วยกุญแจดอกหนึ่ง ในขณะที่ยังคงคงลําดับของธาตุที่เท่ากันจากอีกกุญแจหนึ่งไว้ อัลกอริทึมการนับมาตรฐานจะคงที่เมื่อวงจรการวางตําแหน่งผลลัพธ์ที่ส่งตรงการป้อนข้อความจากด้านขวาไปซ้าย นี่เป็นกรอบข้อความของส่วนความต่อเนื่องคงที่:

  1. ผลรวมการนับอาร์เรย์ตามที่อธิบาย
  2. แปลงเป็นผลรวมนําหน้า (ค่าแต่ละค่าในการแสดงผลเรียงลําดับ)
  3. จง ลําดับ ลําดับ ลําดับ ที่ ใส่ เข้า ไป.

เนื่องจากเราประมวลผลองค์ประกอบจากตอนจบ การเกิดขึ้นครั้งสุดท้ายของค่าที่กําหนด จะไปยังดัชนีที่มากที่สุดที่เป็นไปได้ การรักษาลําดับสัมพัทธ์ไว้ รุ่นที่เสถียรนี้จําเป็นสําหรับ Radix เรียงลําดับการทํางานอย่างถูกต้องในแต่ละหลัก

โปรแกรมต่าง ๆ ที่ใช้ได้

  • [FLT: 0] ระบบการให้คะแนนระดับชั้น: การเรียงลําดับคะแนนสอบหลายร้อยคะแนน (in 0-1100) ในเวลา O(n).
  • [FLT: 0] Bioinformatics: การเรียงลําดับจํานวนเต็มอ่านนับ หรือดีเอ็นเอ khmer ความถี่เมื่อขนาดอักษรเล็ก (A, C, G, T).
  • [FLT: 0] เครื่องบํารุงดัชนี Datatataba:[FLT: 1) จัดเรียงจํานวนเต็มที่ไม่ซ้ํากันในช่วงเล็กพอที่เข้ากับหน่วยความจํา
  • [FLT: 0] การประมวลผลการดําเนินงาน : การเรียงลําดับ Howsho Bunes หรือ graphy Intensity (0–255) เมื่ออาคารดูตาราง
  • [FLT: 0] ใช้คีย์สํารอง: ใช้ใน Radix sheet ซึ่งเป็นงานม้าสําหรับจําแนกภาษาและห้องสมุดหลายภาษาที่มีประสิทธิภาพ (เช่น .NET รันไทม์ใช้ชุดผสมที่ปรับตัวได้ของอัลกอริทึมรวมทั้งการนับรวมช่วงย่อย ๆ ด้วย).

สําหรับเพิ่มเติมเกี่ยวกับทฤษฎีและอนุมาน ที่ปรึกษาอ้างอิงตามหลักศาสนาเช่น [FLT: 0] Wikipedia: Counting Sheet [FLT:] [FEKEKSFEGEGEGEGEKEKS: Counting Setch [FTTIT:3]. การเปรียบเทียบกับอัลกอริทึมอื่น ๆ สามารถพบได้ใน [FLT: 4] บทความของ Brolient' Chounting Teelecting [FTLL:[TLLTLF].

การ ดู แล เรื่อง การ นับ

เมื่อ k ใหญ่ แต่ n ใหญ่ด้วย การนับแบบนับบริสุทธิ์จะกลายเป็นหน่วยความจําที่ต่อเนื่อง. การจัดอันดับที่ถูกเลือกให้มากมีอยู่:

  • [FLT: 0] การหดตัว: ใช้ผัง แฮช แทนการเรียงลําดับแบบต่อเนื่อง เมื่อช่วงของค่าที่ใช้นั้นมีขนาดใหญ่ แต่จํานวนของค่าที่แตกต่างกันนั้นเล็ก การค้านี้คงที่ การทําดัชนีสําหรับ hading ค่าใช้จ่าย แต่ลดการบริโภคหน่วยความจํา
  • [FLT: 0] Hybrad access: การแยกประเภทกับอัลกอริทึมอื่น ๆ ตัวอย่างเช่น ถ้าช่วงเกิน 106 ใช้ Radix set กับฐานที่รักษาตัวเลขให้ระยะเล็ก
  • [FLT: 0] Intoples: การจัดอันดับพื้นที่พิเศษบางส่วนลดพื้นที่ไปยัง O(k) โดยปราศจากลําดับผลลัพธ์ แต่โดยทั่วไปแล้วมันเสียสละความมั่นคงหรือต้องการวงจรในการระบุตําแหน่ง

รูปแบบการวน

การนับแยกโดดเด่นออกมาเป็นอัลกอริทึมที่มีประสิทธิภาพอย่างน่าทึ่งในการแยกจํานวนเต็ม เมื่อค่าช่วงเล็ก ๆ สัมพันธ์กับจํานวนธาตุ ระยะเวลาที่ โอ (n+ k) ของมัน ความซับซ้อนและประสิทธิภาพเชิงเส้น ทําให้มีความจําเป็นในการเรียงลําดับแบบ score, Radix sorturities เรียงลําดับตัวพิมพ์เล็ก, และโปรแกรมที่มีปุ่มจํานวนเต็มผูกอยู่ อย่างไรก็ตาม อัลกอริทึมของอัลกอริทึมในการใช้ค่าจํานวนเต็มและค่าของค่าต่าง ๆ ของมันเตือนเราว่าไม่มีการจัดอันดับสําหรับสถานการณ์ทั้งหมด โดยความเข้าใจเมื่อค่า xpect: froupssing ups, ups ups ups, ups, upsing on more, selecting [Timpiatitions], signations [TIIFTIIIFE]: [1[1] capeute] [1] se] se] seecting [1]: [. seortcutterputtracketsect [2]: [2] seortcutlutlutationsect (2]: [2] setits] se: [2] se [.