คำถามติดแท็ก algorithm-analysis

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

2
ทำไม DFS ถึงถูกพิจารณาให้มี
ตามบันทึกเหล่านี้ , DFSถือว่ามีความซับซ้อนของพื้นที่ที่เป็นปัจจัยที่แผ่กิ่งก้านของต้นไม้และมีความยาวสูงสุดของเส้นทางใด ๆ ในพื้นที่รัฐO ( b m )O(ขม.)O(bm)ขขbม.ม.m เป็นเหมือนกันกล่าวว่าในเรื่องนี้หน้าวิกิตำราบนไม่รู้ค้นหา ตอนนี้ "กล่องข้อมูล" ของบทความ Wikipedia บน DFSนำเสนอต่อไปนี้สำหรับความซับซ้อนของพื้นที่ของอัลกอริทึม: O ( | V| )O(|V|)O(|V|)หากกราฟทั้งหมดถูกสำรวจโดยไม่มีการทำซ้ำค้นหาความยาวพา ธ ที่ยาวที่สุดสำหรับกราฟโดยนัยโดยไม่ต้องกำจัดโหนดซ้ำโอ(O(O())) ซึ่งคล้ายกับสิ่งที่ฉันคิดว่ามีความซับซ้อนของพื้นที่ของ DFS เช่นโดยที่คือความยาวสูงสุดที่อัลกอริธึมถึงO ( m )O(ม.)O(m)ม.ม.m เหตุใดฉันจึงคิดว่าเป็นเช่นนี้ โดยพื้นฐานแล้วเราไม่จำเป็นต้องเก็บโหนดอื่น ๆ นอกเหนือจากโหนดของเส้นทางที่เรากำลังดูอยู่ในขณะนี้ดังนั้นจึงไม่มีประเด็นการคูณด้วยในการวิเคราะห์ที่จัดทำโดย Wikibook และบันทึกที่ฉันเรียกคุณ ถึง.ขขb ยิ่งไปกว่านั้นจากบทความนี้เกี่ยวกับIDA *โดยRichard Korfความซับซ้อนของพื้นที่ของ DFS คือโดยที่ถูกพิจารณาว่าเป็น "cutoff เชิงลึก"O ( d)O(d)O(d)ddd ดังนั้นความซับซ้อนของพื้นที่ที่ถูกต้องของ DFS คืออะไร? ฉันคิดว่ามันอาจขึ้นอยู่กับการนำไปใช้ดังนั้นฉันขอขอบคุณคำอธิบายเกี่ยวกับความซับซ้อนของพื้นที่สำหรับการนำไปปฏิบัติต่าง ๆ …

