ග්ලෝබල් යනු දත්ත ගබඩා කිරීම සඳහා නිධානයක් වන කඩු ය. විරල අරා. 3 කොටස

ග්ලෝබල් යනු දත්ත ගබඩා කිරීම සඳහා නිධානයක් වන කඩු ය. විරල අරා. 3 කොටසපෙර කොටස් වල (1, 2) අපි Globals ගැන කතා කළේ ගස් විදියට, මේකෙදි අපි globals බලන්නේ spare arrays විදියට.

විරල අරාව බොහෝ අගයන් එකම අගයක් ගන්නා අරාව වර්ගයකි.

ප්‍රායෝගිකව, විරල අරා බොහෝ විට විශාල වන අතර සමාන මූලද්‍රව්‍ය සමඟ මතකය අල්ලා ගැනීමේ තේරුමක් නැත. එබැවින්, සමාන අගයන් ගබඩා කිරීමේදී මතකය අපතේ නොයන ලෙස විරල අරාවන් ක්රියාත්මක කිරීම අර්ථවත් කරයි.
සමහර ක්‍රමලේඛන භාෂාවල, විරල අරාවන් භාෂාව තුළම ඇතුළත් වේ, උදාහරණයක් ලෙස ජේ, MATLAB. වෙනත් ක්‍රමලේඛන භාෂාවලට ඒවා ක්‍රියාත්මක කිරීමට ඔබට ඉඩ සලසන විශේෂ පුස්තකාල ඇත. C++ සඳහා - අයිගන් I.

විරල අරා ක්‍රියාත්මක කිරීම සඳහා ග්ලෝබල් හොඳ අපේක්ෂකයින් වන්නේ:

  1. ඔවුන් නිශ්චිත නෝඩ් වල අගයන් පමණක් ගබඩා කරන අතර නිර්වචනය නොකළ අගයන් ගබඩා නොකරයි;
  2. නෝඩයක අගයට ප්‍රවේශ වීම සඳහා වන අතුරු මුහුණත බහුමාන අරා මූලද්‍රව්‍යයකට ප්‍රවේශය ක්‍රමලේඛන භාෂා කීයක් ක්‍රියාත්මක කරන්නේද යන්නට අතිශයින්ම සමාන වේ.
    Set ^a(1, 2, 3)=5
    Write ^a(1, 2, 3)

  3. Global යනු දත්ත ගබඩා කිරීම සඳහා තරමක් පහත් මට්ටමේ ව්‍යුහයකි, එබැවින් එයට කැපී පෙනෙන වේග ලක්ෂණ ඇත (තත්පරයට සිය දහස් ගණනක සිට මිලියන දස දහස් ගණනක ගනුදෙනු, දෘඩාංග මත පදනම්ව, පහත බලන්න). 1)

ගෝලීය යනු ස්ථීර ව්‍යුහයක් බැවින්, RAM ප්‍රමාණය ප්‍රමාණවත් නොවන බව කලින් දැනගත් විට ඒවා මත විරල අරාවන් නිර්මාණය කිරීම අර්ථවත් කරයි.

විරල අරාව ක්‍රියාත්මක කිරීම්වල එක් ගුණාංගයක් වන්නේ නිර්වචනය නොකළ කොටුවකට ප්‍රවේශයක් සිදු කළහොත් යම් පෙරනිමි අගයක් ලබා දීමයි.

මෙය ශ්‍රිතය භාවිතයෙන් ක්‍රියාත්මක කළ හැක $GET COS හි. මෙම උදාහරණය 3-මාන අරාවක් සලකා බලයි.

SET a = $GET(^a(x,y,z), defValue)

විරල අරාවන් අවශ්‍ය කාර්යයන් මොනවාද සහ ගෝලීය වලට උදව් කරන්නේ කෙසේද?

යාබද (සම්බන්ධතා) අනුකෘතිය

එවැනි matrices ප්‍රස්ථාර නිරූපණය කිරීමට භාවිතා කරයි:

ග්ලෝබල් යනු දත්ත ගබඩා කිරීම සඳහා නිධානයක් වන කඩු ය. විරල අරා. 3 කොටස

පැහැදිලිවම, ප්‍රස්ථාරය විශාල වන තරමට, න්‍යාසයේ ශුන්‍ය වැඩි වේ. උදාහරණයක් ලෙස, අපි සමාජ ජාල ප්‍රස්ථාරයක් ගෙන එය සමාන අනුකෘතියක ස්වරූපයෙන් ඉදිරිපත් කරන්නේ නම්, එය සම්පූර්ණයෙන්ම පාහේ ශුන්‍ය වලින් සමන්විත වේ, i.e. විරල අරාවක් වනු ඇත.

Set ^m(id1, id2) = 1 
Set ^m(id1, id3) = 1 
Set ^m(id1, id4) = 1 
Set ^m(id1) = 3 
Set ^m(id2, id4) = 1 
Set ^m(id2, id5) = 1 
Set ^m(id2) = 2
....

මෙම උදාහරණයේ දී, අපි ගෝලීය වශයෙන් ඉතිරි කරමු ^m සම්බන්ධතා න්‍යාසය, මෙන්ම එක් එක් නෝඩයේ දාර ගණන (මිතුරන් කවුරුන්ද සහ මිතුරන් ගණන).

ප්‍රස්ථාරයේ ඇති මූලද්‍රව්‍ය සංඛ්‍යාව මිලියන 29 කට වඩා වැඩි නොවේ නම් (මෙම සංඛ්‍යාව 8 * හි ගුණිතය ලෙස ගනු ලැබේ. උපරිම රේඛා ප්රමාණය), එනම්, එවැනි න්‍යාස ගබඩා කිරීම සඳහා ඊටත් වඩා ලාභදායී ක්‍රමයක් වන්නේ බිට් නූල් ය, මන්ද ඒවා ක්‍රියාත්මක කිරීම විශාල හිඩැස් විශේෂ ආකාරයකින් ප්‍රශස්ත කරයි.

බිටු නූල් සමඟ හැසිරවීම් ශ්රිතය මගින් සිදු කරනු ලැබේ $BIT.

; установка бита
SET $BIT(rowID, positionID) = 1
; получение бита
Write $BIT(rowID, positionID)

රාජ්ය යන්ත්රය සංක්රාන්ති වගුව

පරිමිත ස්වයංක්‍රීය යන්ත්‍රයක සංක්‍රාන්ති ප්‍රස්ථාරය සාමාන්‍ය ප්‍රස්ථාරයක් වන බැවින්, පරිමිත ස්වයංක්‍රීය යන්ත්‍රයේ සංක්‍රාන්ති වගුව ඉහත සාකච්ඡා කළ යාබද අනුකෘතියම වේ.

සෛලීය ස්වයංක්රීය

ග්ලෝබල් යනු දත්ත ගබඩා කිරීම සඳහා නිධානයක් වන කඩු ය. විරල අරා. 3 කොටස

වඩාත් ප්රසිද්ධ සෙලියුලර් ස්වයංක්රීය වේ ක්රීඩාව "ජීවිතය", එහි නීති නිසා (සෛලයක් බොහෝ අසල්වැසියන් සිටින විට, එය මිය යයි) විරල අරාවකි.

ස්ටීවන් වුල්ෆ්‍රම් විශ්වාස කරන්නේ සෛලීය ස්වයංක්‍රීය බව ය නව විද්‍යා ක්ෂේත්‍රය. 2002 දී, ඔහු පිටු 1280 කින් යුත් පොතක් ප්‍රකාශයට පත් කළේය, A New Kind of Science, එහි ඔහු පුළුල් ලෙස තර්ක කරන්නේ සෙලියුලර් ස්වයංක්‍රීයකරණයේ දියුණුව හුදකලා නොවන නමුත් ඒවා කල් පවතින ඒවා වන අතර විද්‍යාවේ සියලුම ක්ෂේත්‍ර සඳහා විශාල ඇඟවුම් ඇති බවයි.

පරිගණකයක ක්‍රියාත්මක කළ හැකි ඕනෑම ඇල්ගොරිතමයක් සෛලීය ස්වයංක්‍රීය යන්ත්‍රයක් භාවිතයෙන් ක්‍රියාත්මක කළ හැකි බව ඔප්පු වී ඇත. සෛලීය ස්වයංක්‍රීයකරණය ගතික පරිසරයන් සහ පද්ධති ආදර්ශන කිරීමට, ඇල්ගොරිතම ගැටළු විසඳීමට සහ වෙනත් අරමුණු සඳහා භාවිතා වේ.

