Напишите программу для поиска большинства элементов в массиве на Python.

Задача: найти старший элемент массива. В массиве A() с размером массива n преобладает элемент, встречающийся более n/2 раз.

Пример :

Вход: {3, 3, 4, 2, 4, 4, 2, 4, 4} Выход: 4 Giải thích: Tần suất xuất hiện của 4 là 5 lớn hơn một nửa kích thước của mảng. Ввод: {3, 3, 4, 2, 4, 4, 2, 4} Вывод: Кхонг ко Пхон Ту Чим Джа Со Ги Тхич: Кхонг Ко Пхон Ту Нао Ко Тун Суут Ксуат Хиун л ớn hơn một nửa kích thước của mảng.

В этой статье TipsMake.com вместе с вами научится писать программу для определения мажоритарного элемента на языке программирования Python.

Способ 1: Самый простой способ справиться с этим

Самое простое решение — использовать два цикла для подсчета максимального количества вхождений всех различных элементов. Если максимальное количество вхождений больше n/2, остановите цикл и верните элемент с максимальным количеством вхождений. Если максимальное количество вхождений не превышает n/2, то мажоритарный элемент не существует.

Иллюстрированное решение:

arr() = {3, 4, 3, 2, 4, 4, 4, 4}, n = 8 Для i = 0: count = 0 – Lặp qua toàn bộ mảng, khi một phần tử bằng với arr(i) (là 3), tăng count – count của arr(i) là 2, số này nhỏ hơn n/2, do vậy nó không phải là phần tử chiếm đa số Для i = 1: count = 0 – Lặp qua toàn Бо Манг , khi một phần tử bằng với arr(i) (là 4), tăng count – count của arr(i) là 5, số này lớn hơn n/2 (là 4), do vậy nó chính la phần tử chi ếm đa số Kết luận, 4 la phần tử chiếm đa số.

Выполните следующие действия, чтобы решить проблему:

  1. Создайте переменную для хранения максимального количества, count = 0.
  2. Просмотрите таблицу от начала до конца.
  3. С элементом в массиве запустите еще один цикл, чтобы найти частоту появления подобных элементов в данном массиве.
  4. Если количество больше максимального, обновите максимальное количество и сохраните индекс в другой переменной.
  5. Если максимальная частота больше половины размера массива, выведите элемент. В противном случае возвращает сообщение о том, что в массиве нет мажоритарного элемента.

Вот пример кода для справки:

# Программа на Python3 для поиска элемента большинства # в массиве # Функция для поиска элемента большинства # в массиве j in range(n): if(arr(i) == arr(j)): count += 1 # обновить maxCount, если количество # текущего элемента больше if(count > maxCount): maxCount = count index = i # если maxCount больше n/2 # вернуть соответствующий элемент if (maxCount > n//2): print(arr(index)) else: print(“No Majority Element”) # Код драйвера if __name__ == “__main__” : arr = (1, 1, 2, 1, 3, 5, 1) n = len(arr) # Вызов функции findMajority(arr, n) # Этот код предоставлен # ChitraNayal

Способ 2. Используйте двоичное дерево поиска (BST)

Добавьте каждый элемент в BTS и, если этот элемент присутствует, увеличьте количество узлов. На любом этапе, если количество узлов больше n/2, выведите элемент.

Выполните следующие действия, чтобы решить проблему:

  1. Создайте бинарное дерево поиска, если тот же элемент вводится в бинарное дерево поиска, частота узлов будет увеличена.
  2. Пройдите массив и добавьте элемент в двоичное дерево поиска.
  3. Если максимальное значение частоты любого узла превышает половину размера массива, выполните обход по порядку и найдите этот узел.
  4. В противном случае возвращает сообщение массива без мажоритарного элемента.

Вот пример кода для справки:

# Программа Python3 для демонстрации операции вставки в двоичное # дерево поиска. # класс для создания узла class Node(): def __init__(self, data): self.data = data self.left = None self.right = None self.count = 1 # количество вставок данных в дерево # класс для бинарного дерева поиска # он инициализирует дерево без корня # функция вставки вставляет узел в соответствии с правилом BST # а также проверяет наличие основного элемента # если еще не найден основной элемент, она возвращает None class BST(): def __init__(self) : self.root = None def insert(self, data, n): out = None if (self.root == None): self.root = Node(data) else: out = self.insertNode(self.root, data , n) вернуть def insertNode(self, currentNode, data, n): if (currentNode.data == data): currentNode.count += 1 if (currentNode.count > n//2): вернуть currentNode.data иначе : return None elif (currentNode.data data): if (currentNode.left): self.insertNode(currentNode.left, data, n) else: currentNode.left = Node(data) # Код драйвера # объявление массива arr = ( 3, 2, 3) n = len(arr) # объявление None tree tree = BST() flag = 0 for i in range(n): out = tree.insert(arr(i), n) if (out != Нет): print(arr(i)) flag = 1 break if (flag == 0): print(“Нет элемента большинства”)

