Как писать статьи DSA на GeeksforGeeks?

Опубликовано: 24 Сентября, 2022

GeeksforGeeks предоставляет всем энтузиастам кодирования возможность продемонстрировать свои навыки программирования и структур данных и алгоритмов, написав статьи о программировании или DSA. Тем не менее, многим людям (особенно студентам колледжей или новичкам) трудно сформулировать свои знания и навыки и внести свой вклад в GeeksforGeeks. Но теперь проблема решена, так как эта статья проведет вас через весь процесс и рекомендации по написанию статей по программированию/DSA на GeeksforGeeks .

Давайте начнем:

Прежде всего, вам нужно знать, как начать писать статьи в GFG , а также различные другие фундаментальные аспекты, такие как зачем вам вносить свой вклад, где писать и т. д. Вы можете перейти по этой ссылке, чтобы узнать все эти детали всесторонне.

Как проверить, можем ли мы написать статью?

Теперь вам нужно проверить, можете ли вы написать статью на определенную тему/проблему или нет. Вы можете сделать то же самое, выполнив следующие шаги:

  1. Найдите заголовок и формулировку проблемы в Пользовательском поиске на GeeksforGeeks. Если есть, не пишите.
  2. Затем выполните поиск по заголовку, формулировке проблемы и примерам (вместе и/или по отдельности) в Google, чтобы найти соответствующие существующие ссылки с других веб-сайтов. Если такой же контент доступен где-то, например, на Codility, Codeforces и т. д., это приведет к плагиату и, следовательно, не может быть принято.
  3. Найдите некоторые основные варианты или обобщенные формулировки проблемы. В случае обнаружения это будет считаться плагиатом.

Если статья проходит вышеуказанные пункты, статья может быть написана.

Кодирование статьи Формат и рекомендации

Двигаясь дальше, давайте проверим формат и рекомендации, которым вы должны следовать при написании статьи о программировании на GeeksforGeeks. Статьи по программированию должны содержать следующие пункты:

  1. Постановка задачи
  2. Примеры (два). Объяснение примеров для правильного понимания того, как мы добились результата.
  3. Ссылки на предпосылки для подхода, если они есть.
  4. Подход, используемый для решения проблемы.
    1. Во-первых, основная идея или интуиция
    2. Затем шаг за шагом указывает, как этот подход будет работать.
    3. Выделите любое важное наблюдение или точку, используя жирный шрифт, цитату или префикс.
  5. Реализация/код. Если есть коды на нескольких языках, порядок должен быть C++, Java, Python3, C#. Обратите внимание, что коды Python 2 не принимаются, но принимаются коды Python 3.
  6. Временная сложность и вспомогательное пространство с объяснением терминов, используемых для их выражения.

Пожалуйста, старайтесь, чтобы язык был простым, конкретным и свободным от местоимений, таких как я, вы, мы и т. д.

Формат подхода

Если подход:

We create a mark[] array of Boolean type. We iterate through all the characters of our string and whenever we see a character we mark it. Lowercase and Uppercase are considered the same. So ‘A’ and ‘a’ are marked in index 0 and similarly ‘Z’ and ‘z’ are marked in index 25.

Вышеизложенное можно записать как:

This approach is based on Hashing.  

  1. A Hashing data structure of boolean type is created of size 26, such that index 0 represents the character ‘a’, 1 represents the character ‘b’, and so on.
  2. Traverse the string character by character and mark the particular character as present in the Hash.
  3. After complete traversal and marking of the string, traverse the Hash and see if all characters are present, i.e. every index has true. If all are marked, then return true, else False.

Пример подхода:

Задача – вывести все уникальные комбинации расстановки N фишек на доске NxN.

Approach: This problem can be solved by using recursion to generate all possible solutions. Now, follow the steps below to solve this problem:

  1. Create a function named allCombinations, which will generate all possible solutions.
  2. It will take an integer piecesPlaced denoting the number of total pieces placed, integer N denoting the number of pieces needed to be placed, two integers row and col denoting the row and column where the current piece is going to be placed and a string ans for storing the matrix where pieces are placed, as arguments.
  3. Now, the initial call to allCombinations will pass 0 as piecesPlaced, N, 0 and 0 as row and col and an empty string as ans.
  4. In each call, check for the base case, that is:
    • If row becomes N and all pieces are placed, i.e. piecesPlaced=N. Then print the ans and return. Else if piecesPlaced is not N, then just return from this call.
  5. Now make two calls:
    • One to add a ‘*’ at the current position, and one to leave that position and add ‘-‘.
  6. After this, the recursive calls will print all the possible solutions.

Как добавить код в статью?

Двигаясь дальше, теперь вам нужно понять процесс добавления кода в статью. Это выглядит следующим образом:

Вы можете использовать кнопку « Добавить код» , чтобы добавить код.

Чтобы добавить код на нескольких языках программирования, вы можете выбрать опцию « Добавить другой язык », как показано ниже. После этого нажмите кнопку «Продолжить ».

Если ваш код не компилируется или не запускается по какой-либо причине, например библиотеки, не поддерживаемые компилятором, вы хотите продемонстрировать ошибки и т. д., снимите флажок «Включить запуск в Ide», чтобы удалить кнопки запуска из кода. Эта кнопка также позволяет избежать ошибок при попытке добавить вывод с помощью кнопки « Добавить вывод », которая находится рядом с кнопкой « Добавить код ».

Стандарты кодирования

