In computer science, a Cartesian tree is a binary tree derived from a sequence of distinct numbers. To construct the Cartesian tree, set its root to be the minimum number in the sequence, and recursively construct its left and right subtrees from the subsequences before and after this number. It is uniquely defined as a min-heap whose symmetric (in-order) traversal returns the original sequence.
Cartesian trees are defined using binary trees, which are a form of rooted tree. To construct the Cartesian tree for a given sequence of distinct numbers, set its root to be the minimum number in the sequence,[1] and recursively construct its left and right subtrees from the subsequences before and after this number, respectively. As a base case, when one of these subsequences is empty, there is no left or right child.[2]
It is also possible to characterize the Cartesian tree directly rather than recursively, using its ordering properties. In any tree, the subtree rooted at any node consists of all other nodes that can reach it by repeatedly following parent pointers. The Cartesian tree for a sequence of distinct numbers is defined by the following properties:
The Cartesian tree for a sequence is a binary tree with one node for each number in the sequence.
A symmetric (in-order) traversal of the tree results in the original sequence. Equivalently, for each node, the numbers in its left subtree are earlier than it in the sequence, and the numbers in the right subtree are later.
The tree has the min-heap property: the parent of any non-root node has a smaller value than the node itself.[1]
These two definitions are equivalent: the tree defined recursively as described above is the unique tree that has the properties listed above. If a sequence of numbers contains repetitions, a Cartesian tree can be determined for it by following a consistent tie-breaking rule before applying the above construction. For instance, the first of two equal elements can be treated as the smaller of the two.[2]
History
Cartesian trees were introduced and named by Vuillemin (1980), who used them as an example of the interaction between geometric combinatorics and the design and analysis of data structures. In particular, Vuillemin used these structures to analyze the average-case complexity of concatenation and splitting operations on binary search trees. The name is derived from the Cartesian coordinate system for the plane: in one version of this structure, as in the two-dimensional range searching application discussed below, a Cartesian tree for a point set has the sorted order of the points by their -coordinates as its symmetric traversal order, and it has the heap property according to the -coordinates of the points. Vuillemin described both this geometric version of the structure, and the definition here in which a Cartesian tree is defined from a sequence. Using sequences instead of point coordinates provides a more general setting that allows the Cartesian tree to be applied to non-geometric problems as well.[2]
Efficient construction
A Cartesian tree can be constructed in linear time from its input sequence.
One method is to process the sequence values in left-to-right order, maintaining the Cartesian tree of the nodes processed so far, in a structure that allows both upwards and downwards traversal of the tree. To process each new value , start at the node representing the value prior to in the sequence and follow the path from this node to the root of the tree until finding a value smaller than . The node becomes the right child of , and the previous right child of becomes the new left child of . The total time for this procedure is linear, because the time spent searching for the parent of each new node can be charged against the number of nodes that are removed from the rightmost path in the tree.[3]
An alternative linear-time construction algorithm is based on the all nearest smaller values problem. In the input sequence, define the left neighbor of a value to be the value that occurs prior to , is smaller than , and is closer in position to than any other smaller value. The right neighbor is defined symmetrically. The sequence of left neighbors can be found by an algorithm that maintains a stack containing a subsequence of the input. For each new sequence value , the stack is popped until it is empty or its top element is smaller than , and then is pushed onto the stack. The left neighbor of is the top element at the time is pushed. The right neighbors can be found by applying the same stack algorithm to the reverse of the sequence. The parent of in the Cartesian tree is either the left neighbor of or the right neighbor of , whichever exists and has a larger value. The left and right neighbors can also be constructed efficiently by parallel algorithms, making this formulation useful in efficient parallel algorithms for Cartesian tree construction.[4]
Another linear-time algorithm for Cartesian tree construction is based on divide-and-conquer. The algorithm recursively constructs the tree on each half of the input, and then merges the two trees. The merger process involves only the nodes on the left and right spines of these trees: the left spine is the path obtained by following left child edges from the root until reaching a node with no left child, and the right spine is defined symmetrically. As with any path in a min-heap, both spines have their values in sorted order, from the smallest value at their root to their largest value at the end of the path. To merge the two trees, apply a merge algorithm to the right spine of the left tree and the left spine of the right tree, replacing these two paths in two trees by a single path that contains the same nodes. In the merged path, the successor in the sorted order of each node from the left tree is placed in its right child, and the successor of each node from the right tree is placed in its left child, the same position that was previously used for its successor in the spine. The left children of nodes from the left tree and right children of nodes from the right tree remain unchanged. The algorithm is parallelizable since on each level of recursion, each of the two sub-problems can be computed in parallel, and the merging operation can be efficiently parallelized as well.[5]
It is possible to maintain the Cartesian tree of a dynamic input, subject to insertions of elements and lazy deletion of elements, in logarithmic amortized time per operation. Here, lazy deletion means that a deletion operation is performed by marking an element in the tree as being a deleted element, but not actually removing it from the tree. When the number of marked elements reaches a constant fraction of the size of the whole tree, it is rebuilt, keeping only its unmarked elements.[6]
Applications
Range searching and lowest common ancestors
Cartesian trees form part of an efficient data structure for range minimum queries. An input to this kind of query specifies a contiguous subsequence of the original sequence; the query output should be the minimum value in this subsequence.[7] In a Cartesian tree, this minimum value can be found at the lowest common ancestor of the leftmost and rightmost values in the subsequence. For instance, in the subsequence (12,10,20,15,18) of the example sequence, the minimum value of the subsequence (10) forms the lowest common ancestor of the leftmost and rightmost values (12 and 18). Because lowest common ancestors can be found in constant time per query, using a data structure that takes linear space to store and can be constructed in linear time, the same bounds hold for the range minimization problem.[8]
Bender & Farach-Colton (2000) reversed this relationship between the two data structure problems by showing that data structures for range minimization could also be used for finding lowest common ancestors. Their data structure associates with each node of the tree its distance from the root, and constructs a sequence of these distances in the order of an Euler tour of the (edge-doubled) tree. It then constructs a range minimization data structure for the resulting sequence. The lowest common ancestor of any two vertices in the given tree can be found as the minimum distance appearing in the interval between the initial positions of these two vertices in the sequence. Bender and Farach-Colton also provide a method for range minimization that can be used for the sequences resulting from this transformation, which have the special property that adjacent sequence values differ by one. As they describe, for range minimization in sequences that do not have this form, it is possible to use Cartesian trees to reduce the range minimization problem to lowest common ancestors, and then to use Euler tours to reduce lowest common ancestors to a range minimization problem with this special form.[9]
The same range minimization problem may also be given an alternative interpretation in terms of two dimensional range searching. A collection of finitely many points in the Cartesian plane can be used to form a Cartesian tree, by sorting the points by their -coordinates and using the -coordinates in this order as the sequence of values from which this tree is formed. If is the subset of the input points within some vertical slab defined by the inequalities , is the leftmost point in (the one with minimum -coordinate), and is the rightmost point in (the one with maximum -coordinate) then the lowest common ancestor of and in the Cartesian tree is the bottommost point in the slab. A three-sided range query, in which the task is to list all points within a region bounded by the three inequalities and , can be answered by finding this bottommost point , comparing its -coordinate to , and (if the point lies within the three-sided region) continuing recursively in the two slabs bounded between and and between and . In this way, after the leftmost and rightmost points in the slab are identified, all points within the three-sided region can be listed in constant time per point.[3]
The same construction, of lowest common ancestors in a Cartesian tree, makes it possible to construct a data structure with linear space that allows the distances between pairs of points in any ultrametric space to be queried in constant time per query. The distance within an ultrametric is the same as the minimax path weight in the minimum spanning tree of the metric.[10] From the minimum spanning tree, one can construct a Cartesian tree, the root node of which represents the heaviest edge of the minimum spanning tree. Removing this edge partitions the minimum spanning tree into two subtrees, and Cartesian trees recursively constructed for these two subtrees form the children of the root node of the Cartesian tree. The leaves of the Cartesian tree represent points of the metric space, and the lowest common ancestor of two leaves in the Cartesian tree is the heaviest edge between those two points in the minimum spanning tree, which has weight equal to the distance between the two points. Once the minimum spanning tree has been found and its edge weights sorted, the Cartesian tree can be constructed in linear time.[11]
The Cartesian tree of a sorted sequence is just a path graph, rooted at its leftmost endpoint. Binary searching in this tree degenerates to sequential search in the path. However, a different construction uses Cartesian trees to generate binary search trees of logarithmic depth from sorted sequences of values. This can be done by generating priority numbers for each value, and using the sequence of priorities to generate a Cartesian tree. This construction may equivalently be viewed in the geometric framework described above, in which the -coordinates of a set of points are the values in a sorted sequence and the -coordinates are their priorities.[12]
This idea was applied by Seidel & Aragon (1996), who suggested the use of random numbers as priorities. The self-balancing binary search tree resulting from this random choice is called a treap, due to its combination of binary search tree and min-heap features. An insertion into a treap can be performed by inserting the new key as a leaf of an existing tree, choosing a priority for it, and then performing tree rotation operations along a path from the node to the root of the tree to repair any violations of the heap property caused by this insertion; a deletion can similarly be performed by a constant amount of change to the tree followed by a sequence of rotations along a single path in the tree.[12] A variation on this data structure called a zip tree uses the same idea of random priorities, but simplifies the random generation of the priorities, and performs insertions and deletions in a different way, by splitting the sequence and its associated Cartesian tree into two subsequences and two trees and then recombining them.[13]
If the priorities of each key are chosen randomly and independently once whenever the key is inserted into the tree, the resulting Cartesian tree will have the same properties as a random binary search tree, a tree computed by inserting the keys in a randomly chosen permutation starting from an empty tree, with each insertion leaving the previous tree structure unchanged and inserting the new node as a leaf of the tree. Random binary search trees have been studied for much longer than treaps, and are known to behave well as search trees. The expected length of the search path to any given value is at most , and the whole tree has logarithmic depth (its maximum root-to-leaf distance) with high probability. More formally, there exists a constant such that the depth is with probability tending to one as the number of nodes tends to infinity. The same good behavior carries over to treaps. It is also possible, as suggested by Aragon and Seidel, to reprioritize frequently-accessed nodes, causing them to move towards the root of the treap and speeding up future accesses for the same keys.[12]
In sorting
Levcopoulos & Petersson (1989) describe a sorting algorithm based on Cartesian trees. They describe the algorithm as based on a tree with the maximum at the root,[14] but it can be modified straightforwardly to support a Cartesian tree with the convention that the minimum value is at the root. For consistency, it is this modified version of the algorithm that is described below.
The Levcopoulos–Petersson algorithm can be viewed as a version of selection sort or heap sort that maintains a priority queue of candidate minima, and that at each step finds and removes the minimum value in this queue, moving this value to the end of an output sequence. In their algorithm, the priority queue consists only of elements whose parent in the Cartesian tree has already been found and removed. Thus, the algorithm consists of the following steps:[14]
Construct a Cartesian tree for the input sequence
Initialize a priority queue, initially containing only the tree root
While the priority queue is non-empty:
Find and remove the minimum value in the priority queue
Add this value to the output sequence
Add the Cartesian tree children of the removed value to the priority queue
As Levcopoulos and Petersson show, for input sequences that are already nearly sorted, the size of the priority queue will remain small, allowing this method to take advantage of the nearly-sorted input and run more quickly. Specifically, the worst-case running time of this algorithm is , where is the sequence length and is the average, over all values in the sequence, of the number of consecutive pairs of sequence values that bracket the given value (meaning that the given value is between the two sequence values). They also prove a lower bound stating that, for any and (non-constant) , any comparison-based sorting algorithm must use comparisons for some inputs.[14]
In pattern matching
The problem of Cartesian tree matching has been defined as a generalized form of string matching in which one seeks a substring (or in some cases, a subsequence) of a given string that has a Cartesian tree of the same form as a given pattern. Fast algorithms for variations of the problem with a single pattern or multiple patterns have been developed, as well as data structures analogous to the suffix tree and other text indexing structures.[15]
Notes
^ abIn some references, the ordering of the numbers is reversed, so the root node instead holds the maximum value and the tree has the max-heap property rather than the min-heap property.
Berkman, Omer; Schieber, Baruch; Vishkin, Uzi (1993), "Optimal doubly logarithmic parallel algorithms based on finding all nearest smaller values", Journal of Algorithms, 14 (3): 344–370, doi:10.1006/jagm.1993.1018
Bialynicka-Birula, Iwona; Grossi, Roberto (2006), "Amortized rigidness in dynamic Cartesian trees", in Durand, Bruno; Thomas, Wolfgang (eds.), STACS 2006, 23rd Annual Symposium on Theoretical Aspects of Computer Science, Marseille, France, February 23-25, 2006, Proceedings, Lecture Notes in Computer Science, vol. 3884, Springer, pp. 80–91, doi:10.1007/11672142_5, ISBN978-3-540-32301-3
Demaine, Erik D.; Landau, Gad M.; Weimann, Oren (2009), "On Cartesian trees and range minimum queries", Automata, Languages and Programming, 36th International Colloquium, ICALP 2009, Rhodes, Greece, July 5-12, 2009, Lecture Notes in Computer Science, vol. 5555, pp. 341–353, doi:10.1007/978-3-642-02927-1_29, hdl:1721.1/61963, ISBN978-3-642-02926-4
Fischer, Johannes; Heun, Volker (2006), "Theoretical and Practical Improvements on the RMQ-Problem, with Applications to LCA and LCE", Proceedings of the 17th Annual Symposium on Combinatorial Pattern Matching, Lecture Notes in Computer Science, vol. 4009, Springer-Verlag, pp. 36–48, doi:10.1007/11780441_5, ISBN978-3-540-35455-0
Fischer, Johannes; Heun, Volker (2007), "A New Succinct Representation of RMQ-Information and Improvements in the Enhanced Suffix Array.", Proceedings of the International Symposium on Combinatorics, Algorithms, Probabilistic and Experimental Methodologies, Lecture Notes in Computer Science, vol. 4614, Springer-Verlag, pp. 459–470, doi:10.1007/978-3-540-74450-4_41, ISBN978-3-540-74449-8
Kim, Sung-Hwan; Cho, Hwan-Gue (2021), "A compact index for Cartesian tree matching", in Gawrychowski, Pawel; Starikovskaya, Tatiana (eds.), 32nd Annual Symposium on Combinatorial Pattern Matching, CPM 2021, July 5-7, 2021, Wrocław, Poland, LIPIcs, vol. 191, Schloss Dagstuhl - Leibniz-Zentrum für Informatik, pp. 18:1–18:19, doi:10.4230/LIPIcs.CPM.2021.18, ISBN9783959771863
Leclerc, Bruno (1981), "Description combinatoire des ultramétriques", Centre de Mathématique Sociale. École Pratique des Hautes Études. Mathématiques et Sciences Humaines (in French) (73): 5–37, 127, MR0623034
Levcopoulos, Christos; Petersson, Ola (1989), "Heapsort - Adapted for Presorted Files", WADS '89: Proceedings of the Workshop on Algorithms and Data Structures, Lecture Notes in Computer Science, vol. 382, London, UK: Springer-Verlag, pp. 499–509, doi:10.1007/3-540-51542-9_41, ISBN978-3-540-51542-5
Nishimoto, Akio; Fujisato, Noriki; Nakashima, Yuto; Inenaga, Shunsuke (2021), "Position heaps for Cartesian-tree matching on strings and tries", in Lecroq, Thierry; Touzet, Hélène (eds.), String Processing and Information Retrieval - 28th International Symposium, SPIRE 2021, Lille, France, October 4-6, 2021, Proceedings, Lecture Notes in Computer Science, vol. 12944, Springer, pp. 241–254, arXiv:2106.01595, doi:10.1007/978-3-030-86692-1_20, ISBN978-3-030-86691-4, S2CID235313506
Oizumi, Tsubasa; Kai, Takeshi; Mieno, Takuya; Inenaga, Shunsuke; Arimura, Hiroki (2022), "Cartesian Tree Subsequence Matching", in Bannai, Hideo; Holub, Jan (eds.), 33rd Annual Symposium on Combinatorial Pattern Matching, CPM 2022, June 27-29, 2022, Prague, Czech Republic, LIPIcs, vol. 223, Schloss Dagstuhl - Leibniz-Zentrum für Informatik, pp. 14:1–14:18, doi:10.4230/LIPIcs.CPM.2022.14, ISBN9783959772341, S2CID246679910
Park, Sung Gwan; Amir, Amihood; Landau, Gad M.; Park, Kunsoo (2019), "Cartesian tree matching and indexing", in Pisanti, Nadia; Pissis, Solon P. (eds.), 30th Annual Symposium on Combinatorial Pattern Matching, CPM 2019, June 18-20, 2019, Pisa, Italy, LIPIcs, vol. 128, Schloss Dagstuhl - Leibniz-Zentrum für Informatik, pp. 16:1–16:14, arXiv:1905.08974, doi:10.4230/LIPIcs.CPM.2019.16, ISBN9783959771030, S2CID162168587
Shun, Julian; Blelloch, Guy E. (2014), "A Simple Parallel Cartesian Tree Algorithm and its Application to Parallel Suffix Tree Construction", ACM Transactions on Parallel Computing, 1: 1–20, doi:10.1145/2661653, S2CID1912378
Halaman ini berisi artikel tentang raja Makedonia kuno. Untuk kegunaan lain, lihat Aleksander (disambiguasi). Aleksander AgungΜέγας Αλέξανδρος Basileus Hegemon Liga Helen Syahansyah Iran Firaun Mesir Penguasa Asia Berkas:Napoli BW 2013-05-16 16-24-01Aleksander bertempur melawan Darius III. Dari Mozaik Aleksander, Museum Arkeologi Nasional NapoliRaja MakedoniaBerkuasa336–323 SMPendahuluFilipus IIPenerus Filipus III Aleksander IV Firaun MesirBerkuasa332–323 SMPendahuluDarius ...
Murra Municipio MurraLocalización de Murra en Nicaragua Coordenadas 13°45′33″N 86°01′02″O / 13.759166666667, -86.017222222222Entidad Municipio • País Nicaragua • Departamento Nueva SegoviaAlcalde Guillermo Centeno Lagos[1]Superficie Puesto 69.º de 153 • Total 429.1 km²Altitud • Media 776 m s. n. m.Población (2022)[2] Puesto 84.º de 153 • Total 19 729 hab. • Densi...
Para otros usos de este término, véase Stanbridge. Stanbridge EastMunicipalité de Stanbridge East Municipio Molino Cornell Stanbridge EastUbicación de Stanbridge East en Quebec Coordenadas 45°07′00″N 72°55′00″O / 45.1167, -72.9167Entidad Municipio • País Canadá • Provincia Quebec • Región Montérégie Este (Montérégie) • MRC Brome-MissisquoiAlcalde Gregory VaughanSubdivisiones Sin divisiónEventos históricos ...
ماندينغوMandingo (بالإنجليزية) معلومات عامةالصنف الفني سينما استغلال السود — فيلم دراما — فيلم أكشن — boxing film (en) الموضوع العبودية في الولايات المتحدة تاريخ الانتاج25 يوليو 1975 (1975-07-25)تاريخ الصدور القائمة ... 7 مايو 1975[1] (نيويورك)6 يونيو 1975[1] (سيدني)25 يوليو 1975[1&...
Sistem politik Xi-Li习李体制Pemerintahan Komunis Kelompok Kepemimpinan Tiongkok ke-5 Republik Rakyat TiongkokPetahana Sekretaris Jenderal & Presiden Tiongkok Xi Jinping (kiri)Perdana Menteri Tiongkok Li Keqiang (kanan)Dibentuk15 Maret 2013Struktur pemerintahanKepala negaraXi JinpingKepala pemerintahanLi KeqiangWakil kepala pemerintahan Kabinet I (2013–2018) Pertama: Zhang GaoliKedua: Liu YandongKetiga: Wang YangKeempat: Ma Kai Kabinet II (2018–sekarang) Pertama: Han ZhengK...
العلاقات التركية الموريتانية تركيا موريتانيا تركيا موريتانيا تعديل مصدري - تعديل العلاقات التركية الموريتانية هي العلاقات الثنائية التي تجمع بين تركيا وموريتانيا.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين: وجه ال�...
بطولة ساو توميه وبرينسيب 2016 تفاصيل الموسم بطولة ساو توميه وبرينسيب البلد ساو تومي وبرينسيب التاريخ بداية:21 مايو 2016 المنظم اتحاد ساو توميه وبرينسيب لكرة القدم البطل سبورتينغ برايا كروز مباريات ملعوبة 2 عدد المشاركين 18 أهداف مسجلة 7 بطولة ساو تومي...
تجمع مجري فائق بيسكيس-سيتوسمعلومات عامةجزء من الكون المرصود الكتلة 1٬000٬000٬000٬000٬000٬000 كتلة شمسية المكتشف أو المخترع آر. برينت تولى زمن الاكتشاف أو الاختراع 1987 موقع الاكتشاف الفلكي الولايات المتحدة الكوكب التابع جاذب عظيم الطول 1٬000٬000٬000 سنة ضوئية العرض 150٬000٬000 سنة ضوئية لد�...
Television station in Kabul Television channel LemarلمرCountryAfghanistanProgrammingLanguage(s)PashtoPicture formatHDTVTimeshift serviceTOLO TVTOLOnewsOwnershipOwnerMOBY GroupHistoryLaunched2006LinksWebsitewww.lemar.tv/enAvailabilityTerrestrialNormal antenna40 UHF (Kabul)41 UHF (Kandahar)39 UHF (Herat)29 UHF (Mazar-i-Sharif)34 UHF (Kunduz)43 UHF (Jalalabad)33 UHF (Taloqan)41 UHF (Puli Khumri)27 UHF (Ghazni)35 UHF (Khost) Lemar (Pashto:لمر, meaning sun in Pashto) is a television station ...
Minolta SLR A-mount prime lens Minolta AF Macro 100 mm f/2.8 lens with hood focused to close distance The Minolta AF Macro 100 mm f/2.8 lens is a discontinued macro lens produced by Minolta that was renowned for its sharpness[1] all the while garnering raving reviews[2] also. This lens achieves a true 1:1 magnification of the subject matter of interest to the photographer. While still having an aperture of f/2.8 coupled with its focal length of 100 mm, it is considered a doubl...
Executive order signed by U.S. President Joe Biden Executive Order 14071Prohibiting New Investment in and Certain Services to the Russian Federation in Response to Continued Russian Federation AggressionTypeExecutive orderExecutive Order number14071Signed byJoe Biden on April 6, 2022 (2022-04-06)SummaryIn light of the Russian Federation's unrelenting aggression, the United States is restricting investment and certain services to the Russian Federation. Executive Order...
زلزال تركيا 2020 معلومات التاريخ 24 يناير 2020 البلد تركيا مكان الزلزال 38°19′48″N 39°05′02″E / 38.330°N 39.084°E / 38.330; 39.084 إحداثيات 38°23′24″N 39°04′52″E / 38.39°N 39.081°E / 38.39; 39.081[1] القوة 6.7 [1](مقياس درجة العزم) النتائج الخسائر البشرية 29 قتلى، 272 جريح[...
Cricketat the 2023 SEA GamesDates29 April – 16 May 2023Administrator(s)Southeast Asian Games FederationCricket format 8 events 50 overs (M & W) T20 (M & W) T10 (M & W) Six-a-side (M & W) Host(s)AZ Group Cricket Oval, Phnom Penh, CambodiaParticipants7← 2017 Cricket at the2023 SEA GamesTournaments6sMenWomenT10MenWomenT20MenWomen50 oversMenWomenvte Cricket at the 2023 SEA Games was held at AZ Group Cricket Oval in Phnom Penh, Cambodia from 29 April to 16 May 2023. Despite...
Book about the Pacific War: 1941 to 1942 Pacific Crucible: War at Sea in the Pacific, 1941–1942 Pacific CrucibleAuthorIan W. TollAudio read byGrover GardnerCountryUnited StatesLanguageEnglishSeriesThe Pacific War TrilogyGenreHistoryPublisherW. W. Norton & CompanyPublication date2011Media typePrint, Kindle, AudiobookPages640pp (hardcover); 22 hrs and 6 mins (audiobook)ISBN978-0-393-34341-0Followed byThe Conquering Tide: War in the Pacific Islands, 1942-1944 (Volume 2)...
English zoologist and pharmacist Edward BlythBorn(1810-12-23)23 December 1810[1]LondonDied27 December 1873(1873-12-27) (aged 63)LondonResting placeHighgate Cemetery (west side)Known forCatalogue of the Birds of the Asiatic Society, 1849; The natural history of the Cranes 1881Scientific careerFieldsZoologyInstitutionsmuseum of the Royal Asiatic Society of Bengal, CalcuttaAuthor abbrev. (zoology)Blyth Edward Blyth (23 December 1810 – 27 December 1873) was an English zoo...
US Air Force manned Moon base plan This article includes a list of references, related reading, or external links, but its sources remain unclear because it lacks inline citations. Please help to improve this article by introducing more precise citations. (October 2015) (Learn how and when to remove this template message) Lunex ProjectMoon TypeUnderground Air Force baseSite informationControlled byUnited StatesSite historyBuiltPlanned to begin after 1967In useProject canceledGarriso...
British science fiction TV series This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: The Tribe 1999 TV series – news · newspapers · books · scholar · JST...
Para otros usos de este término, véase Himno (desambiguación). La Marsellesa, himno nacional francés Un himno es un canto o un texto lírico que expresa sentimientos positivos, de alegría y celebración. En la antigüedad era una composición coral en honor a una divinidad y es retomado con pleno valor litúrgico en la literatura latina cristiana de la Edad Media (por ejemplo, el Pange lingua escrito por Tomás de Aquino para conmemorar el día del Corpus). El vocablo deriva del idioma g...
Mountain range in Pershing County and Humboldt County, Nevada, US Kamma MountainsLocation of Kamma Mountains in Nevada[1] Highest pointElevation1,892 m (6,207 ft)GeographyCountryUnited StatesStateNevadaRegionBlack Rock DesertDistrictPershing County /Humboldt CountyRange coordinates40°46′14.646″N 118°39′53.578″W / 40.77073500°N 118.66488278°W / 40.77073500; -118.66488278Topo mapUSGS Sulphur The Kamma Mountains are a mountain range...