2
มีมาตรฐานใดสำหรับการเปรียบเทียบรันไทม์ที่ทดลอง
สถานการณ์ของฉัน ฉันกำลังเขียนบทความที่นำเสนอโมดูลซอฟต์แวร์ที่ฉันพัฒนาและฉันต้องการเปรียบเทียบรันไทม์ของมันกับโมดูลอื่นสำหรับงานเดียวกัน ฉันตระหนักถึงข้อเสียของการทดสอบรันไทม์แต่โปรดสมมติว่าไม่มีทางแก้ไขในกรณีของฉัน (ฉันสามารถและอนุมานคุณสมบัติบางอย่างในทางทฤษฎี แต่มันก็ไม่พอเพียงสำหรับทุกสิ่ง) สถานการณ์ที่เฉพาะเจาะจงฉันต้องการที่จะใช้สำหรับการเปรียบเทียบมีสองพารามิเตอร์: ความซับซ้อน ของปัญหาและเมล็ดสุ่ม ซึ่งกำหนดปัญหารายละเอียด ส่วนใหญ่ผมต้องการที่จะแสดงให้เห็นการพึ่งพา nโดยการตรวจสอบเบื้องต้นและทฤษฎีอิทธิพลของต่อรันไทม์มีน้อยหรือไม่สำคัญ งานเดียวใช้เวลาดำเนินการไม่เกินสิบนาทีnnnRRrnnnRRr คำถามจริง ฉันกำลังมองหาขั้นตอนที่เป็นที่ยอมรับหรือเผยแพร่โดยทั่วไปเกี่ยวกับการดำเนินการทดลองดังกล่าวหรืออย่างน้อยรายการของข้อผิดพลาดทั่วไป สิ่งที่ฉันพบจนถึง ไม่มีอะไร การค้นหาทางอินเทอร์เน็ตทำให้เกิดผลลัพธ์ที่ไม่เกี่ยวข้องทั้งหมด แต่ฉันอาจไม่ได้ใช้คำศัพท์ที่ถูกต้อง การรวมคำหลักขั้นต่ำซึ่งฉันรู้ว่าเป็นมาตรฐานที่ดี (ดูด้านล่าง) ก็ไม่ได้ช่วยอะไรเช่นกัน ฉันจะทำอย่างไร ดำเนินการทดลองทั้งหมดในเครื่องเดียวกันด้วยซอฟต์แวร์ที่อาจรบกวนเช่น GUI ถูกปิดใช้งานเท่าที่จะทำได้ ขึ้นอยู่กับโมดูลทั้งหมดในการเลือกสถานการณ์เดียวกันคือและ เดียวกันnnnRRr สำหรับแต่ละสถานการณ์ทดสอบโมดูลต่าง ๆ โดยตรงหลังจากกันตามลำดับแบบสุ่ม ด้วยคำอื่น ๆ การวนรอบโมดูลที่ต่างกันนั้นเป็นส่วนที่อยู่ด้านในสุด สิ่งนี้ควรหลีกเลี่ยงอคติกับโมดูลที่แตกต่างกันเนื่องจากความผันผวนของประสิทธิภาพของเครื่องช้า (เช่นเนื่องจากการเปลี่ยนแปลงของอุณหภูมิ) ลำดับแบบสุ่มควรหลีกเลี่ยงอคติผ่านเอฟเฟกต์เช่นการแคชหรือหนึ่งโมดูลที่ถูกทดสอบเสมอหลังจากที่เดียวกัน สำหรับแต่ละให้ใช้เวลารันไทม์ขั้นต่ำในหลาย ๆ สถานการณ์ด้วยเมล็ดที่แตกต่างกันเป็นเกณฑ์มาตรฐาน สิ่งนี้ควรหลีกเลี่ยงอคติกับโมดูลที่แตกต่างกันเนื่องจากความผันผวนของประสิทธิภาพการทำงานของเครื่องในระยะเวลาอันสั้นnnn

1
การวิเคราะห์ความซับซ้อนของอัลกอริทึมในการใช้งานภาษาโปรแกรมเชิงฟังก์ชัน
ฉันได้เรียนรู้ในวันนี้ว่าการวิเคราะห์อัลกอริทึมนั้นแตกต่างกันตามโมเดลการคำนวณ มันเป็นสิ่งที่ฉันไม่เคยคิดหรือเคยได้ยิน ตัวอย่างที่ให้ฉันซึ่งแสดงให้เห็นเพิ่มเติมโดย User @chiคือ: เช่นพิจารณางาน: รับ ผลตอบแทน x_iใน RAM สิ่งนี้สามารถแก้ไขได้ใน เนื่องจากการเข้าถึงอาร์เรย์เป็นเวลาคงที่ การใช้ TM นั้นเราจำเป็นต้องสแกนอินพุตทั้งหมดดังนั้นx i O ( 1 ) O ( n )( i , x1, … , xn)(ผม,x1,...,xn)(i,x_1 ,…,x_n )xผมxผมx_iO ( 1 )O(1)O(1)O ( n )O(n)O(n) ทำให้ฉันสงสัยเกี่ยวกับภาษาที่ใช้งานได้ จากความเข้าใจของฉัน "ภาษาหน้าที่มีความสัมพันธ์อย่างใกล้ชิดกับแคลคูลัสแลมบ์ดา" (จากความคิดเห็นของ Yuval Filmus ที่นี่ ) ดังนั้นหากภาษาที่ใช้งานอยู่บนพื้นฐานของแคลคูลัสแลมบ์ดา แต่พวกมันทำงานบนเครื่องที่ใช้ RAM เป็นวิธีที่เหมาะสมในการวิเคราะห์ความซับซ้อนของอัลกอริทึมที่ใช้งานโดยใช้โครงสร้างข้อมูลและภาษาที่ใช้งานได้จริง …

