Оскільки множення матриць є настільки центральною операцією в багатьох чисельних алгоритмах, у те, щоби зробити алгори́тми перемно́жування ма́триць ефективними, було вкладено чимало праці. Застосування множення матриць в обчислювальних задачах зустрічаються в багатьох областях, включно з науковими обчисленнями[en] та розпізнаванням образів, і в, здавалося би, не пов'язаних задачах, таких як підрахунок шляхів графом.[1] Було розроблено багато різних алгоритмів для перемножування матриць на різних типах апаратного забезпечення, включно з паралельними та розподіленими системами, де обчислювальну працю розподілювано декількома процесорами (можливо, через мережу).
Безпосереднє застосування математичного означення множення матриць дає алгоритм, що для перемножування двох матриць n × nзаймає часу порядку n3 (в нотації Ландау — Θ(n3)). Кращі асимптотичні межі часу, необхідного для перемножування матриць, були відомі від часів праці Страссена 1960 року, але досі не відомо, яким є оптимальний час (тобто, якою є складність цієї задачі).
Ітеративний алгоритм
За означенням множення матриць, якщо C = AB для матриці A розміру n × m та матриці B розміру m × p, то C є матрицею розміру n × p з елементами
.
З цього може бути побудовано простий алгоритм, який обходить циклами індекси i з 1 по n та j з 1 по p, обчислюючи наведене вище із застосуванням вкладеного циклу:
Вхід: матриці A та B
Нехай C буде матрицею відповідного розміру
Для i з 1 по n:
Для j з 1 по p:
Нехай sum = 0
Для k з 1 по m:
Встановити sum ← sum + Aik × Bkj
Встановити Cij ← sum
Повернути C
Цей алгоритм займає часΘ(nmp) (в нотації Ландау).[1] Поширеним спрощенням для цілей аналізу алгоритмів є вважати, що всі входи є квадратними матрицями розміру n × n, в разі чого час виконання становить Θ(n3), тобто, є кубічним.[2]
Поведінка кешу
Ці три цикли в ітеративному перемножуванні матриць можливо довільно переставляти між собою без впливу на правильність чи асимптотичну тривалість виконання. Проте цей порядок може мати значний вплив на практичну продуктивність через моделі доступу до пам'яті[en] алгоритму та використання ним кешу;[1] який порядок є кращим також залежить від того, чи зберігаються матриці в порядко́вому порядку[en], постовпчиковому, чи суміші обох.
Зокрема, в ідеалізованому випадку повністю асоціативного кешу, складеного з M байтів та b байтів на рядок кешу (тобто, M/b рядків кешу), наведений вище алгоритм є недооптимальним для A та B, що зберігаються в порядко́вому порядку. Коли n > M/b, кожна ітерація внутрішнього циклу (одночасного проходження рядком A та стовпчиком B) зазнає́ невлучання в кеш при отримуванні доступу до елементу B. Це означає, що цей алгоритм у найгіршому випадку зазнає Θ(n3) невлучань у кеш. Станом на 2010 рік швидкість пам'яті в порівнянні зі швидкістю процесорів є такою, що для матриць значного розміру в тривалості виконання домінують невлучання в кеш, а не фактичні обчислення.[3]
Оптимальним варіантом ітеративного алгоритму для A та B, що зберігаються в порядку рядків, є плиткова[en] версія, в якій матрицю неявно ділять на квадратні плитки розміру √M на √M:[3][4]
Вхід: матриці A та B
Нехай C буде матрицею відповідного розміру
Обрати розмір плитки T = Θ(√M)
Для I з 1 по n кроками по T:
Для J з 1 по p кроками по T:
Для K з 1 по m кроками по T:
Перемножити AI:I+T, K:K+T та BK:K+T, J:J+T до CI:I+T, J:J+T, тобто:
Для i з I по min(I + T, n):
Для j з J по min(J + T, p):
Нехай sum = 0
Для k з K по min(K + T, m):
Встановити sum ← sum + Aik × Bkj
Встановити Cij ← Cij + sum
Повернути C
В ідеалізованій моделі кешу цей алгоритм зазнає лише Θ(n3/b√M) невлучань у кеш; дільник b√M становить декілька порядків на сучасних машинах, тож у тривалості виконання домінують фактичні обчислення, а не невлучання в кеш.[3]
яке працює для всіх квадратних матриць, чиї розміри є степенями двійки, тобто, форми 2n × 2n для деякого n. Тепер добутком матриць є
що складається з восьми множень пар підматриць, з подальшим кроком додавання. Алгоритм «розділюй та володарюй» обчислює менші добутки рекурсивно, застосовуючи як основу скалярне множенняc11 = a11b11.
Складність цього алгоритму як функції від n задається рекурентно як[2]
;
,
із враховуванням восьми рекурсивних викликів на матрицях розміру n/2, та Θ(n2) для поелементного підсумовування чотирьох пар отримуваних в результаті матриць. Застосування майстер-методу для рекурсій «розділюй та володарюй» показує, що ця рекурсія має розв'язок Θ(n3), такий же, як й ітеративний алгоритм.[2]
Неквадратні матриці
Варіант цього алгоритму, який працює для матриць довільних форм, і є швидшим на практиці,[3] розбиває матриці на дві замість чотирьох підматриць наступним чином.[5] Розбивання матриці тепер означає поділ її на дві частини рівного розміру, або якомога ближче до рівних розмірів у разі, якщо розміри є непарними.
Входи: матриці A розміру n × m, B розміру m × p.
Базовий випадок: якщо max(n, m, p) є нижчим за певний поріг, застосувати розмотану версію ітеративного алгоритму.
Рекурсивні випадки:
Якщо max(n, m, p) = n, розбити A горизонтально:
Інакше, якщо max(n, m, p) = p, розбити B вертикально:
Інакше, max(n, m, p) = m. Робити A вертикально та B горизонтально:
Поведінка кешу
Рівень невлучання в кеш в рекурсивного матричного множення є таким же, як і в плиткової[en] ітеративної версії, але, на відміну від того алгоритму, рекурсивний алгоритм є буферо-незалежним[en]:[5] він не має параметру налаштування, необхідного для досягнення оптимальної продуктивності кешу, і він добре поводиться в багатопрограмному[en] середовищі, де розміри кешу є фактично динамічними через те, що інші процеси займають його простір.[3] (Простий ітеративний алгоритм також є буферо-незалежним, але набагато повільнішим на практиці, якщо компонування матриць не пристосовано до алгоритму.)
Кількість невлучань у кеш, що зазнає́ цей алгоритм на машині з M рядками ідеально кешу розміру b байтів кожен, обмежено[5]:13
Підкубічні алгоритми
Існують алгоритми, що забезпечують кращу тривалість виконання, ніж прямолінійні. Першим було відкрито алгоритм Штрассена, винайдений Фолькером Штрассеном 1969 року, який часто називають «швидким множенням матриць» (англ."fast matrix multiplication"). Він ґрунтується на способі множення двох матриць 2 × 2, який вимагає лише 7 множень (замість звичайних 8), ціною декількох додаткових операції додавання та віднімання. Його рекурсивне застосування дає алгоритм з витратами на множення . Алгоритм Штрассена є складнішим та має нижчу чисельну стійкість у порівнянні з наївним алгоритмом,[6] але він є швидшим у випадках, коли n > 100 або близько того,[1] і зустрічається в декількох бібліотеках, таких як BLAS.[7] Він є дуже корисним для великих матриць над точними областями, такими як скінченні поля, де чисельна стійкість не є проблемою.
Поточний алгоритм O(nk) з найнижчим відомим степенем k є узагальненнями алгоритму Копперсміта — Вінограда від Франсуа ле Ґалля, яке має асимптотичну складність O(n2.3728639).[8] Алгоритм ле Ґалля та алгоритм Копперсміта — Вінограда, на якому він ґрунтується, є подібними до алгоритму Штрассена: винайдено спосіб множення двох матриць k × k менше ніж k3 множеннями, і цю методику застосовують рекурсивно. Проте сталий коефіцієнт, прихований нотацією Ландау, є настільки великим, що ці алгоритми є доцільними лише для матриць, що є завеликими для обробки на сучасних комп'ютерах.[9][10]
Оскільки будь-який алгоритм для перемножування двох матриць n × n має обробити всі 2n2 елементів, існує асимптотична нижня межа в Ω(n2) операцій. Рац довів нижню межу в Ω(n2 log(n)) для арифметичних схем з обмеженими коефіцієнтами над дійсними або комплексними числами.[11]
Кон та ін. помістили такі методи, як алгоритми Штрассена та Копперсміта — Вінограда, до зовсім відмінного контексту теорії груп, використавши трійки підмножин скінченних груп, які задовольняють властивості неперетинності, що називають властивістю потрійного добутку[en] (ВПД, англ.triple product property, TPP). Вони показали, що якщо сімейства вінкових добутків[en]абелевих груп з симетричними групами втілюють сімейства трійок підмножин зі спільною версією ВПД, то існують алгоритми перемножування матриць із по суті квадратичною складністю.[12][13] Більшість дослідників вважають, що це так і є.[10] Проте Алон, Шпілка та Кріс Уманс[en] нещодавно показали, що деякі з цих гіпотез, що передбачають швидке множення матриць, є несумісними з іншою правдоподібною гіпотезою, соняшниковою[en].[14]
можливо виконувати незалежно одне від одного, як і чотири підсумовування (хоча алгоритмові потрібно «об'єднати» перемножування перед виконанням додавань). Використовуючи повну паралельність задачі, отримують алгоритм, який може бути виражено псевдокодом стилю відгалужування-об'єднування[en]:[15]
Процедураперемножити(C, A, B):
Базовий випадок: якщо n = 1, встановити c11 ← a11 × b11 (або перемножити маленьку блокову матрицю).
Інакше, виділити простір для нової матриці T форми n × n, а тоді:
Розбити A на A11, A12, A21, A22.
Розбити B на B11, B12, B21, B22.
Розбити C на C11, C12, C21, C22.
Розбити T на T11, T12, T21, T22.
Паралельне виконання:
Відгалузитиперемножити(C11, A11, B11).
Відгалузитиперемножити(C12, A11, B12).
Відгалузитиперемножити(C21, A21, B11).
Відгалузитиперемножити(C22, A21, B12).
Відгалузитиперемножити(T11, A12, B21).
Відгалузитиперемножити(T12, A12, B22).
Відгалузитиперемножити(T21, A22, B21).
Відгалузитиперемножити(T22, A22, B22).
Об'єднати (дочекатися завершення паралельних відгалужень).
додати(C, T).
Звільнити T.
Процедурадодати(C, T) додає T до C, поелементно:
Базовий випадок: якщо n = 1, встановити c11 ← c11 + t11 (або виконати короткий цикл, можливо, розмотаний).
Інакше:
Розбити C на C11, C12, C21, C22.
Розбити T на T11, T12, T21, T22.
Паралельно:
Відгалузитидодати(C11, T11).
Відгалузитидодати(C12, T12).
Відгалузитидодати(C21, T21).
Відгалузитидодати(C22, T22).
Об'єднати.
Тут відгалузити є ключовим словом, яке сигналізує, що обчислення може бути виконувано паралельно до решти виклику функції, тоді як об'єднати чекає на завершення всіх попередньо «відгалужених» обчислень. Розбити досягає своєї мети лише маніпулюванням вказівниками.
Цей алгоритм має критичною довжиною шляхуΘ(log2n) кроків, що означає, що йому потрібно стільки часу на ідеальній машині з нескінченним числом процесорів. Отже, на будь-якому реальному комп'ютері він має максимальне можливе прискоренняΘ(n3/log2n). Цей алгоритм не є практичним через витрати на передавання, властиві переміщуванню даних до та з тимчасової матриці T, але практичніший варіант досягає прискорення Θ(n2) без використання тимчасової матриці.[15]
Алгоритми з униканням передавання, та розподілені алгоритми
На сучасних архітектурах з ієрархічною пам'яттю вартість завантажування та зберігання елементів матриць входу має схильність переважати над вартістю арифметики. На одній машині це — кількість даних, передаваних між оперативною пам'яттю та кешем, тоді як на багатовузловій машині з розподіленою пам'яттю це — кількість, що передається між вузлами. В кожному з випадків її називають пропускною здатністю обміну (англ.communication bandwidth). Наївний алгоритм із використанням трьох вкладених циклів використовує пропускну здатністю обміну Ω(n3).
Алгоритм Кеннона[en], відомий також як двовимірний алгоритм (англ.2D algorithm), є алгоритмом з униканням обміну[en], який розбиває кожну з матриць входу на блокову матрицю, чиї елементи є підматрицями розміру √M/3 на √M/3, де M є розміром швидкої пам'яті.[16] Потім застосовують наївний алгоритм над блоковими матрицями, обчислюючи добутки підматриць цілком у швидкій пам'яті. Це знижує пропускну здатність обміну до O(n3/√M), яка є асимптотично оптимальною (для алгоритмів, що виконують обчислення Ω(n3)).[17][18]
У розподіленій постановці з p процесорами, розставленими у двовимірній сітці √p на √p, кожному з процесорів можливо призначувати по одній з підматриць результату, і добуток буде обчислювано з передаванням кожним з процесорів O(n2/√p) слів, що є асимптотично оптимальним, виходячи з того, що кожен з вузлів зберігає щонайменше O(n2/p) елементів.[18] Це може бути вдосконалено тривимірним алгоритмом (англ.3D algorithm), який впорядковує процесори у тривимірну кубічну сітку, призначуючи кожен добуток двох підматриць входу одному процесорові. Підматриці результату потім породжують виконанням зведення над кожним з рядків.[19] Цей алгоритм передає O(n2/p2/3) слів на процесор, що є асимптотично оптимальним.[18] Проте, це вимагає повторювання кожного з елементів матриць входу p1/3 разів, і відтак вимагає в p1/3 разів більше пам'яті, ніж необхідно для зберігання входів. Для подальшого зниження тривалості виконання цей алгоритм може бути поєднувано з алгоритмом Штрассена.[19]«2,5-вимірні» алгоритми (англ."2.5D" algorithms) забезпечують безперервний компроміс між використанням пам'яті та пропускною здатністю передавання.[20] На сучасних розподілених обчислювальних середовищах, таких як MapReduce, було розроблено спеціалізовані алгоритми перемножування.[21]
Алгоритми для сіток
Існує низка алгоритмів для перемножування на сітках. Для перемножування двох n×n на стандартній двовимірній сітці із застосуванням двовимірного алгоритму Кеннона[en] обчислюють перемножування в 3n-2 кроків, хоча це знижується до половини цього числа для повторюваних обчислень.[22] Стандартний масив є неефективним, оскільки дані з двох матриць не надходять одночасно, і його має бути доповнювано нулями.
Результат є ще швидшим на двошаровій перехрещуваній сітці, де потрібно лише 2n-1 кроків.[23] Продуктивність додатково покращується для повторюваних обчислень, ведучи до стовідсоткової ефективності.[24] Перехрещуваний сітковий масив можна розглядати як особливий випадок не планарної (тобто, багатошарової) оброблювальної структури.[25]
↑Lam, Monica S.; Rothberg, Edward E.; Wolf, Michael E. (1991). The Cache Performance and Optimizations of Blocked Algorithms. Int'l Conf. on Architectural Support for Programming Languages and Operating Systems (ASPLOS). (англ.)
↑Ран Рац[en]. On the complexity of matrix product. In Proceedings of the thirty-fourth annual ACM symposium on Theory of computing. ACM Press, 2002. DOI:10.1145/509907.509932. (англ.)
↑Henry Cohn, Robert Kleinberg[en], Balázs Szegedy[en], and Chris Umans. Group-theoretic Algorithms for Matrix Multiplication. arXiv:math.GR/0511460. Proceedings of the 46th Annual Symposium on Foundations of Computer Science, 23–25 October 2005, Pittsburgh, PA, IEEE Computer Society, pp. 379–388. (англ.)
↑Henry Cohn, Chris Umans. A Group-theoretic Approach to Fast Matrix Multiplication. arXiv:math.GR/0307321. Proceedings of the 44th Annual IEEE Symposium on Foundations of Computer Science, 11–14 October 2003, Cambridge, MA, IEEE Computer Society, pp. 438–449. (англ.)
↑ абRandall, Keith H. (1998). Cilk: Efficient Multithreaded Computing(PDF) (Ph.D.). Massachusetts Institute of Technology. с. 54—57. Архів оригіналу(PDF) за 6 листопада 2020. Процитовано 15 грудня 2019. (англ.)
↑ абвIrony, Dror; Toledo, Sivan; Tiskin, Alexander (September 2004). Communication lower bounds for distributed-memory matrix multiplication. J. Parallel Distrib. Comput. 64 (9): 1017—1026. CiteSeerX10.1.1.20.7034. doi:10.1016/j.jpdc.2004.03.021. (англ.)
↑ абAgarwal, R.C.; Balle, S. M.; Gustavson, F. G.; Joshi, M.; Palkar, P. (September 1995). A three-dimensional approach to parallel matrix multiplication. IBM J. Res. Dev. 39 (5): 575—582. CiteSeerX10.1.1.44.3404. doi:10.1147/rd.395.0575. (англ.)
↑Solomonik, Edgar; Demmel, James (2011). Communication-optimal parallel 2.5D matrix multiplication and LU factorization algorithms. Proceedings of the 17th International Conference on Parallel Processing. Part II: 90—109. (англ.)
Buttari, Alfredo; Langou, Julien; Kurzak, Jakub; Dongarra, Jack (2009). A class of parallel tiled linear algebra algorithms for multicore architectures. Parallel Computing. 35: 38—53. arXiv:0709.1272. doi:10.1016/j.parco.2008.10.002. (англ.)
Goto, Kazushige; van de Geijn, Robert A. (2008). Anatomy of high-performance matrix multiplication. ACM Transactions on Mathematical Software. 34 (3): 1—25. CiteSeerX10.1.1.140.3583. doi:10.1145/1356052.1356053. (англ.)
Van Zee, Field G.; van de Geijn, Robert A. (2015). BLIS: A Framework for Rapidly Instantiating BLAS Functionality. ACM Transactions on Mathematical Software. 41 (3): 1—33. doi:10.1145/2764454. (англ.)
У этого топонима есть и другие значения, см. Лаврский переулок. Лаврский переулок Общая информация Страна Россия Город Москва Округ ЦАО Район Мещанский Протяжённость 450 м Метро 05 Проспект Мира06 Проспект Мира10 Достоевская Прежние названия 2-й Лаврский переулок Ла́врский ...
جامعة لياج معلومات المؤسس فيلم الأول التأسيس 1817 الموقع الجغرافي إحداثيات 50°38′27″N 5°34′29″E / 50.640833°N 5.574722°E / 50.640833; 5.574722 [1] البلد بلجيكا إحصاءات عدد الطلاب 17000 (2010)25421 (2018)[2] عضوية كبار المديرين الدوليين في الهندسة [لغات أخرى]ر...
Cette liste est une ébauche concernant le Luxembourg. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. María Teresa Mestre Batista, actuelle grande-duchesse consort de Luxembourg depuis le 7 octobre 2000. Cet article donne la liste des conjoints des souverains luxembourgeois. Maison d'Ardenne (963-1136) Nom (dates) Époux Titres Eléments biographiques Hedwige de Nordgau (937-992) Sigefroid de Luxembourg (mariag...
يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (نوفمبر 2019) الدوري اليوغوسلافي الأول 1951 تفاصيل الموسم الدوري اليوغوسلافي الأول النسخة 22 البلد يوغوسلافيا ا
Dieser Artikel hat die Schweizer Behörde zum Gegenstand. Zur deutschen Behörde siehe Bundesamt für Migration und Flüchtlinge. Staatssekretariat für Migration SEM Hauptsitz Wabern Vorsteherin Staatssekretärin Christine Schraner Burgener Aufsicht Eidgenössisches Justiz- und Polizeidepartement EJPD Webpräsenz www.sem.admin.ch Hauptgebäude des Staatssekretariats für Migration in Wabern Das Staatssekretariat für Migration SEM (französisch Secrétariat d’Etat aux migrations SEM, itali...
UA Little Rock William H. Bowen School of LawMottoPublic Service, Access to Justice, ProfessionalismParent schoolUniversity of Arkansas at Little RockEstablished1975School typePublic[1]DeanTheresa BeinerLocationLittle Rock, Arkansas, U.S.34°44′09″N 92°15′47″W / 34.73583°N 92.26306°W / 34.73583; -92.26306Enrollment293 (full-time), 101 (part-time)[1]Faculty108[2]USNWR ranking148th-193rd (bottom 25%)[2]Bar pass rate81.6%Websiteu...
Cet article est une ébauche concernant le sport automobile et l’automobile. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Pour les articles homonymes, voir Neyret. Robert NeyretBob Neyret au départ du Rallye Monte-Carlo historique 2010BiographieNaissance 28 février 1934 (89 ans)GrenobleNationalité françaiseActivités Pilote de rallye, chirurgien-dentisteEnfant Pascale NeyretAutres informationsSport ...
Nécropole nationale de Courcelles-le-ComtePays FranceRégion Hauts-de-FranceCommune Courcelles-le-ComtePersonnes 314Coordonnées 50° 09′ 30″ N, 2° 46′ 28″ Emodifier - modifier le code - modifier Wikidata La nécropole nationale de Courcelles-le-Comte est un cimetière militaire français sis sur le territoire de la commune de Courcelles-le-Comte, dans le département du Pas-de-Calais. Localisation La nécropole est située sur la route départementale ...
Defunct flying squadron of the Royal Air Force No. 236 Squadron RAFActiveAugust 1918 - 15 May 1919 31 October 1939 – 25 May 1945Country United KingdomBranch Royal Air ForceMotto(s)Latin: Speculate nuntiate(Latin: Having watched, bring word)[1][2]InsigniaSquadron Badge heraldryIn front of a fountain, a mailed fist grasping a winged sword.[3]Squadron CodesFA (Oct 1939 - 1941) ND (1941 - Aug 1943) MB (Jul 1944 - May 1945)Military unit No. 236 Squadron RAF was a Royal Ai...
The HonourableKathleen SatchwellSatchwell (1985)Gauteng Division of the High Court Personal detailsAlma materRhodes University Kathleen Satchwell, commonly known as Kathy Satchwell, is a judge of the Gauteng Division of the High Court (formerly the South Gauteng High Court) in South Africa. Biography She was educated at Rhodes University in the 1960s.[1] She was a prominent human rights attorney in the 1990s. Satchwell was also involved with court cases of the Mandela United Football ...
Salem Ciudad SalemUbicación en el condado de Livingston en Kentucky Ubicación de Kentucky en EE. UU.Coordenadas 37°15′53″N 88°14′28″O / 37.2647, -88.2411Entidad Ciudad • País Estados Unidos • Estado Kentucky • Condado LivingstonSuperficie • Total 2.21 km² • Tierra 2.2 km² • Agua (0.35%) 0.01 km²Altitud • Media 140 m s. n. m.Población (2010) • Total 752 hab. ...
Cet article présente les personnages secondaires de la série télévisée Stargate Universe. Hunter Riley Le sergent Hunter Riley est interprété par Haig Sutherland. Riley est passé par la porte des étoiles de la base Icare vers le Destinée. Son travail comprend les appels de la porte des étoiles et l'interprétation des symboles et leur langue. Il a identifié les huit symboles de l'adresse de la porte des étoiles du vaisseau qui peut les renvoyer vers la Terre, bien qu'elle ne peut...
Air Component CommandFlygvapnets taktiska stabActive1994–2018CountrySwedenAllegianceSwedish Armed ForcesBranchSwedish Air ForceTypeMilitary staffRoleOperational, territorial and tactical operationsSizeStaffPart ofSwedish Armed Forces HeadquartersGarrison/HQStockholmMarchFlygvapnets paradmarsch (Sernklef)[1]Military unit The Air Component Command[2] (Swedish: Flygvapnets taktiska stab, FTS) was a part of the Joint Forces Command of the Swedish Armed Forces. The staff was...
Untuk pandemi yang sedang berlangsung di Indonesia, lihat pandemi COVID-19 di Indonesia. Berdasarkan Keputusan Menteri Kesehatan Republik Indonesia Nomor HK.01.07/MENKES/169/2020, berikut daftar rumah sakit rujukan penanggulangan penyakit infeksi emerging tertentu (termasuk COVID-19) berdasarkan provinsi.[1] Aceh SumatraUtara SumatraBarat Riau KepRiau Bengkulu Sumatera Selatan Lampung Kep. BangkaBelitung Jambi Banten Jakarta JawaBarat JawaTengah Yogyakarta JawaTimur KalimantanBarat Ka...
Canadian politician This biography of a living person needs additional citations for verification. Please help by adding reliable sources. Contentious material about living persons that is unsourced or poorly sourced must be removed immediately from the article and its talk page, especially if potentially libelous.Find sources: Ali Ehsassi – news · newspapers · books · scholar · JSTOR (December 2019) (Learn how and when to remove this template message)...
ابو الامه تعديل بطلق على الأشخاص التاليه أسماؤهم لقب أب لشعوبهم اللسته الاسم الدوله الاسم المحلى اللقب ملحوظات احمد شاه الدرانى افغانستان باديشاه Ahmad Shah the Father[1][2][3] Founder of the Afghan Durrani Empire. اسكندر بك البانيا Ati i Kombit ابو الامه Led a two decade long rebellion against the Ottoman Empire في...