Глобал бол өгөгдөл хадгалах эрдэнэсийн сэлэм юм. Сийрэг массив. 3-р хэсэг

Глобал бол өгөгдөл хадгалах эрдэнэсийн сэлэм юм. Сийрэг массив. 3-р хэсэгӨмнөх хэсгүүдэд (1, 2) бид глобалыг мод гэж ярьсан бол энэ удаад бид глобалыг сийрэг массив гэж үзэх болно.

Сийрэг массив Энэ нь ихэнх утгууд нь ижил утгыг авдаг массивын төрөл юм.

Практикт сийрэг массивууд нь ихэвчлэн маш том хэмжээтэй байдаг тул санах ойг ижил элементүүдээр эзлэх нь утгагүй юм. Тиймээс ижил утгыг хадгалахад санах ойг дэмий үрэхгүй байхаар сийрэг массивуудыг хэрэгжүүлэх нь зүйтэй юм.
Зарим програмчлалын хэлэнд сийрэг массивууд нь тухайн хэлэнд багтдаг. жишээ нь Ж, Матлаб. Бусад програмчлалын хэлүүд нь тэдгээрийг хэрэгжүүлэх боломжийг олгодог тусгай номын сантай байдаг. C++-ийн хувьд - Эйген болон бусад.

Глобалчууд сийрэг массивуудыг хэрэгжүүлэхэд сайн нэр дэвшигчид байдаг, учир нь:

  1. Тэд зөвхөн тодорхой зангилааны утгыг хадгалдаг бөгөөд тодорхойгүй байгаа утгыг хадгалдаггүй;
  2. Зангилааны утгад хандах интерфэйс нь олон хэмжээст массивын элементэд хандах хандалтыг хэдэн програмчлалын хэл хэрэгжүүлдэгтэй маш төстэй юм.
    Set ^a(1, 2, 3)=5
    Write ^a(1, 2, 3)

  3. Глобал бол өгөгдөл хадгалах нэлээд доогуур түвшний бүтэц тул хурдны гайхалтай шинж чанартай байдаг (техник хангамжаас хамааран секундэд хэдэн зуун мянгаас хэдэн арван сая гүйлгээ хийх, доороос үзнэ үү). 1)

Глобал нь байнгын бүтэцтэй тул RAM-ийн хэмжээ хангалтгүй байх нь урьдчилан мэдэгдэж байгаа үед тэдгээр дээр сийрэг массив үүсгэх нь утга учиртай юм.

Сийрэг массивын нэг шинж чанар нь тодорхойгүй нүдэнд хандалт хийсэн тохиолдолд анхдагч утгыг буцаах явдал юм.

Үүнийг функцийг ашиглан хэрэгжүүлж болно $GET COS-д. Энэ жишээ нь 3 хэмжээст массивыг авч үздэг.

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

Ямар даалгаварууд нь сийрэг массив шаарддаг бөгөөд глобалууд хэрхэн туслах вэ?

Зэргэлдээ (холболт) матриц

Ийм матрицууд график дүрслэхэд ашигладаг:

Глобал бол өгөгдөл хадгалах эрдэнэсийн сэлэм юм. Сийрэг массив. 3-р хэсэг

График том байх тусам матрицад тэг их байх нь ойлгомжтой. Жишээлбэл, бид нийгмийн сүлжээний графикийг аваад ижил төстэй матриц хэлбэрээр үзүүлбэл энэ нь бараг бүхэлдээ тэгээс бүрдэх болно, өөрөөр хэлбэл. сийрэг массив байх болно.

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 хуудас бүхий "Шинжлэх ухааны шинэ төрөл" номоо хэвлүүлсэн бөгөөд энэ номонд тэрээр эсийн автоматуудын дэвшил нь тусгаарлагдмал биш, харин тогтвортой бөгөөд шинжлэх ухааны бүх салбарт асар их нөлөө үзүүлдэг гэдгийг өргөнөөр нотолсон.

Компьютер дээр ажиллах боломжтой аливаа алгоритмыг үүрэн автомат машин ашиглан хэрэгжүүлж болох нь батлагдсан. Үүрэн автоматыг динамик орчин, системийг загварчлах, алгоритмын асуудлыг шийдвэрлэх болон бусад зорилгоор ашигладаг.

Хэрэв бид асар том талбайтай бөгөөд үүрэн автоматын бүх завсрын төлөвийг бүртгэх шаардлагатай бол глобалыг ашиглах нь утга учиртай юм.

Зураг зүй

Сийрэг массивыг ашиглах үед миний санаанд орж ирдэг хамгийн эхний зүйл бол зураглалын даалгаврууд юм.