4
มีวิธีสำหรับการวิเคราะห์อัลกอริธึมอัตโนมัติหรือไม่?
ฉันสงสัยว่ามีวิธีการวิเคราะห์รันไทม์อัตโนมัติที่ทำงานอย่างน้อยในชุดย่อยที่เกี่ยวข้องของอัลกอริทึม (อัลกอริทึมที่สามารถวิเคราะห์ได้) หรือไม่ ฉัน googled "การวิเคราะห์อัลกอริทึมอัตโนมัติ" ซึ่งทำให้ผมนี้แต่มันเป็น Mathy เกินไป ฉันแค่ต้องการตัวอย่างง่ายๆใน psuedocode ที่ฉันเข้าใจ อาจจะเฉพาะเจาะจงเกินไป แต่ฉันคิดว่ามันคุ้มค่ากับการยิง

1
ความซับซ้อนของอัลกอริทึมที่ไร้เดียงสาในการค้นหาสตริงย่อย Fibonacci ที่ยาวที่สุด
เมื่อได้รับสองสัญลักษณ์และbให้นิยามสตริงk -th Fibonacci ดังนี้aa\text{a}bb\text{b}kkk F(k)=⎧⎩⎨baF(k−1)⋆F(k−2)if k=0if k=1elseF(k)={bif k=0aif k=1F(k−1)⋆F(k−2)else F(k) = \begin{cases} \text{b} &\mbox{if } k = 0 \\ \text{a} &\mbox{if } k = 1 \\ F(k-1) \star F(k-2) &\mbox{else} \end{cases} ด้วย denoting string concatenation⋆⋆\star ดังนั้นเราจะมี: F(0)=bF(0)=bF(0) = \text{b} F(1)=aF(1)=aF(1) = \text{a} F(2)=F(1)⋆F(0)=abF(2)=F(1)⋆F(0)=abF(2) = F(1) \star F(0) = \text{ab} F(3)=F(2)⋆F(1)=abaF(3)=F(2)⋆F(1)=abaF(3) …

1
วิธีง่ายๆในการพิสูจน์ว่าอัลกอริทึมนี้สิ้นสุดลงในที่สุด
บทนำและสัญลักษณ์: นี่คืออัลกอริทึมใหม่และเรียบง่ายของฉันซึ่งดูเหมือนว่าจะยุติ (ตามการทดลองของฉัน) และตอนนี้ฉันอยากจะพิสูจน์มัน ปล่อยสัญกรณ์อ้างถึงจุดข้อมูลมิติ (เวกเตอร์) ฉันมีสามชุด A, B และ C เช่นนั้น , , : x i ∈ R pxผม∈ Rพีx_i \in \mathbb{R}^p p พีp| A | = n | A | =n|A| = n| B | = m | B | =m|B| = m| C | = l | …

1
พิสูจน์ว่าแผนภูมิการค้นหาแบบไบนารีที่สร้างแบบสุ่มมีความสูงลอการิทึม
คุณจะพิสูจน์ได้อย่างไรว่าความสูงที่คาดหวังของแผนภูมิการค้นหาแบบไบนารีที่สร้างแบบสุ่มด้วยnnnโหนดคือ ? มีหลักฐานใน CLRS รู้เบื้องต้นเกี่ยวกับอัลกอริทึม (บทที่ 12.4) แต่ฉันไม่เข้าใจO(logn)O(log⁡n)O(\log n)

1
ขอบเขตล่างสำหรับการค้นหาองค์ประกอบที่เล็กที่สุด kth โดยใช้อาร์กิวเมนต์ที่เป็นปฏิปักษ์
ในหลายตำราที่ถูกผูกไว้ที่ต่ำกว่าสำหรับการหา TH องค์ประกอบที่เล็กที่สุดที่ได้มาทำให้การใช้งานของข้อโต้แย้งโดยใช้มีเดีย ฉันจะหาคนโดยใช้การโต้แย้งจากศัตรูได้อย่างไร?kkk Wikipediaบอกว่าอัลกอริทึมทัวร์นาเมนต์ทำงานในและn - k + ∑ n j = n + 2 - k ⌈ lgO(n+klogn)O(n+klog⁡n)O(n+k\log n)ถูกกำหนดให้เป็นขอบเขตล่างn−k+∑nj=n+2−k⌈lgj⌉n−k+∑j=n+2−kn⌈lgj⌉n - k + \sum_{j = n+2-k}^{n} \lceil{\operatorname{lg}\, j}\rceil

3
ความซับซ้อนของการจำพื้นที่ Palindromes Watson-Crick
ฉันมีปัญหาเกี่ยวกับอัลกอริทึมดังต่อไปนี้: กำหนดพื้นที่ความซับซ้อนของทัวริงในการรับรู้สตริงของ DNA คือ Watson-Crick palindromes Watson-Crick palindromes เป็นสตริงที่ส่วนประกอบที่ตรงกันข้ามเป็นสตริงเดิม ส่วนเติมเต็มนั้นถูกกำหนดด้วยตัวอักษรที่ได้รับแรงบันดาลใจจาก DNA: A คือส่วนเติมเต็มของ T และ C คือส่วนเติมเต็มของ G ตัวอย่างง่ายๆสำหรับ WC-palindrome คือ ACGT ฉันคิดวิธีแก้ปัญหานี้สองวิธี หนึ่งต้องพื้นที่O(n)O(n)\mathcal{O}(n) เมื่อเครื่องเสร็จอ่านค่าอินพุทแล้ว เทปอินพุตต้องถูกคัดลอกไปยังเทปงานในลำดับย้อนกลับ เครื่องจะอ่านค่าอินพุตและเทปการทำงานจากด้านซ้ายและเปรียบเทียบแต่ละรายการเพื่อตรวจสอบเซลล์ในเทปงานคือคำชมเชยของเซลล์ในอินพุต นี้ต้องใช้พื้นที่O(n)O(n)\mathcal{O}(n) อื่น ๆ ที่ต้องใช้พื้นที่O(logn)O(log⁡n)\mathcal{O}(\log n) ในขณะที่อ่านอินพุต นับจำนวนรายการในเทปอินพุต เมื่ออ่านเทปเสร็จแล้ว คัดลอกส่วนประกอบของจดหมายไปยังเทปงาน คัดลอกตัวอักษร L ไปยังจุดสิ้นสุดของเทปงาน (จุดลูป) หากตัวนับ = 0 ให้ล้างเวิร์กเทปและเขียนใช่แล้วหยุด หากอินพุตเทปอ่าน L ย้ายหัวอินพุตไปทางซ้ายตามจำนวนครั้งที่ระบุโดยตัวนับ (ต้องใช้ตัวนับที่สอง) หากอินพุตเทปอ่าน R …

1
การแก้ไขความสัมพันธ์ที่เกิดซ้ำกับการโทรซ้ำสองครั้ง
ฉันกำลังศึกษารันไทม์กรณีที่เลวร้ายที่สุดของ quicksort ภายใต้เงื่อนไขที่ว่าจะไม่ทำมากพาร์ทิชันไม่สมดุลสำหรับคำจำกัดความที่แตกต่างของมาก ในการทำเช่นนี้ฉันถามตัวเองว่ารันไทม์ T(n,พี)T(n,p)T(n, p) จะเป็นในกรณีที่ quicksort มักจะเกิดขึ้นกับพาร์ทิชันในบางส่วน 0&lt;พี≤120&lt;p≤120 < p \leq {1\over 2} ดังนั้น ⌊พี(n-1)⌋⌊p(n−1)⌋\lfloor{p(n-1)}\rfloor องค์ประกอบอยู่ในพาร์ทิชันด้านซ้ายและ ⌈(1-พี)(n-1)⌉⌈(1−p)(n−1)⌉\lceil(1 - p)(n - 1)\rceil อยู่ในพาร์ทิชันที่เหมาะสม (ออกจาก 111 องค์ประกอบ pivot ที่อยู่ตรงกลาง) ไม่ยากที่จะเห็นว่า T(n,พี)T(n,p)T(n, p) ให้ขอบเขตบนสำหรับกรณีที่แย่ที่สุดที่ พีpp เป็นพาร์ติชันที่ได้รับอนุญาตไม่สมดุลมากที่สุดเช่นเดียวกับพาร์ทิชันที่มีเศษส่วน &gt;พี&gt;p> p จะมีความสมดุลมากขึ้นและมีรันไทม์ขนาดเล็กลงและเศษส่วนใด ๆ &lt;พี&lt;p<p ไม่อนุญาต เห็นได้ชัดว่า T(n,12)T(n,12)T(n, {1 \over 2}) เป็นกรณีที่ดีที่สุดและ T(n,0)T(n,0)T(n, 0)เป็นกรณีที่แย่ที่สุดของ quicksort …

1
ทำไมฟังก์ชั่นนี้จึงคำนวณได้
ตำราของฉันบอกว่า: "เรากำหนดฟังก์ชันดังนี้:และ . โปรดทราบว่าเมื่อได้รับเราสามารถหาได้ง่ายในเวลาที่หมายเลขที่ถูกคั่นระหว่างและ "ฉ: N → Nf:N→Nf\colon \mathbb{N}\to\mathbb{N}ฉ( 1 ) = 2f(1)=2f(1)=2ฉ( i + 1 ) =2ฉ( ฉัน)1.2f(i+1)=2f(i)1.2f(i+1)=2^{f(i)^{1.2}}nnnโอ(n1.5)O(n1.5)O(n^{1.5})ผมiinnnฉ( i )f(i)f(i)ฉ( i + 1 )f(i+1)f(i+1) ฉันจะโน้มน้าวตัวเองว่าจริง ๆ แล้วเราสามารถหาได้อย่างง่ายดายในเวลา ? ในฐานะที่เป็นถูกกำหนดซ้ำผมคิดว่าเราต้องคำนวณจนกว่าn เพื่อที่จะหาเวลาที่การคำนวณเหล่านี้ใช้ฉันคิดว่าเราต้องหาขอบเขตบนที่เหมาะสมสำหรับขึ้นอยู่กับและเราต้องหาขอบเขตบนของเวลาดำเนินการของฟังก์ชัน1.2}} ในท้ายที่สุดเราหวังว่าจะสามารถแสดงข้อเสนอที่ยกมา น่าเสียดายที่ฉันไม่เห็นสิ่งใดเลยผมiiโอ(n1.5)O(n1.5)O(n^{1.5})ฉffฉ( 1 ) , f( 2 ) , f( 3 ) … f( j )f(1),f(2),f(3)…f(j)f(1),f(2),f(3)\dots f(j)ฉ( j ) …