Вам необходимо убедиться, что вы соблюдаете следующие стандарты кодирования:

1) Имена функций и переменных соответствуют регистру верблюда. Например, getMin(), getMax() и removeDuplicates(), isPresent и т. д.

2) Код драйвера (или основная функция) не содержит никакой логики. Он содержит только ввод/вывод и вызов функции.

3) Отступ должен быть сделан с использованием 4 пробелов.

4) Максимум 60 символов в строке, чтобы программу можно было читать на мобильных устройствах без особой горизонтальной прокрутки.

C




// Below style should be avoided
int fun(int a, int sumSoFar, int currSum, char val, int *result)
   
// The above should be written as
int fun(int a, int sumSoFar, int currSum, char val,
        int *result)

C++




// Below style should be avoided
 cout << "Sample code to understand coding style for more readability of millions of readers" << val;
   
// The above should be written as
cout << "Sample code to understand coding style for"
     << " more readability of millions of readers"
     << val;

5) Если код написан на нескольких языках, таких как Python, Java и C/C++, вывод всех кодов должен быть одинаковым.

6) Избегайте использования операторов scanf (или cin).

7) Пробелы в то время как, если, иначе, для

C




// There should be one space after while, no other
// spaces
while (i < 0)   
   
if (x < y)
{
   
}

8) Не должно быть пробелов для вызова функции или объявления функции

C




// No spaces after "reverse" or after "("
void reverse(char* str, int low, int high)
{
    while (low < high)
    {
        swap(&str[low], &str[high]);
        ++low;
        --high;
    }
}   
   
// Driver program to test above function
int main()
{
   char str[] =  "geeksforgeeks";
   reverse(str);
   return 0;
}

9) Избегайте использования typedef.

10) Имена функций должны иметь форму « maxOfTwo ()», имена переменных должны быть в форме «max_of_two» или соответствовать стилю имени функции. Имена классов/структур должны иметь вид « ComplexNumber » или « SuffixTreeNode ». Имена макросов должны быть написаны заглавными буквами, например MAX_SIZE.

11) Избегайте использования статических и глобальных переменных.

12) Когда мы используем cout, мы должны использовать пробел между cout и «<<» и пробел между двумя «<<». Например:

C++




cout << "Sample" << "Example"

13) В списке объявлений и передаче параметров должен быть пробел после запятой.

C




int x, y, z;
  
fun(x, y, z);

14) В операторах присваивания должны быть пробелы

C




// Should be avoided
int x, y=0;
   
// Should be followed
int x, y = 0;
   
// Should be avoided
x+=10;
   
// Should be followed
x += 10;

15) В начале каждой программы, пожалуйста, напишите строку, сообщающую цель программы:

Java




// Java program to illustrate sum of two numbers

Примечание. Настоятельно рекомендуется добавлять временную сложность после вашего кода в статьях о структурах данных/алгоритмах.

Рекомендации по созданию изображений

Рекомендации по созданию образа следующие:

  • Название изображения должно быть релевантным . Например, если на изображении изображено: «Добавление двух номеров с использованием связанного списка», заголовок изображения должен быть: Добавление двух номеров с использованием связанного списка.
  • Если образ создается с помощью трассировщика пакетов, по возможности отправьте запись экрана вместо изображения.
  • В случае скриншотов, пожалуйста, добавьте GeeksforGeeks (или GFG) где-нибудь в выводе. Например, это может быть имя папки, название изображения и т. д.
  • Обязательно создавать свои собственные изображения с помощью какого-либо инструмента для рисования изображений (например, Google Drawings, MS Paint, https://www.draw.io/). Изображения НЕ ДОЛЖНЫ быть взяты из любого другого источника, чтобы избежать проблем с авторскими правами. Вы можете следовать приведенным ниже рекомендациям для создания изображений в стиле GeeksforGeeks:
    • Граница/контур изображения должны быть черного цвета.
    • Текст, который будет написан, должен быть зеленого цвета.
    • Нашим приоритетом должно быть использование белого фона, если нужны другие цвета фона, используйте зеленый цвет в качестве фона и белый цвет в тексте.
    • Красный цвет следует использовать для обозначения движений, представлений, вариаций и прочего.
    • Если на изображении требуется больше цветов, свяжитесь с рецензентами GeeksforGeeks, чтобы они помогли вам.

Пожалуйста, посмотрите пример изображения ниже, чтобы получить четкое представление о создании образа массива:

Важные моменты (с примерами)

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

2. Добавьте Time Complexity и Auxiliary Space после вашего кода в статьях о структурах данных/алгоритмах. Ознакомьтесь со статьей для справки: Распечатайте все уникальные комбинации расстановки N фишек на доске NxN.

3. При использовании Эффективного Подхода для решения проблемы сначала нужно объяснить, чем он лучше Наивного/Старого Подхода. Например, ознакомьтесь с этой статьей: количество пар (arr[i], arr[j]), таких что arr[i] + j и arr[j] + i равны.

4. Еще несколько образцов статей:

  • Максимизируйте сумму элементов arr[i], выбранных путем перехода индекса по значению i
  • Найдите, удаляется ли 0 больше или 1, удаляя средний элемент, если последовательный триплет делится на 3 в данном двоичном массиве
  • Проверить, можно ли число представить в виде произведения простого и составного числа

Примечание. Задача, взятая напрямую из Codility и Codeforces, не может быть опубликована из-за проблем с авторскими правами.