วิทยาศาสตร์คอมพิวเตอร์

ถาม - ตอบสำหรับนักเรียนนักวิจัยและผู้ปฏิบัติงานด้านวิทยาการคอมพิวเตอร์

9
แสดงจำนวนจริงโดยไม่สูญเสียความแม่นยำ
จุดลอยตัวปัจจุบัน (ANSI C float, double) อนุญาตให้แสดงการประมาณจำนวนจริง มีวิธีใดที่จะแสดงจำนวนจริงโดยไม่มีข้อผิดพลาด ? นี่คือความคิดที่ฉันมีซึ่งเป็นอะไร แต่สมบูรณ์แบบ ตัวอย่างเช่น 1/3 คือ 0.33333333 ... (ฐาน 10) หรือ o.01010101 ... (ฐาน 2) แต่ยัง 0.1 (ฐาน 3) เป็นความคิดที่ดีที่จะใช้ "โครงสร้าง" นี้หรือไม่: base, mantissa, exponent ดังนั้น 1/3 อาจเท่ากับ 3 ^ -1 {[11] = base 3, [1.0] mantissa, [-1] exponent} ความคิดอื่น ๆ ?

1
หลักการแบบ end-to-end สามารถทำเป็นกรงเล็บได้หรือไม่?
ในช่วงปลายปี 1990 ตอนที่ฉันอยู่ในบัณฑิตวิทยาลัยกระดาษ JH Saltzer; DP Reed; DD คลาร์ก: ข้อโต้แย้ง End-to-end ในการออกแบบระบบ ACM Trans คอมพิวเต Syst 2 (4): 277-288, 1984. DOI = 10.1145 / 357401.357402 มันค่อนข้างจำเป็นต้องอ่านในทุกระบบปฏิบัติการในทุก ๆ ชั้นของมหาวิทยาลัยและมันก็ยังคงเป็นหนึ่งในหลักการที่เป็นแนวทางหลักในการออกแบบอินเทอร์เน็ต (ดูตัวอย่าง: J Kempf, R Austein (eds) และ IAB " การเพิ่มขึ้นของกลางและอนาคตของ End-to-End: ภาพสะท้อนของวิวัฒนาการของสถาปัตยกรรมอินเทอร์เน็ต " RFC 3724, มีนาคม 2004 ) สถานะของหลักการแบบครบวงจร (Saltzer et al., …

3
เหตุใดจึงต้องใช้ภาษาในทฤษฎีความซับซ้อน
ฉันเพิ่งเริ่มเข้าสู่ทฤษฎีการคำนวณซึ่งศึกษาสิ่งที่สามารถคำนวณได้ว่าเร็วแค่ไหนโดยใช้หน่วยความจำและรูปแบบการคำนวณแบบไหน ฉันมีคำถามพื้นฐานที่สวยงาม แต่ฉันหวังว่าพวกคุณบางคนสามารถช่วยฉันเข้าใจแนวคิดที่อยู่เบื้องหลัง: ทำไมทุกอย่างมีศูนย์กลางอยู่ที่ความคิดและความหมายของภาษา (เช่นภาษาปกติและภาษาที่ไม่มีบริบท) และสิ่งเหล่านี้เกี่ยวข้องและอธิบายความซับซ้อนของอัลกอริทึมและตัวแบบการคำนวณที่เป็นไปได้สำหรับการแก้ปัญหาอย่างไร ฉันอ่านคำถามที่เกี่ยวข้องเหล่านี้: /cstheory/14811/what-is-the-enlightenment-im-supposed-to-attain-after-studying-finite-automata /cstheory/8539/how-practical-is-automata-theory แต่ก็ยังไม่มีคำตอบสำหรับข้อสงสัยของฉันเนื่องจากพวกเขาให้เหตุผลที่สมเหตุสมผลว่าทำไมพวกเขาถึงมีความสำคัญ (ซึ่งฉันเข้าใจ) แต่ไม่ช่วยให้ฉันเข้าใจว่าทำไมทฤษฎีความซับซ้อนจึงยึดถือพวกเขา

3
ทำไมต้อง Miller-Rabin แทนการทดสอบแบบดั้งเดิมของแฟร์มาต์?
จากการพิสูจน์ของมิลเลอร์ - ราบินหากตัวเลขผ่านการทดสอบแบบดั้งเดิมของแฟร์มาต์มันจะต้องผ่านการทดสอบมิลเลอร์ - ราบินด้วยฐานเดียวกัน (ตัวแปรในการพิสูจน์) และความซับซ้อนในการคำนวณก็เหมือนกันaaa ต่อไปนี้มาจากการทดสอบแบบดั้งเดิมของแฟร์มาต์ : ในขณะที่ตัวเลขร์ไมเคิลเป็นอย่างมากที่ทำได้ยากยิ่งกว่าตัวเลขที่สำคัญ, 1มีเพียงพอของพวกเขาว่าการทดสอบ primality แฟร์มาต์มักจะไม่ได้ใช้ในรูปแบบดังกล่าวข้างต้น แต่ส่วนขยายที่มีประสิทธิภาพมากขึ้นอื่น ๆของการทดสอบแฟร์มาต์เช่นเบลลี-PSW, มิลเลอร์ราบินและ Solovay Strassen-มีการใช้กันอย่างแพร่หลาย ประโยชน์ของ Miller-Rabin คืออะไรและเหตุใดจึงกล่าวได้ว่ามีประสิทธิภาพมากกว่าการทดสอบแบบดั้งเดิมของแฟร์มาต์?

2
เราสามารถสร้างการลด Karp จากการลด Cook ระหว่างปัญหา NP ได้หรือไม่?
เรามีหลายคำถามเกี่ยวกับความสัมพันธ์ของการปรุงอาหารและการลดคาร์พ เป็นที่ชัดเจนว่าการลด Cook (การลดจำนวนพหุนามพหุนามเวลา) ไม่ได้กำหนดแนวความคิดความสมบูรณ์แบบเดียวกับการลด Karp (การลดจำนวนพหุนามเวลาหลายครั้ง) ซึ่งมักใช้ โดยเฉพาะอย่างยิ่งการลด Cook ไม่สามารถแยก NP จาก co-NP แม้ว่า P NP ดังนั้นเราไม่ควรใช้ Cook Reduction ในการพิสูจน์การลดลงโดยทั่วไป≠≠\neq ตอนนี้นักเรียนพบงานที่ได้รับการตรวจสอบโดยเพื่อน [1] ที่ใช้การลด Cook เพื่อแสดงว่าปัญหานั้นยากลำบาก ฉันไม่ได้ให้คะแนนเต็มกับพวกเขาสำหรับการลดที่พวกเขาทำจากที่นั่น แต่ฉันสงสัย เนื่องจากการลดลงของ Cook ทำให้นิยามความแข็งคล้ายกันกับการลด Karp ฉันรู้สึกว่าพวกเขาควรจะแยก P ออกจาก NPC resp co-NPC โดยสมมติว่า P NP โดยเฉพาะอย่างยิ่ง (คล้าย) ต่อไปนี้ควรเป็นจริง:≠≠\neq L1∈ N P , L2∈ N …

1
การพิสูจน์แบบสั้นและลื่นไหลของทฤษฎีคู่ที่แข็งแกร่งสำหรับการเขียนโปรแกรมเชิงเส้น
พิจารณาโปรแกรมเชิงเส้น D u a l : → c ≤ → y T APr i m a l :A x⃗ ≤ b⃗ สูงสุดc⃗ Tx⃗ Primal:Ax→≤b→maxc→Tx→\begin{array}{|ccc|} \hline Primal: & A\vec{x} \leq \vec{b} \hspace{.5cm} & \max \vec{c}^T\vec{x} \\ \hline \end{array} D ยูลิตร:ค⃗ ≤ y⃗ TAขั้นต่ำy⃗ Tข⃗ Dual:c→≤y→TAminy→Tb→\begin{array}{|ccc|} \hline Dual: & \vec{c} \leq \vec{y}^TA …

2
กำหนดรายการโดยใช้ระบบพิมพ์ Hindley-Milner เท่านั้น
ผมทำงานเกี่ยวกับคอมไพเลอร์แคลคูลัสแลมบ์ดาขนาดเล็กที่มีการทำงาน Hindley-มิลเนอร์ระบบอนุมานชนิดและตอนนี้ยังสนับสนุนการปล่อย recursive ของ (ไม่อยู่ในรหัสที่เชื่อมโยง) ซึ่งผมเข้าใจว่าควรจะเพียงพอที่จะทำให้มันสมบูรณ์ทัวริง ปัญหาคือตอนนี้ฉันไม่รู้ว่าจะสนับสนุนรายการหรือไม่ว่าจะสนับสนุนพวกเขาแล้วและฉันก็ต้องหาวิธีการเข้ารหัสพวกเขา ฉันต้องการที่จะสามารถกำหนดได้โดยไม่ต้องเพิ่มกฎใหม่ในระบบประเภท วิธีที่ง่ายที่สุดที่ฉันสามารถนึกถึงรายการxคือเป็นสิ่งที่เป็นnull(หรือรายการที่ว่างเปล่า) หรือคู่ที่มีทั้งxรายการxและ แต่การทำเช่นนี้ฉันต้องสามารถกำหนดคู่และหรือของซึ่งฉันเชื่อว่าเป็นผลิตภัณฑ์และประเภทผลรวม ดูเหมือนว่าฉันสามารถกำหนดคู่ด้วยวิธีนี้: pair = λabf.fab first = λp.p(λab.a) second = λp.p(λab.b) เนื่องจากpairจะมีคนประเภทที่a -> (b -> ((a -> (b -> x)) -> x))หลังจากผ่านการพูดเป็นintและstringก็ต้องการให้ผลอะไรกับชนิด(int -> (string -> x)) -> xซึ่งจะเป็นตัวแทนของคู่ที่และint stringสิ่งที่รบกวนจิตใจฉันอยู่ที่นี่คือถ้านั่นหมายถึงคู่ทำไมมันไม่สมเหตุสมผลเชิงเหตุผลหรือไม่บอกเป็นนัย ๆint and string? อย่างไรก็ตามเทียบเท่ากับ(((int and string) -> x) -> x)ราวกับว่าฉันสามารถมีชนิดผลิตภัณฑ์เป็นพารามิเตอร์ของฟังก์ชันเท่านั้น คำตอบนี้ดูเหมือนจะแก้ไขปัญหานี้ได้ …

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 | …

2
วิธีการหารือค่าสัมประสิทธิ์ในสัญกรณ์ใหญ่ -O
สัญกรณ์ใดที่ใช้เพื่อพูดคุยเกี่ยวกับสัมประสิทธิ์ของฟังก์ชั่นในสัญกรณ์ใหญ่ -O ฉันมีสองหน้าที่: f(x)=7x2+4x+2f(x)=7x2+4x+2f(x) = 7x^2 + 4x +2 g(x)=3x2+5x+4g(x)=3x2+5x+4g(x) = 3x^2 + 5x +4 เห็นได้ชัดว่าทั้งสองฟังก์ชั่นคือแน่นอนแต่นั่นไม่อนุญาตให้มีการเปรียบเทียบมากไปกว่านั้น ฉันจะพูดถึงค่าสัมประสิทธิ์ 7 และ 3 ได้อย่างไรการลดค่าสัมประสิทธิ์เป็น 3 ไม่เปลี่ยนความซับซ้อนเชิงซีโมติค แต่ก็ยังคงสร้างความแตกต่างอย่างมีนัยสำคัญต่อการใช้งานไทม์ / หน่วยความจำO(x2)O(x2)O(x^2)Θ(x2)Θ(x2)\Theta(x^2) มันเป็นเรื่องที่ไม่ถูกต้องที่จะบอกว่าคือและเป็น ? มีสัญกรณ์อื่น ๆ ที่คำนึงถึงสัมประสิทธิ์หรือไม่? หรือจะเป็นวิธีที่ดีที่สุดในการหารือเรื่องนี้คืออะไร?fffO(7x2)O(7x2)O(7x^2)gggO(3x2)O(3x2)O(3x^2)

3
การลดความยาวสายไฟ
ปัญหาของฉันเป็นเช่นนี้: ฉันมีรูปแบบทางกายภาพที่แสดงเป็นกราฟ โหนดแสดงถึง hooks / ducts ที่ลวดสามารถยึดและขอบเป็นการเชื่อมต่อที่เป็นไปได้ระหว่าง 2 โหนดจากที่ลวดสามารถไป มีโหนดพิเศษบางอย่างที่เรียกว่าตัวแยกซึ่งสามารถแยกลวดเส้นเดียวได้ถึง 2 เส้นหรือมากถึง k k สามารถคงที่ได้ในตอนนี้ แต่จะแตกต่างกันไปในแต่ละโหนด ไม่ใช่ทุกโหนดที่เป็นตัวแยก มีแหล่งพลังงานหนึ่งแหล่งที่สายจะเกิดขึ้น มันเป็นแหล่งที่มา ลวดจะต้องถูกนำไปที่อ่างล้างมือ n ขอบสามารถนำลวดจำนวนเท่าใดก็ได้ที่ผ่านเข้าไปในทิศทางใดก็ได้ ความยาวลวดทั้งหมดจะต้องลดลง ธรรมชาติของกราฟระนาบหรือยูคลิดไม่เป็นที่รู้จัก ตัวอย่าง : ด้านล่างเป็นเครือข่ายตัวอย่าง โหนดถูกตั้งชื่อเป็นตัวเลขและขอบมีน้ำหนักเท่ากับ 1 ที่มาคือ Node1 และ Sinks เป็น Node5, Node9 และ Node13 ในกรณีที่ 1 Node6 เป็นโหนดตัวแยก ในกรณีที่ 2 Node6 และ Node4 เป็นโหนดตัวแยก k = …

1
การประมาณเชิงเชิงความสัมพันธ์ของการเกิดซ้ำ (Akra-Bazzi ดูเหมือนจะไม่นำไปใช้)
สมมติว่าอัลกอริทึมมีความสัมพันธ์ที่เกิดขึ้นประจำรันไทม์: T(n)={g(n)+T(n−1)+T(⌊δn⌋)f(n):n≥n0:n&lt;n0T(n)={g(n)+T(n−1)+T(⌊δn⌋):n≥n0f(n):n&lt;n0 T(n) = \left\{ \begin{array}{lr} g(n)+T(n-1) + T(\lfloor\delta n\rfloor ) & : n \ge n_0\\ f(n) & : n < n_0 \end{array} \right. สำหรับบางคนคง&lt;1 สมมติว่าเป็นพหุนามในอาจเป็นกำลังสอง ส่วนใหญ่มีแนวโน้มจะชี้แจงในn0&lt;δ&lt;10&lt;δ&lt;10 < \delta < 1gggnnnfffnnn เราจะวิเคราะห์ runtime ได้ยังไง(ยอดเยี่ยม) ทฤษฎีบทหลักและวิธี Akra-Bazzi ทั่วไปดูเหมือนจะไม่ได้นำมาใช้ΘΘ\Theta

4
ตัวอย่างของอัลกอริทึมที่คำสั่งต่ำมีอิทธิพลเหนือรันไทม์สำหรับการใช้งานจริงหรือไม่?
สัญกรณ์ Big-O ซ่อนปัจจัยที่คงที่ดังนั้นอัลกอริทึมตัวจึงไม่สามารถใช้ได้กับขนาดอินพุตที่เหมาะสมใด ๆ เนื่องจากสัมประสิทธิ์ของเทอมnนั้นมีขนาดใหญ่มากO(n)O(n)O(n)nnn จะมีผู้ใดขั้นตอนวิธีการที่รู้จักกันมี runtime คือแต่มีบางใบสั่งต่ำo ( F ( n ) )คำที่มีขนาดใหญ่เพื่อให้สำหรับการป้อนข้อมูลที่เหมาะสมขนาดมันสมบูรณ์ครอบงำรันไทม์? ฉันต้องการใช้อัลกอริทึมเช่นนี้เป็นตัวอย่างในหลักสูตรอัลกอริทึมเพราะมันให้เหตุผลที่ดีว่าทำไมสัญกรณ์ O-Big ไม่ใช่สิ่งใดเลยต( f( n ) )O(ฉ(n))O(f(n))o (f( n ) )โอ(ฉ(n))o(f(n)) ขอบคุณ!

3
โครงสร้างข้อมูลใดจะเก็บช่วงจำนวนเต็มได้อย่างมีประสิทธิภาพ
ฉันต้องการเก็บสะสมจำนวนเต็มในช่วง 0 ถึง 65535 เพื่อที่ฉันจะสามารถทำสิ่งต่อไปนี้ได้อย่างรวดเร็ว: ใส่จำนวนเต็มใหม่ แทรกช่วงของจำนวนเต็มต่อเนื่อง ลบจำนวนเต็ม ลบจำนวนเต็มทั้งหมดด้านล่างเป็นจำนวนเต็ม ทดสอบว่ามีจำนวนเต็มหรือไม่ ข้อมูลของฉันมีคุณสมบัติที่มักจะมีจำนวนเต็มในคอลเลกชัน ตัวอย่างเช่นการรวบรวมอาจ ณ เวลาหนึ่งจะเป็น: { 121, 122, 123, 124, 3201, 3202, 5897, 8912, 8913, 8914, 18823, 18824, 40891 } วิธีที่ง่ายที่สุดคือการใช้ต้นไม้ไบนารีแบบสมดุลเช่น C ++ std :: set อย่างไรก็ตามโดยที่ฉันไม่ได้ใช้ประโยชน์จากความจริงที่ว่าฉันมักจะมีจำนวนของตัวเลข บางทีอาจเป็นการดีกว่าที่จะเก็บสะสมของช่วง? แต่นั่นหมายความว่าช่วงจะต้องสามารถแยกย่อยได้ถ้าจำนวนเต็มที่อยู่ตรงกลางถูกลบออกหรือรวมเข้าด้วยกันถ้าช่องว่างระหว่างสองช่วงเต็ม มีโครงสร้างข้อมูลใดที่มีอยู่ซึ่งเหมาะสำหรับปัญหานี้หรือไม่?

2
ชัดเจนสมบูรณ์พิสูจน์ว่าเป็นภาษาทัวริงแข่งขัน?
ฉันเคยเห็นเว็บไซต์ที่อ้างว่า "พิสูจน์" ว่า HTML5 + CSS นั้นกำลังทำให้สมบูรณ์ ฉันได้เห็นเว็บไซต์ที่อ้างว่า "พิสูจน์" ว่า SQL นั้นเป็นทัวริงที่สมบูรณ์ ฉันเคยเห็นเว็บไซต์จำนวนมากที่อ้างว่า "อธิบาย" ว่าทัวริงสมบูรณ์หมายความว่าอย่างไร พอ! ฉันจะหาหนังสือ (เขียนโดยผู้เชี่ยวชาญในทฤษฎีการคำนวณ) หรือบทความที่ผ่านการตรวจสอบโดยเพื่อน (ในวารสารที่มีชื่อเสียง) ที่แสดงหลักฐานว่า "ภาษา XYZ นี้สามารถอธิบายเครื่องคำนวณซึ่งมีอำนาจการคำนวณเดียวกัน เป็นทัวริงจักร "?

8
คำนามที่สอดคล้องกันสำหรับ“ ผลข้างเคียงฟรี” หรือไม่
สำหรับฟังก์ชั่นหรือการคำนวณเรามีเงื่อนไขดังนี้: กำหนดขึ้น - กำหนด บริสุทธิ์ - ความบริสุทธิ์ ตอนนี้คำนามที่เกี่ยวข้องที่ถูกต้องสำหรับผลข้างเคียงฟรีคืออะไร? "ผลข้างเคียง freeness"? "เสรีภาพผลข้างเคียง"? "Non-ด้านที่มีประสิทธิภาพ"?

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