Дүрмээр бол газрын зураг дээр маш их хоосон зай байдаг. Хэрэв газрын зургийг том пикселээр дүрсэлсэн бол дэлхийн пикселийн 71% -ийг далай эзэлнэ. Сийрэг массив. Хэрэв та зөвхөн хүний ​​гараар хийсэн бүтээлийг хэрэглэвэл хоосон зай 95% -иас их байх болно.

Мэдээжийн хэрэг, хэн ч газрын зургийг растер массив хэлбэрээр хадгалдаггүй, вектор дүрслэлийг ашигладаг.
Гэхдээ вектор газрын зураг гэж юу вэ? Энэ бол цэгүүдээс бүрдэх нэг төрлийн хүрээ ба полилин, олон өнцөгт юм.
Үндсэндээ цэгүүд болон тэдгээрийн хоорондын холболтын мэдээллийн сан юм.

Газрын зургийн хамгийн том зорилтуудын нэг бол манай галактикийг зураглах Гаиа телескопын даалгавар юм. Дүрсээр хэлбэл, манай галактик нь бүхэл бүтэн орчлон ертөнцтэй адил тасралтгүй сийрэг массив юм: ховор жижиг цэгүүд - одууд байдаг асар том хоосон орон зай. Хоосон зай нь 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.

Саяхан хакатон кэш гео орон зайн индексүүдийг хэрэгжүүлсэн гео орон зайн. Бид зохиогчдоос хэрэгжилтийн дэлгэрэнгүй мэдээлэл бүхий нийтлэлийг хүлээж байна.

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. Бид сийрэг матрицуудыг хадгалдаг.

Тохиолдол 2) элементэд утга өгөгдөөгүй тодорхой координатыг хүсэх үед бид анхдагч сийрэг массив элементийн утгыг авах ёстой.

Олон хэмжээст матрицыг дэлхийн хэмжээнд хадгалахад бидэнд олгодог урамшуулал

Олон эгнээ, хавтгай, шоо гэх мэт зайны хэсгүүдийг хурдан арилгах ба/эсвэл сонгох. Бүхэл тоон индекс ашиглаж байгаа тохиолдолд олон мөр, хавтгай, шоо гэх мэт орон зайн хэсгүүдийг хурдан арилгах ба/эсвэл авчрах чадвар ашигтай байж болно.

баг Kill Бид нэг элемент эсвэл мөр, бүр бүхэл бүтэн хавтгайг устгаж болно. Глобалын шинж чанаруудын ачаар энэ нь маш хурдан явагддаг - элемент тус бүрээр нь устгахаас хэдэн мянга дахин хурдан юм.

Зураг нь дэлхийн хэмжээнд гурван хэмжээст массивыг харуулж байна ^a болон янз бүрийн төрлийн устгах.

Глобал бол өгөгдөл хадгалах эрдэнэсийн сэлэм юм. Сийрэг массив. 3-р хэсэг

Мэдэгдэж буй индексүүдийг ашиглан зайны хэсгүүдийг сонгохын тулд та тушаалыг ашиглаж болно Нийлүүлэх.

Column хувьсагч руу матриц баганыг сонгох:

; Зададим трёхмерный разреженный массив 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

Column хувьсагчийн хамгийн сонирхолтой зүйл бол бидэнд бас сийрэг массив байгаа бөгөөд үүнд мөн дамжуулан хандах шаардлагатай. $GET, учир нь өгөгдмөл утгууд нь хадгалагдаагүй болно.

Орон зайн хэсгүүдийг сонгохдоо функцийг ашиглан жижиг програмаар дамжуулан хийж болно $Захиалга. Энэ нь ялангуяа индексүүд нь квантлагдаагүй (зураг зүй) орон зайд тохиромжтой.

дүгнэлт

Одоогийн цаг үе шинэ амбицтай зорилтуудыг тавьж байна. Графикууд нь хэдэн тэрбум оройноос, газрын зураг нь хэдэн тэрбум цэгээс бүрдэх ба зарим нь үүрэн автомат төхөөрөмж дээр өөрийн орчлон ертөнцийг ажиллуулахыг хүсдэг (1, 2).

Хэрэв сийрэг массивуудын өгөгдлийн хэмжээ нь RAM-д багтахаа больсон ч та тэдэнтэй ажиллах шаардлагатай бол дэлхийн болон COS дээр ижил төстэй төслүүдийг хэрэгжүүлэх боломжийг авч үзэх нь зүйтэй юм.

Анхаарал тавьсанд баярлалаа! Бид таны асуулт, хүслийг сэтгэгдэл дээр хүлээж байна.

Disclaimer: Энэ нийтлэл болон түүнд өгсөн миний санал бол миний бодол бөгөөд InterSystems корпорацийн албан ёсны байр суурьтай ямар ч холбоогүй юм.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх