Aralin 1Pagpili ng Collision Strategy para sa Static Contexts: Open Addressing vs Static Separate Chaining gamit ang ArraysNaghahambing ng open addressing at static separate chaining para sa fixed-memory systems, na nag-aanalisa ng cache behavior, fragmentation, implementation complexity, at mga gabay sa pagpili ng collision strategy sa embedded C projects.
Pagsusuri ng mga katangian ng open addressingPagsusuri ng static separate chainingLayout ng memorya at cache friendlinessComplexity at implementation effortMga gabay sa pagpili ng estratehiyaAralin 2Memory at Time Complexity: Pagdokumenta ng Worst at Expected Probes, Mga Rekomendasyon sa Table Load Factor para sa EmbeddedNag-aanalisa ng memory at time complexity ng static hash tables, na nagdidokumenta ng worst-case at expected probe counts, load factor limits, at praktikal na mga rekomendasyon sa sizing na naaayon sa mga aplikasyon ng embedded sensor.
Pag-aanalisa ng worst-case probe lengthExpected probes sa ilalim ng random hashingEpekto ng load factor sa performanceMemory footprint at table sizingMga gabay sa tuning para sa embeddedAralin 3Ligtas na Paghawak ng Pointer: Paggamit ng Indices sa Halip na Pointers, Bounds Checks, at Pag-iwas sa NULL DereferencesTinutukan ang ligtas na paghawak ng pointer sa static hash tables sa pamamagitan ng paggamit ng indices sa halip na raw pointers, ipinatutupad ang bounds checks, at disenyo ng mga API na nag-iwas sa NULL dereferences at dangling references sa C code.
Indices vs pointers sa static tablesPagsasagawa ng robust bounds checkingPag-iwas sa NULL at dangling referencesLigtas na pagkonvert ng indices sa pointersMga pattern ng API na nagpapatupad ng kaligtasanAralin 4Open Addressing Techniques: Linear Probing, Quadratic Probing, Tombstones, at Deletion Semantics Nang Walang Dynamic MemoryInilalarawan ang open addressing sa static tables, kabilang ang linear at quadratic probing, tombstone markers, at mga tuntunin sa pag-delete na nag-iwas sa dynamic allocation habang pinapanatili ang probe chains at predictable performance sa mga pagsasagawa sa C.
Linear probing: algorithm at trade-offsQuadratic probing: clustering behaviorPagdidisenyo at paggamit ng tombstone markersDeletion semantics at pagkukumpuni ng probe chainPagkilala ng full table at failure modesAralin 5Integration sa Circular Buffer: Pananatiling Pinakabagong Pagbasa at mga Patakaran para sa Konsistensi (Write-Order, Timestamps)Sinusuri kung paano nakikipagtulungan ang static hash table sa circular buffer upang panatilihin ang pinakabagong mga pagbasa ng sensor, i-define ang write ordering, gumamit ng timestamps para sa freshness, at panatilihin ang konsistensi kapag may mga updates o concurrent-like accesses.
Pagmama-map ng sensor IDs sa circular buffer slotsPag-imbak lamang ng pinakabagong pagbasa bawat sensorTimestamp fields at monotonic orderingPaghawak ng overwrite at wrap-around casesMga tuntunin sa konsistensi para sa concurrent-style accessAralin 6init_table: Pag-set ng Empty Markers, Initialization ng Free Lists o TombstonesIpinaliliwanag ang mga responsibilidad ng init_table, tulad ng pag-set ng empty markers, initialization ng free lists o tombstones, paglilinis ng metadata, at pagsisiguro na nagsisimula ang table sa konsistenteng, na-verify na estado bago ang unang paggamit.
Pagpili at pag-set ng empty markersInitialization ng tombstone at state flagsPagtatayo ng initial free-list structuresPag-zero o pag-sanitize ng table memoryMga validation checks pagkatapos ng initializationAralin 7insert_or_update_reading: Insert, Update, Paghawak ng Full Table, at Return CodesInilalarawan ang API ng insert_or_update_reading, kabilang ang insertion, in-place update, paghawak ng full table, return codes, at kung paano i-integrate ang collision handling habang pananatiling simple at matibay ang interface sa C.
Function prototype at mga pagpipilian ng parameterInsert path para sa bagong sensor IDsUpdate path para sa umiiral nang sensor IDsPaghawak ng full table at error returnsPagdidisenyo ng malinaw na status at error codesAralin 8Pagdidisenyo ng Bucket Array: Pagpili ng Table Size, Prime Sizing, at Compile-Time ConstantsInilalarawan kung paano magdisenyo ng bucket array, kabilang ang pagpili ng table size, prime o power-of-two sizing, compile-time constants, at mga trade-off sa pagitan ng paggamit ng memorya, bilis, at simplicity ng hash function.
Prime vs power-of-two table sizesPaghahambing ng table size sa key capacityPaggamit ng compile-time constants sa CPagbalanse ng memorya at performancePagsusuri para sa mga hinaharap na adjustments sa lakiAralin 9Static Chaining gamit ang Arrays: Node Pool Design, Next Indexes, at Free-List Management sa Static MemoryTinutukan ang static separate chaining gamit ang arrays, kabilang ang layout ng node pool, next index links, free-list management, at kung paano isagawa ang insertion, deletion, at traversal nang walang heap allocation sa constrained environments.
Pagdidisenyo ng layout ng node pool arrayPaggamit ng next indexes sa halip na pointersPagpapatakbo ng free-list sa static memoryInsertion at deletion sa static chainsPagkilala ng pool exhaustion at errorsAralin 10Mga Representasyon ng Key at Value: Paggamit ng uint8_t Sensor ID at SensorReading Copy SemanticsIpinaliliwanag kung paano kumatawan sa mga key at value gamit ang uint8_t sensor IDs at SensorReading structs, na nakatuon sa copy semantics, alignment, padding, at pag-iwas sa aliasing o lifetime issues sa static hash table.
Pagpili ng uint8_t para sa sensor ID keysPagdidisenyo ng SensorReading structCopy semantics vs pointer semanticsAlignment, padding, at struct layoutPag-validate at pag-normalize ng sensor IDsAralin 11Pagpili ng Hash Function para sa Maliit na Keyspace: Identity, Multiplicative, at Masking para sa 0–255 IDsTumatalakay ng mga hash functions para sa maliit na uint8_t keyspaces, kabilang ang identity mapping, multiplicative hashing, masking, at kung paano balansehin ang simplicity, kalidad ng distribution, at computational cost para sa 0–255 sensor IDs.
Identity hash para sa dense ID rangesMultiplicative hashing para sa uint8_t keysBit masking at table index derivationPag-iwas sa systematic clustering patternsPagsubok ng distribution gamit ang sample dataAralin 12find_reading_by_id: Probe Sequences, Not-Found vs Found Responses, at Ligtas na Copy-Out PatternsNakatuon sa find_reading_by_id, kabilang ang probe sequences, pagkakaiba ng found mula sa not-found, ligtas na pagkopya ng SensorReading mula sa table, at pag-iwas sa undefined behavior o stale data exposure sa C.
Function signature at return patternsPagsasagawa ng probe sequences para sa lookupPaghawak ng not-found vs found resultsLigtas na copy-out ng SensorReading valuesPag-iwas sa stale o partially written data