Способ 3: используйте алгоритм голосования Мура

Это двухэтапный процесс:

  1. Первый шаг дает элемент, который может быть мажоритарным элементом в массиве. Если в массиве есть элемент большинства, то этот шаг обязательно вернет элемент с большинством. В противном случае он возвращает кандидата на мажоритарный элемент.
  2. Второй шаг — проверить, действительно ли мажоритарный элемент, полученный на предыдущем шаге, является мажоритарным элементом. Этот шаг необходим, поскольку существует случай, когда элемент большинства отсутствует.

Иллюстрированное решение:

arr() = {3, 4, 3, 2, 4, 4, 4, 4}, n = 8 maj_index = 0, count = 1 Ở i = 1: arr(maj_index) != arr(i) – count = count – 1 = 1 – 1 = 0 – теперь count == 0 тогда: – maj_index = i = 1 – count = count + 1 = 0 + 1 = 1 Ở i = 2: arr(maj_index) != arr(i) – count = count – 1 = 1 – 1 = 0 – теперь count == 0 тогда: – maj_index = i = 2 – count = count + 1 = 0 + 1 = 1 Ở i = 3: arr(maj_index) != arr (i) – count = count – 1 = 1 – 1 = 0 – теперь count == 0 тогда: – maj_index = i = 3 – count = count + 1 = 0 + 1 = 1 Ở i = 4: arr(maj_index) != arr(i) – count = count – 1 = 1 – 1 = 0 – теперь count == 0 тогда: – maj_index = i = 4 – count = count + 1 = 0 + 1 = 1 Ở i = 5: arr (maj_index) == arr(i) – count = count + 1 = 1 + 1 = 2 Ở i = 6: arr(maj_index) == arr(i) – count = count + 1 = 2 + 1 = 3 Ở i = 7: arr(maj_index) == arr(i) – count = count + 1 = 3 + 1 = 4 Do đó, arr(maj_index) có khả năng là ứng viên phần tử chiếm đa số. Bay giu, duyệt lại toàn bộ mảng để kiem tra xem arr (maj_index) có phai là phần tử chiếm đa số hay khong. arr(maj_index) là 4 4 xuất hiện 5 lần trong mảng nên 4 là phần tử chiếm đa số.

Выполните следующие действия, чтобы решить проблему:

  1. Перебирает каждый элемент и поддерживает количество элементов большинства (count) и индекс большинства maj_index.
  2. Если следующий элемент похож, увеличьте количество, а если следующий элемент не похож, уменьшите количество.
  3. Если count равен 0, то измените maj_index на текущий элемент и установите count обратно на 1.
  4. Теперь продолжайте обход массива и найдите количество найденных мажоритарных элементов.
  5. Если count больше половины размера массива, вернуть элемент.
  6. В противном случае возвращает массив без мажоритарного элемента.

Вот пример кода для справки:

# Программа для нахождения мажоритарного элемента в массиве # Функция поиска кандидата на мажоритарность def findCandidate(A): maj_index = 0 count = 1 for i in range(len(A)): if A(maj_index) == A( i): count += 1 else: count -= 1 if count == 0: maj_index = i count = 1 return A(maj_index) # Функция для проверки того, встречается ли кандидат более n/2 раз def isMajority(A, cand ): count = 0 for i in range(len(A)): if A(i) == cand: count += 1 if count > len(A)/2: return True else: return False # Функция для вывода большинства Element def printMajority(A): # Найти кандидата в большинство cand = findCandidate(A) # Напечатать кандидата, если он является большинством if isMajority(A, cand) == True: print(cand) else: print(“Нет элемента большинства “) # Код драйвера A = (1, 3, 3, 1, 2) # Вызов функции printMajority(A)

Способ 4: использовать хеширование

В хеш-таблице (пара ключ-значение) at value поддерживает количество для каждого элемента (ключа) и всякий раз, когда значение count превышает половину длины массива, возвращает этот ключ (элемент, который составляет большинство).

Иллюстрированное решение:

arr() = {3, 4, 3, 2, 4, 4, 4, 4}, n = 8 Tạo một hashtable cho mảng 3 -> 2 4 -> 5 2 -> 1 Duyệt qua toàn bộ hashtable – Count cho 3 là 2, nhỏ hơn n/2 (4) do vậy nó không thể là phần tử chiếm đa số. – Считайте чо 4 là 5, lớn hơn n/2 (4) do vậy 4 là phần tử chiếm đa số. Kết luận 4 la phần tử chiếm đa số.