අපට විශාල ක්ෂේත්‍රයක් තිබේ නම් සහ සෛලීය ස්වයංක්‍රීය යන්ත්‍රයක සියලුම අතරමැදි තත්වයන් වාර්තා කිරීමට අවශ්‍ය නම්, එය ගෝලීය භාවිතා කිරීම අර්ථවත් කරයි.

සිතියම් විද්‍යාව

විරල අරා භාවිතා කරන විට මගේ මතකයට එන පළමු දෙය නම් කාර්යයන් සිතියම්ගත කිරීමයි.

රීතියක් ලෙස, සිතියම් මත හිස් ඉඩ ගොඩක් තිබේ. සිතියම විශාල පික්සල ලෙස නිරූපණය කරන්නේ නම්, පෘථිවියේ පික්සල වලින් 71% ක් සාගරයෙන් අල්ලා ගනු ඇත. විරල අරාව. ඔබ මිනිස් අත්වල වැඩ පමණක් යෙදුවහොත්, හිස් අවකාශය 95% ට වඩා වැඩි වනු ඇත.

ඇත්ත වශයෙන්ම, කිසිවෙකු raster arrays ආකාරයෙන් සිතියම් ගබඩා නොකරයි; දෛශික නිරූපණයක් භාවිතා වේ.
නමුත් දෛශික සිතියම් යනු කුමක්ද? මෙය එක්තරා ආකාරයක රාමුවක් සහ ලක්ෂ්‍ය වලින් සමන්විත බහු රේඛා සහ බහුඅස්‍රයකි.
අත්‍යවශ්‍යයෙන්ම ලකුණු සහ ඒවා අතර සම්බන්ධතා පිළිබඳ දත්ත සමුදායක්.

වඩාත්ම අභිලාෂකාමී සිතියම්ගත කිරීමේ මෙහෙයුමක් වන්නේ අපගේ මන්දාකිණිය සිතියම්ගත කිරීම සඳහා Gaia දුරේක්ෂ මෙහෙයුමයි. සංකේතාත්මකව කිවහොත්, අපගේ මන්දාකිණිය, සමස්ත විශ්වය මෙන්, අඛණ්ඩ විරල අරාවකි: දුර්ලභ කුඩා ලක්ෂ්‍ය ඇති විශාල හිස් අවකාශයන් - තරු. හිස් ඉඩ 99,999999.......%. අපගේ මන්දාකිනියේ සිතියම ගබඩා කිරීම සඳහා ගෝලීය දත්ත ගබඩාවක් තෝරා ගන්නා ලදී - Caché.

මෙම ව්‍යාපෘතියේ ගෝලීය ව්‍යුහයේ නිශ්චිත ව්‍යුහය මම නොදනිමි, එය සමාන දෙයක් යැයි මට උපකල්පනය කළ හැකිය:

Set ^galaxy(b, l, d) = 1; Номер звезды по каталогу, если есть
Set ^galaxy(b, l, d, "name") = "Sun"
Set ^galaxy(b, l, d, "type") = "normal" ; варианты blackhole, quazar, red_dwarf и т.д.
Set ^galaxy(b, l, d, "weight") = 14E50
Set ^galaxy(b, l, d, "planetes") = 7
Set ^galaxy(b, l, d, "planetes", 1) = "Mercury"
Set ^galaxy(b, l, d, "planetes", 1, weight) = 1E20
...

b, l, d කොහෙද මන්දාකිණි ඛණ්ඩාංක අක්ෂාංශ, දේශාංශ සහ සූර්යයාට ඇති දුර.

ගෝලීයවල නම්‍යශීලී ව්‍යුහය ඔබට තරු සහ ග්‍රහලෝකවල අවශ්‍ය ඕනෑම ලක්ෂණයක් සුරැකීමට ඉඩ සලසයි, මන්ද ගෝලීය මත පදනම් යෝජනා ක්‍රමය-අඩු වේ.

අපගේ විශ්වයේ සිතියම ගබඩා කිරීම සඳහා, Caché තෝරාගෙන ඇත්තේ එහි නම්‍යශීලී බව සඳහා පමණක් නොව, වේගවත් සෙවීම් සඳහා දර්ශක ගෝලීය නිර්මාණය කරන අතරම, ඉතා ඉක්මනින් දත්ත ප්‍රවාහයක් ගබඩා කිරීමේ හැකියාව සඳහා ය.

අපි නැවත පෘථිවියට ගියහොත්, සිතියම් ව්‍යාපෘති ගෝලීය වශයෙන් නිර්මාණය විය OpenStreetMap XAPI සහ OpenStreetMap දෙබලක - FOSM.

මෑතකදී hackathon Caché භූගෝලීය දර්ශක ක්රියාත්මක කරන ලදී භුමිය පිලිබඳ. ක්රියාත්මක කිරීමේ විස්තර සහිත කතුවරුන්ගෙන් ලිපියක් අපි බලා සිටිමු.

OpenStreetMap XAPI හි ගෝලීය වශයෙන් අවකාශීය දර්ශක ක්‍රියාත්මක කිරීම

පින්තූර උපුටා ගන්නා ලදී මෙම ඉදිරිපත් කිරීම.

මුළු ලෝක ගෝලයම කොටු, පසුව උප චතුරස්‍ර, උප චතුරස්‍ර උප චතුරස්‍ර, යනාදී වශයෙන් බෙදා ඇත. පොදුවේ ගත් කල, ගෝලීය නිර්මාණය කරන ලද ගබඩා කිරීම සඳහා අපට ධූරාවලි ව්‍යුහයක් ලැබේ.

ග්ලෝබල් යනු දත්ත ගබඩා කිරීම සඳහා නිධානයක් වන කඩු ය. විරල අරා. 3 කොටස

ඕනෑම මොහොතක, අපට අවශ්‍ය චතුරස්‍රය ක්ෂණිකව පාහේ ඉල්ලා සිටීමට හෝ එය හිස් කිරීමට හැකි අතර, සියලු උප වර්ග ද ආපසු හෝ ඉවත් කරනු ලැබේ.

ගෝලීය මත සමාන යෝජනා ක්රමයක් ක්රම කිහිපයකින් ක්රියාත්මක කළ හැකිය.

විකල්ප 1:

Set ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 1) = idПервойТочки
Set ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 2) = idВторойТочки
...

විකල්ප 2:

Set ^m('abacdabcdabacdabcda', 1) = idПервойТочки
Set ^m('abacdabcdabacdabcda', 2) = idВторойТочки
...

අවස්ථා දෙකේදීම, ඕනෑම මට්ටමක චතුරස්රයක පිහිටා ඇති ලකුණු ඉල්ලීමට COS/M භාවිතා කිරීම අපහසු නැත. පළමු විකල්පය තුළ ඕනෑම මට්ටමක අවකාශයේ වර්ග කැබලි පිරිසිදු කිරීම තරමක් පහසු වනු ඇත, නමුත් මෙය කලාතුරකින් අවශ්ය වේ.

පහළ මට්ටමේ වර්ග වලින් එකක උදාහරණයක්:

ග්ලෝබල් යනු දත්ත ගබඩා කිරීම සඳහා නිධානයක් වන කඩු ය. විරල අරා. 3 කොටස

XAPI ව්‍යාපෘතියේ ගෝලීය කිහිපයක් මෙන්න: ගෝලීය මත දර්ශකයක් නියෝජනය කිරීම:

ග්ලෝබල් යනු දත්ත ගබඩා කිරීම සඳහා නිධානයක් වන කඩු ය. විරල අරා. 3 කොටස

ගෝලීය ^මාර්ගය ලකුණු ගබඩා කිරීමට භාවිතා කරයි පොලිලීන් (මාර්ග, කුඩා ගංගා, ආදිය) සහ බහුඅස්ර (වසා ඇති ප්රදේශ: ගොඩනැගිලි, වනාන්තර, ආදිය).

ගෝලීය මත විරල අරා භාවිතය පිළිබඳ දළ වර්ගීකරණය.

  1. අපි සමහර වස්තූන්ගේ ඛණ්ඩාංක සහ ඒවායේ තත්වයන් (සිතියම්කරණය, සෛලීය ස්වයංක්‍රීය) ගබඩා කරමු.
  2. අපි විරල matrices ගබඩා කරමු.

2 වන අවස්ථාව සඳහා) මූලද්‍රව්‍යයට අගයක් පවරා නොමැති විශේෂිත ඛණ්ඩාංකයක් ඉල්ලා සිටින විට, අපි පෙරනිමි විරල අරා මූලද්‍රව්‍යයේ අගය ලබා ගත යුතුය.

