Initializable Array Boundary Management for Constant-Time Initialization
Find Innovative SolutionsGenerate Solutions
Solution Overview
Problem
Conventional initializable arrays require additional space to store management information indicating whether each index has been written to, which increases storage requirements and initialization time proportional to the array size.
Innovation Solution
The array is divided into two areas with a boundary that maintains an integer ratio of unwritten and written blocks, using bidirectional links to manage this information, allowing the array to be initialized and written to in constant time without the need for extra space proportional to the array size.
Engineering Contradictions & Design Principles
Engineering Contradiction Analysis
1Reliability
If conventional initializable arrays store management information for each index to track written status, then write operations can be efficiently managed, but the extra space required increases proportionally with array size
Solution Approach 1:
The array is divided into multiple blocks, each containing a small fixed number of words (e.g., 2-64 words). Instead of managing each individual index, the system manages blocks as units. This segmentation reduces the number of management entries from N (number of indices) to N/B (number of blocks), where B is the block size, thereby reducing the extra space required for management information while maintaining efficient write operation tracking.
2Loss of time
If conventional initializable arrays initialize all elements in fixed time independent of array size, then real-time application requirements are met, but the initialization process still requires proportional extra space for management information
Solution Approach 1:
By segmenting the array into blocks and using a boundary pointer to track the division between initialized and uninitialized blocks, the system achieves constant-time initialization without requiring management information for each individual index. The boundary pointer alone (not proportional to array size) suffices to manage the initialization state of all blocks.
Solution Approach 2:
The invention introduces a new dimensional approach by organizing data in blocks with address words and data words, and using a boundary pointer that operates at the block level rather than the index level. This dimensional shift from index-level management to block-level management enables constant-time initialization with reduced space requirements.
3Productivity
If the array uses bidirectional links between blocks to manage written and unwritten blocks, then the boundary can be efficiently shifted to extend initialized areas, but the link management adds structural complexity
Solution Approach 1:
The array is segmented into blocks with standardized internal structure (address word + data words). This uniform segmentation simplifies the link management because each block follows the same pattern, making the bidirectional links predictable and easy to manage. The regular structure reduces the complexity that would otherwise arise from handling irregular block formats.
Solution Approach 2:
Each block contains an address word that automatically stores the link to the next block, and the boundary pointer automatically indicates the division point. When the boundary shifts, the blocks self-adjust their links through the extend process, reducing the need for complex external management logic. The structure serves itself through its inherent design.
Data Source
AI summary
An initializable array has a plurality of blocks each having an address word and a data word, a boundary indicative of a two-division position where the plurality of blocks is divided into two divided areas and an initial value for each element of the array is stored, the boundary is a position where a ratio for the number of unwritten blocks in a first area and the number of written blocks in a second area is an integer ratio. An array control program causes a computer to execute shifting the boundary to extend the first area and generating an initialized written block in the first area; in a case where a write destination block is an unwritten block in the second area, forming a link between the initialized written block in the first area and the write destination block; and writing a write value to the write destination block.