1
เหตุใดจึงกล่าวได้ว่าการค้นหาแบบกว้างแรกแสดงในเวลา
มันมักจะระบุไว้ (เช่นในวิกิพีเดีย ) ที่เวลาทำงานของการค้นหาในแนวกว้าง (BFS) ในกราฟเป็น|) อย่างไรก็ตามกราฟที่เชื่อมต่อใด ๆ มีและแม้ในกราฟที่ไม่ได้เชื่อมต่อ BFS จะไม่มองจุดยอดนอกส่วนประกอบที่มีจุดยอดเริ่มต้น องค์ประกอบนั้นมีอย่างมาก ขอบดังนั้นมันจึงมีจุดยอดมากที่สุดและนั่นเป็นสิ่งเดียวที่อัลกอริธึมจะเข้าชมG = ( V, E)G=(V,E)G=(V,E)O ( | V| + | E| )O(|V|+|E|)O(|V|+|E|)| V| ≤ | E| +1|V|≤|E|+1|V|\leq |E|+1| E||E||E|| E| +1|E|+1|E|+1 ซึ่งหมายความว่าดังนั้นทำไมเราไม่พูดว่าเวลาทำงานเป็นเพียง ?| V| + | E| ≤2 | E| +1|V|+|E|≤2|E|+1|V|+|E|\leq 2|E|+1O ( | E| )O(|E|)O(|E|) นี้ขึ้นมาในความคิดเห็นในคำถามเกี่ยวกับเวลาทำงานของอัลกอริทึม Disjkstra …

1
วิธีการเพิ่ม
ฉันเห็นปัญหาอัลกอริทึมมากมายที่มักจะลดสิ่งต่อไปนี้เป็นแนวยาว: คุณมีอาร์เรย์จำนวนเต็มh[1..n]≥0h[1..n]≥0h[1..n]\geq 0คุณต้องไปหา i,ji,ji,j อย่างนั้น (h[j]−h[i])(j−i)(h[j]−h[i])(j−i)(h[j]-h[i])(j-i) ใน O(n)O(n)O(n) เวลา. เห็นได้ชัดว่า O(n2)O(n2)O(n^2) การแก้ปัญหาเวลาคือการพิจารณาทุกคู่อย่างไรก็ตามมีวิธีที่เราสามารถเพิ่มการแสดงออก O(n)O(n)O(n) โดยไม่ทราบอย่างอื่นเกี่ยวกับคุณสมบัติของ hhh? หนึ่งความคิดที่ฉันคิดคือการแก้ไข jjjจากนั้นเราต้องค้นหา i∗i∗i^* จาก 111 ถึง j−1j−1j-1 นั่นเท่ากับ argmaxi{(h[j]−h[i])(j−i)}argmaxi{(h[j]−h[i])(j−i)}\text{argmax}_i\{(h[j]-h[i])(j-i)\} หรือ argmaxi{h[j]j−h[j]i−h[i]j+h[i]i}argmaxi{h[j]j−h[j]i−h[i]j+h[i]i}\text{argmax}_i\{h[j]j-h[j]i-h[i]j+h[i]i\} และตั้งแต่ jjj ได้รับการแก้ไขแล้วเราต้องการ argmaxi{−h[j]i−jh[i]+ih[i]}argmaxi{−h[j]i−jh[i]+ih[i]}\text{argmax}_i\{-h[j]i-jh[i]+ih[i]\}. อย่างไรก็ตามฉันไม่เห็นวิธีที่จะกำจัด jjjเงื่อนไขที่ขึ้นอยู่กับภายใน ความช่วยเหลือใด ๆ