ගෝලීය වශයෙන් බහුමාන න්‍යාස ගබඩා කිරීමේදී අපට ලැබෙන ප්‍රසාද දීමනා

පේළි, ගුවන් යානා, කැට යනාදී ගුණාකාර ඉඩ කඩ ඉක්මනින් ඉවත් කරන්න සහ/හෝ තෝරන්න. නිඛිල දර්ශක භාවිතා කරන අවස්ථා සඳහා, පේළි, ගුවන් යානා, කැට යනාදී ගුණාකාර අවකාශයේ කොටස් ඉක්මනින් ඉවත් කිරීමට සහ/හෝ ලබා ගැනීමට ඇති හැකියාව ප්‍රයෝජනවත් විය හැක.

කණ්ඩායම Kill අපට තනි මූලද්‍රව්‍යයක් හෝ පේළියක් හෝ සම්පූර්ණ ගුවන් යානයක් මකා දැමිය හැක. ග්ලෝබල් වල ගුණාංග වලට ස්තූතියි, මෙය ඉතා ඉක්මනින් සිදු වේ - මූලද්රව්යයෙන් මූලද්රව්ය ඉවත් කිරීමට වඩා දහස් ගුණයකින් වේගවත් වේ.

රූපය ගෝලීය වශයෙන් ත්‍රිමාන අරාවක් පෙන්වයි ^a සහ විවිධ ආකාරයේ මකාදැමීම්.

ග්ලෝබල් යනු දත්ත ගබඩා කිරීම සඳහා නිධානයක් වන කඩු ය. විරල අරා. 3 කොටස

දන්නා දර්ශක භාවිතයෙන් ඉඩ කොටස් තෝරා ගැනීමට, ඔබට විධානය භාවිතා කළ හැකිය ඒකාබද්ධ කරන්න.

තීරු විචල්‍යයට අනුකෘති තීරුවක් තේරීම:

; Зададим трёхмерный разреженный массив 3x3x3
Set ^a(0,0,0)=1,^a(2,2,0)=1,^a(2,0,1)=1,^a(0,2,1)=1,^a(2,2,2)=1,^a(2,1,2)=1
Merge Column = ^a(2,2)
; Выведем переменную Column
Zwrite Column

නිගමනය:

Column(0)=1
Column(2)=1

තීරු විචල්‍යයේ සිත්ගන්නා කරුණ නම් අපට විරල අරාවක් ද තිබීමයි, එය ද ප්‍රවේශ විය යුතුය $GET, පෙරනිමි අගයන් එහි ගබඩා කර නොමැති බැවින්.

අවකාශයේ කුට්ටි තෝරාගැනීම ද ශ්‍රිතය භාවිතයෙන් කුඩා වැඩසටහනක් හරහා සිදු කළ හැක $Order. දර්ශක ප්‍රමාණකරණය නොකළ (කාටෝග්‍රැෆි) අවකාශයන්හි මෙය විශේෂයෙන් පහසු වේ.

නිගමනය

වත්මන් කාලය නව අභිලාෂකාමී කාර්යයන් ඉදිරිපත් කරයි. ප්‍රස්තාර බිලියන ගනනක සිරස් වලින් සෑදිය හැක, සිතියම් බිලියන ගනනකින් සෑදිය හැක, සමහරෙකුට සෙලියුලර් ඔටෝමේටා මත තමන්ගේම විශ්වය ධාවනය කිරීමට පවා අවශ්‍ය විය හැක (1, 2).

විරල අරා වලින් දත්ත පරිමාව තවදුරටත් RAM වලට නොගැලපෙන විට, නමුත් ඔබ ඔවුන් සමඟ වැඩ කිරීමට අවශ්ය නම්, ගෝලීය සහ COS මත සමාන ව්යාපෘති ක්රියාත්මක කිරීමේ හැකියාව සලකා බැලීම වටී.

ඔබගේ අවදානය පිළිබඳ ස්තූතියි! අදහස් දැක්වීමේදී ඔබගේ ප්රශ්න සහ පැතුම් සඳහා අපි බලා සිටිමු.

වගකීමෙන් යුතුව ඔබ එවන: මෙම ලිපිය සහ එයට මගේ අදහස් මගේ මතය වන අතර අන්තර් පද්ධති සංස්ථාවේ නිල තනතුරට කිසිදු සම්බන්ධයක් නැත.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න