Выполните следующие действия, чтобы решить проблему:

  1. Создайте хэш-таблицу, содержащую пары ключ-значение. В этом случае ключ — это элемент, а значение — это частота появления этого элемента в массиве.
  2. Пройдите весь массив от начала до конца.
  3. Для каждого элемента в массиве добавьте элемент в хеш-таблицу, если элемент еще не существует в качестве ключа, в противном случае загрузите значение ключа (массив (i)) и увеличьте значение на 1.
  4. Если count больше половины размера массива, вернуть основной элемент и завершить программу.
  5. Если нет, верните сообщение о том, что основной элемент не найден.

Вот пример кода для справки:

# Программа на Python3 для определения большинства # элемента в массиве def findMajority(arr, size): m = {} for i in range(size): if arr(i) in m: m(arr(i)) += 1 иначе: m(arr(i)) = 1 count = 0 для ключа в m: if m(key) > size / 2: count = 1 print(“Большинство найдено:-“,key) break if(count == 0 ): print(“No Majority element”) # Код драйвера arr = (2, 2, 2, 2, 5, 5, 2, 3, 3) n = len(arr) # Вызов функции findMajority(arr, n) # Этот код предоставлен ankush_953

Способ 5: использовать сортировку

Идея этого метода заключается в перестановке массива. Сортировка приводит к тому, что похожие элементы в массиве становятся непрерывными, поэтому повторяйте массив и обновляйте счетчик до тех пор, пока текущий элемент не станет таким же, как предыдущий. Если частота элемента больше половины размера массива, вернуть элемент, который имеет большинство.

Иллюстрированное решение:

arr() = {3, 4, 3, 2, 4, 4, 4, 4}, n = 8 Mảng sau khi Сортировка => arr() = {2, 3, 3, 4, 4, 4, 4, 4}, count = 1 Ở i = 1: – arr(i) != arr(i – 1) => arr(1) != arr(0) – count không lớn hơn n/2, do thiết lập lại count, count = 1 Ở i = 2: – arr(i) == arr(i – 1) => arr(2) == arr(1) = 3 – count = count + 1 = 1 + 1 = 2 Ở i = 3 – arr(i) != arr(i – 1) => arr(3) != arr(2) – count không lớn hơn n/2, do thiết lập lại count, count = 1 Ở i = 4 – arr(i) == arr(i – 1) => arr(4) == arr(3) = 4 – count = count + 1 = 1 + 1 = 2 Ở i = 5 – arr(i) = = arr(i – 1) => arr(5) == arr(4) = 4 – count = count + 1 = 2 + 1 = 3 Ở i = 6 – arr(i) == arr(i – 1) => arr(6) == arr(5) = 4 – count = count + 1 = 3 + 1 = 4 Ở i = 7 – arr(i) == arr(i – 1) => arr(7) = = arr(6) = 4 – count = count + 1 = 4 + 1 = 5 Do count của 4 lớn hơn n/2 nên 4 là phần tử chiếm đa số.

Выполните следующие действия, чтобы решить проблему:

  1. Отсортируйте массив и создайте переменную count и temp с temp = INT_MIN.
  2. Перебрать все элементы от начала до конца.
  3. Если текущий элемент равен предыдущему элементу, счетчик увеличивается.
  4. В противном случае установите счетчик обратно на 1.
  5. Если count больше половины размера массива, вернуть основной элемент и остановить программу.
  6. Если нет, верните сообщение о том, что мажоритарного элемента нет.

Вот пример кода для справки:

# Программа на Python3 для поиска # элемента большинства в массиве # Функция для поиска элемента большинства # в массиве # возвращает -1, если нет элемента большинства. .sort() count, max_ele, temp, f = 1, -1, arr(0), 0 for i in range(1, n) : # увеличивает счетчик, если встречается один и тот же элемент # в противном случае начинает подсчет нового элемента if( temp == arr(i)) : count += 1 else : count = 1 temp = arr(i) # устанавливает максимальное значение count # и сохраняет максимальное число встречающихся элементов # если максимальное значение становится больше n/2 # происходит разрыв установка флага if(max_ele (n//2)) : f = 1 break # возвращает максимальный встречающийся элемент # если такого элемента нет, возвращает -1 if f == 1 : return ele else : return -1 # Код драйвера arr = (1, 1, 2, 1, 3, 5, 1) n = len(arr) # Вызов функции print(majorityElement(arr, n)) # Этот код предоставлен divyeshrabadiya07

TipsMake.com надеется, что эта статья будет вам полезна.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *