คำถามติดแท็ก hash-tables

โครงสร้างข้อมูลแผนที่ จำกัด ที่จัดการกับค่าที่จัดเก็บโดยใช้ฟังก์ชันที่จับคู่ค่าจำนวนมากกับที่อยู่ไม่กี่แห่ง

4
(เมื่อใด) คือการค้นหาตารางแฮช O (1)?
มักจะกล่าวว่าการค้นหาตารางแฮชทำงานในเวลาคงที่: คุณคำนวณค่าแฮชซึ่งให้ดัชนีสำหรับการค้นหาอาร์เรย์ แต่สิ่งนี้ไม่สนใจการชน ในกรณีที่เลวร้ายที่สุดทุกรายการเกิดขึ้นในถังเดียวกันและเวลาค้นหากลายเป็นเชิงเส้น ( )Θ(n)Θ(n)\Theta(n) มีเงื่อนไขเกี่ยวกับข้อมูลที่สามารถทำการค้นหาตารางแฮชอย่างแท้จริงหรือไม่ เป็นค่าเฉลี่ยเท่านั้นหรือตารางแฮชมีค้นหาตัวพิมพ์ที่เลวร้ายที่สุด?O ( 1 )O(1)O(1)O(1)O(1)O(1)O(1) หมายเหตุ: ฉันมาจากมุมมองของโปรแกรมเมอร์ที่นี่ เมื่อฉันเก็บข้อมูลในตารางแฮชมันมักจะเป็นสตริงหรือโครงสร้างข้อมูลคอมโพสิตบางส่วนและข้อมูลจะเปลี่ยนแปลงในช่วงอายุของตารางแฮช ดังนั้นในขณะที่ฉันชื่นชมคำตอบเกี่ยวกับแฮ็กที่สมบูรณ์แบบพวกเขาน่ารัก แต่เป็นข้อมูลเล็ก ๆ น้อย ๆ และไม่สามารถใช้งานได้จริงจากมุมมองของฉัน การติดตามผล PS: ข้อมูลประเภทใดที่มีการดำเนินการตารางแฮช O (1)

4
ทำไมจึงเป็นการดีที่สุดที่จะใช้หมายเลขเฉพาะเป็น mod ในฟังก์ชัน hashing
ถ้าฉันมีรายการของค่าคีย์จาก 1 ถึง 100 และฉันต้องการจัดระเบียบพวกเขาในอาร์เรย์ 11 ถังฉันได้รับการสอนให้สร้างฟังก์ชั่น mod H=kmod 11H=kmod 11 H = k \bmod \ 11 ตอนนี้ค่าทั้งหมดจะถูกวางทีละแถวใน 9 แถว ยกตัวอย่างเช่นในถังแรกจะมี0,11,22…0,11,22…0, 11, 22 \dots\ ในวินาทีจะมี1,12,23…1,12,23…1, 12, 23 \dotsเป็นต้น สมมติว่าฉันตัดสินใจที่จะเป็นเด็กเลวและใช้ฟังก์ชั่นที่ไม่เฉพาะเจาะจงเป็นฟังก์ชัน hashing ของฉัน - ใช้เวลา 12 ใช้ฟังก์ชั่น Hashing H=kmod 12H=kmod 12 H = k \bmod \ 12 จะส่งผลให้ตารางแฮชที่มีค่า0,12,24…0,12,24…0, 12, 24 \dots ในที่ฝากข้อมูลแรก, …

1
ตารางแฮชกับต้นไม้ไบนารี
เมื่อติดตั้งพจนานุกรม ('ฉันต้องการค้นหาข้อมูลลูกค้าตามรหัสลูกค้า') โครงสร้างข้อมูลทั่วไปที่ใช้คือตารางแฮชและแผนภูมิการค้นหาแบบไบนารี ฉันรู้ว่าอินสแตนซ์ที่ห้องสมุด C ++ STL ใช้พจนานุกรม (เรียกพวกเขาว่าแผนที่) โดยใช้แผนภูมิการค้นหาแบบทวิภาค (สมดุล) และกรอบงาน. NET ใช้ตารางแฮชภายใต้ประทุน ข้อดีและข้อเสียของโครงสร้างข้อมูลเหล่านี้คืออะไร มีตัวเลือกอื่นที่เหมาะสมในบางสถานการณ์หรือไม่? โปรดทราบว่าฉันไม่สนใจโดยเฉพาะอย่างยิ่งในกรณีที่ปุ่มมีโครงสร้างพื้นฐานที่แข็งแกร่งกล่าวว่าพวกเขาเป็นจำนวนเต็มทั้งหมดระหว่าง 1 ถึง n หรือบางสิ่งบางอย่าง

1
การเติมตารางการกำหนดเส้นทางของ Pastry ทำงานอย่างไร
คำถามนี้ถูกย้ายจากการแลกเปลี่ยนกองวิศวกรรมซอฟต์แวร์เพราะสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันพยายามใช้ตารางแฮชแบบกระจายของ Pastry แต่มีบางสิ่งที่หลีกเลี่ยงความเข้าใจของฉัน ฉันหวังว่าบางคนสามารถชี้แจงได้ คำเตือน : ฉันไม่ใช่นักเรียนวิทยาศาสตร์คอมพิวเตอร์ ฉันเรียนวิชาวิทยาการคอมพิวเตอร์สองหลักสูตรในชีวิตของฉันและไม่ได้จัดการกับสิ่งที่ซับซ้อนจากระยะไกล ฉันทำงานกับซอฟต์แวร์มาหลายปีแล้วดังนั้นฉันจึงรู้สึกว่าขึ้นอยู่กับภารกิจการนำไปปฏิบัติถ้าฉันสามารถสรุปแนวคิดได้ ดังนั้นฉันอาจจะพลาดอะไรบางอย่างที่ชัดเจน ฉันได้อ่านกระดาษที่ผู้แต่งตีพิมพ์ [1] และฉันมีความก้าวหน้าที่ดี แต่ฉันก็ยังคงติดใจอยู่กับประเด็นนี้ในตารางการจัดเส้นทาง: กระดาษอ้างว่า ตารางการจัดเส้นทางของโหนดคือถูกจัดเป็น แถวที่มีรายการแต่ละรายการ รายการที่แถวของตารางเส้นทางแต่ละอ้างถึงโหนดที่ nodeId แบ่งปัน nodeId ของโหนดปัจจุบันในตัวเลข fi rst n หลัก แต่มีหลักหนึ่งมีค่าที่เป็นไปได้หนึ่งในนอกเหนือจากหลักใน id ของโหนดปัจจุบันRRR⌈log2bN⌉⌈เข้าสู่ระบบ2ข⁡ยังไม่มีข้อความ⌉\lceil \log_{2^b} N\rceil2b−12ข-12^b - 12b−12ข-12^b - 1nnnn+1n+1n + 12b−12ข-12^b - 1n+1n+1n + 1 ย่อมาจากตัวแปรโปรแกรมเฉพาะมัก4 …

5
ข้อมูลประเภทใดที่มีการดำเนินการตารางแฮช O (1)
จากคำตอบถึง(เมื่อ) คือการค้นหาตารางแฮช O (1)? ฉันรวบรวมว่าตารางแฮชมีพฤติกรรมที่เลวร้ายที่สุดกรณีอย่างน้อยตัดจำหน่ายเมื่อข้อมูลเป็นไปตามเงื่อนไขทางสถิติบางอย่างและมีเทคนิคที่จะช่วยทำให้เงื่อนไขเหล่านี้กว้างขึ้นO ( 1 )O(1)O(1) อย่างไรก็ตามจากมุมมองของโปรแกรมเมอร์ฉันไม่ทราบล่วงหน้าว่าข้อมูลของฉันจะเป็นอะไร: มักจะมาจากแหล่งภายนอก และฉันไม่ค่อยมีข้อมูลทั้งหมดในครั้งเดียว: บ่อยครั้งที่การแทรกและการลบเกิดขึ้นในอัตราที่ไม่ต่ำกว่าอัตราการค้นหาดังนั้นการประมวลผลข้อมูลล่วงหน้าเพื่อปรับฟังก์ชั่นแฮชหายไป ดังนั้นการก้าวออกจาก: ให้ความรู้เกี่ยวกับแหล่งข้อมูลฉันจะทราบได้อย่างไรว่าตารางแฮชมีโอกาสที่จะมีการดำเนินงานและอาจใช้เทคนิคใดในการใช้ฟังก์ชันแฮชของฉันO ( 1 )O(1)O(1)

3
“ ข้อมูลที่ไม่ใช่ทางพยาธิวิทยา” หมายความว่าอะไร?
ฉันเข้าคลาสอัลกอริทึมบน Coursera ศาสตราจารย์ในวิดีโอเกี่ยวกับตารางแฮชกล่าวว่า สิ่งที่เป็นจริงคือสำหรับข้อมูลที่ไม่ใช่ทางพยาธิวิทยาคุณจะได้รับการดำเนินการเวลาคงที่ในตารางแฮชที่นำมาใช้อย่างเหมาะสม "ข้อมูลที่ไม่ใช่ทางพยาธิวิทยา" หมายความว่าอะไร? คุณยกตัวอย่างได้บ้าง

1
Universal Hashing ในทางปฏิบัติ
ตระกูลของฟังก์ชันแฮชเป็นสากลถ้า คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับวิกิพีเดียคร่ำเครียดสากลนี้บทความHHHh : คุณ→ { 0 , … , M- 1 }ชั่วโมง:ยู→{0,...,M-1}h: U \rightarrow \{0,\ldots,M-1\}∀ x , y∈ คุณ, x ≠ y⇒ ประชาสัมพันธ์h ∈ H[ h ( x ) = h ( y) ] ≤ 1M∀x,Y∈ยู,x≠Y⇒ราคาชั่วโมง∈H[ชั่วโมง(x)=ชั่วโมง(Y)]≤1M\forall x,y \in U, x \neq y \Rightarrow \Pr_{h \in H}[h(x) = h(y)] \leq \frac{1}{M} …

4
อะไรคือข้อดีของการมีนกกาเหว่าคร่ำเครียดมากกว่าการแฮชที่สมบูรณ์แบบแบบไดนามิก?
ตารางแฮชที่สมบูรณ์แบบไดนามิกและตารางแฮชของนกกาเหว่าเป็นโครงสร้างข้อมูลที่แตกต่างกันสองแบบที่รองรับการค้นหา O (1) กรณีที่เลวร้ายที่สุดและ O (1) การแทรกและการลบตามเวลาที่คาดการณ์ไว้ ทั้งสองต้องการพื้นที่เสริม O (n) และการเข้าถึงตระกูลแฮชฟังก์ชันสำหรับการดำเนินการ ฉันคิดว่าโครงสร้างข้อมูลทั้งสองนี้มีความสวยงามและยอดเยี่ยมในตัวของมันเอง แต่ฉันไม่แน่ใจว่าฉันจะเห็นได้อย่างไรว่าเมื่อใดหนึ่งในโครงสร้างเหล่านี้จะดีกว่ากัน มีบริบทเฉพาะใดในโครงสร้างข้อมูลใดข้อมูลหนึ่งที่มีข้อได้เปรียบที่ชัดเจนกว่าอีก? หรือพวกเขาส่วนใหญ่ใช้แทนกันได้?

1
การแยกประเภทการปรับแต่ง
ที่ทำงานฉันได้รับมอบหมายให้อนุมานข้อมูลบางประเภทเกี่ยวกับภาษาแบบไดนามิก ฉันเขียนลำดับของข้อความไปยังletนิพจน์ที่ซ้อนกันเช่น: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } เนื่องจากฉันเริ่มต้นจากข้อมูลประเภททั่วไปและพยายามอนุมานประเภทที่เฉพาะเจาะจงมากขึ้นตัวเลือกที่เป็นธรรมชาติคือประเภทการปรับแต่ง ตัวอย่างเช่นตัวดำเนินการตามเงื่อนไขส่งคืนการรวมของประเภทของสาขาที่เป็นจริงและเท็จ …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

2
การแฮชใช้การค้นหาต้นไม้แทนรายการ
ฉันกำลังดิ้นรนกับวัสดุการแฮ็กและการค้นหาแบบไบนารี และฉันอ่านว่าแทนที่จะใช้รายการสำหรับจัดเก็บรายการที่มีค่าแฮชเดียวกันมันเป็นไปได้ที่จะใช้แผนภูมิการค้นหาแบบไบนารี่ และฉันพยายามที่จะเข้าใจว่ากรณีที่เลวร้ายที่สุดและเวลาเฉลี่ยในการดำเนินการสำหรับกรณีใด insert, find และ delete มีคุณค่า กรณีเฉลี่ย พวกเขาปรับปรุงด้วยความเคารพในรายการ?

3
เหตุใดการค้นหา hashtable (ไม่ชน) จึงเป็นจริง O (1)
คำเตือน: ฉันรู้ว่ามีคำถามที่คล้ายกันทำให้เกิดเสียงที่นี่แล้วและใน Stackoverflow แต่พวกเขาทั้งหมดเกี่ยวกับการชนซึ่งไม่ใช่สิ่งที่ฉันขอ คำถามของฉันคือทำไมการค้นหาน้อยกว่าO(1)ในตอนแรก? สมมติว่าฉันมี hashtable นี้: Hash Content ------------- ghdjg Data1 hgdzs Data2 eruit Data3 xcnvb Data4 mkwer Data5 rtzww Data6 ตอนนี้ฉันกำลังมองหากุญแจสำคัญในการkที่ฟังก์ชั่นกัญชาให้h(k) h(k) = mkwerแต่การค้นหา "รู้" ว่าแฮชmkwerอยู่ที่อันดับ 5 อย่างไร เหตุใดจึงไม่ต้องเลื่อนผ่านปุ่มทั้งหมดO(n)เพื่อค้นหา แฮชไม่สามารถใช้ที่อยู่ฮาร์ดแวร์บางประเภทได้เพราะฉันสูญเสียความสามารถในการย้ายข้อมูล และเท่าที่ฉันรู้ hashtable ไม่ได้ถูกจัดเรียงไว้บนแฮช (แม้ว่าจะเป็นแล้วการค้นหาก็ต้องใช้O(log n))? การรู้จักแฮชช่วยค้นหาสถานที่ที่ถูกต้องในตารางได้อย่างไร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.