1
ฮีปที่หลอมรวมแบบสุ่ม - ความสูงที่คาดหวัง
Randomized Meldable Heapsมีการดำเนินการ "meld" ซึ่งเราจะใช้เพื่อกำหนดการปฏิบัติการอื่น ๆ ทั้งหมดรวมถึงส่วนแทรก คำถามคืออะไรคือความสูงที่คาดหวังของต้นไม้นั้นด้วย nnn โหนด? ทฤษฎีบทที่ 1 ของ Gambin และ Malinkowski, คิวลำดับความสำคัญที่หลอมรวมแบบสุ่ม (การดำเนินการตาม SOFSEM 1998, บันทึกการบรรยายในวิทยาการคอมพิวเตอร์ปีที่ 1521, หน้า 344–349, 1998; PDF ) ให้คำตอบสำหรับคำถามนี้พร้อมหลักฐาน อย่างไรก็ตามฉันไม่เข้าใจว่าทำไมเราถึงเขียน: E[hQ]=12((1+E[hQL])+(1+E[hQR])).E[hQ]=12((1+E[hQL])+(1+E[hQR])).\mathbb{E} [ h_Q] = \frac{1}{2} ((1 + \mathbb{E}[h_{Q_L}]) + (1 + \mathbb{E}[h_{Q_R}]))\,. สำหรับฉันความสูงของต้นไม้คือ hQ=1+max{hQL,hQR},hQ=1+max{hQL,hQR},h_Q = 1 + \max\, \{ h_{Q_L}, h_{Q_R}\}\,, …

1
เหตุใด introsort จึงใช้ heapsort แทนที่จะรวมกัน
เป็นส่วนหนึ่งของการบ้านที่ครอบคลุมการใช้งานIntrosortฉันถูกถามว่าทำไมใช้ heapsort มากกว่าการรวม (หรืออื่น ๆO ( n บันทึก( n ) )O(nเข้าสู่ระบบ⁡(n))O(n\log(n)) อัลกอริทึมสำหรับเรื่องนั้น) Introsort เป็นอัลกอริธึมการเรียงลำดับแบบไฮบริดที่ให้ทั้งประสิทธิภาพเฉลี่ยที่รวดเร็วและ (asymptotically) ประสิทธิภาพที่ดีที่สุดสำหรับกรณีที่เลวร้ายที่สุด มันเริ่มต้นด้วย quicksort และสลับไปที่ heapsort เมื่อความลึกของการเรียกซ้ำเกินกว่าระดับตาม (ลอการิทึมของ) จำนวนองค์ประกอบที่เรียงลำดับ ( Wikipedia , ดึงข้อมูล 2014 - May-06) เหตุผลเดียวที่ฉันคิดได้ก็คือฮีปพอร์ตคือ "ในที่" ... แต่ฉันไม่เข้าใจจริงๆว่าทำไมเรื่องนี้ถึงมีความสำคัญ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.